Algoritma-11

REVIEW UAS

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

struct Baju{
char kodeBaju[7];
char namaBaju[100];
int qty;
int hargaSatuan;
};

int initProgram(Baju baju[]){
FILE *file = fopen(“data.txt”, “r”);
int index = 0;
char tempHarga[100], tempQty[100];
while (!feof(file)){
fscanf(file, “%[^;];%[^;];%[^;];%[^\n]\n”, baju[index].kodeBaju, baju[index].namaBaju, tempQty, tempHarga);
baju[index].qty = atoi(tempQty);
baju[index].hargaSatuan = atoi(tempHarga);
index++;
}
fclose(file);
return index;
}

void generateTable(Baju baju[], int totalItem){
printf(“%-4s%-12s%-20s%-5s%-15s\n”, “No.”, “Code”, “Name”, “Qty”, “Price”);
printf(“============================================================\n”);
for (int i = 0; i < totalItem; i++)
printf(“%-4d%-12s%-20s%-5d%-15d\n”, (i + 1), baju[i].kodeBaju, baju[i].namaBaju, baju[i].qty, baju[i].hargaSatuan);
if(totalItem == 0) printf(“There is no data!”);
printf(“\n\n\n”);
}

char *generateCode(Baju baju[], int totalItem){
static char kode[10], kodeReturn[10];
int count;
strcpy(kode, baju[totalItem – 1].kodeBaju);
kode[0] = ‘0’; kode[1] = ‘0’;
count = atoi(kode) + 1;
if (count < 10) strcpy(kodeReturn, “JF00”);
else if (count < 100) strcpy(kodeReturn, “JF0”);
else if (count < 1000) strcpy(kodeReturn, “JF”);
itoa(count, kode, 10);
strcat(kodeReturn, kode);
return kodeReturn;
}

int checkCode(char key[], Baju baju[], int totalItem){
int left = 0, right = totalItem – 1, mid;
do{
mid = (left + right) / 2;
if (strcmp(baju[mid].kodeBaju, key) == 0) return mid;
else if (strcmp(baju[mid].kodeBaju, key) == -1) left = mid + 1;
else right = mid – 1;
} while (left<=right);
return -1;
}

void sort(Baju baju[], int left, int right, char by[], char option[]){
int i = left, j = right;
int pivotInt;
char pivotChar[100];
Baju tempBaju;
if (strcmp(by, “code”) == 0)strcpy(pivotChar, baju[(left + right) / 2].kodeBaju);
else if (strcmp(by, “name”) == 0)strcpy(pivotChar, baju[(left + right) / 2].namaBaju);
else if (strcmp(by, “qty”) == 0)pivotInt = baju[(left + right) / 2].qty;
else if (strcmp(by, “price”) == 0)pivotInt = baju[(left + right) / 2].hargaSatuan;
while (i <= j){
if (strcmp(by, “code”) == 0) { while (strcmp(baju[i].kodeBaju, pivotChar) < 0) i++; while (strcmp(baju[j].kodeBaju, pivotChar) > 0) j–; }
else if (strcmp(by, “name”) == 0) { while (strcmp(baju[i].namaBaju, pivotChar) < 0) i++; while (strcmp(baju[j].namaBaju, pivotChar) > 0) j–; }
else if (strcmp(by, “qty”) == 0) { while (baju[i].qty < pivotInt) i++; while (baju[j].qty > pivotInt) j–; }
else if (strcmp(by, “price”) == 0) { while (baju[i].hargaSatuan < pivotInt) i++; while (baju[j].hargaSatuan > pivotInt) j–; }
if (i <= j){
tempBaju = baju[i];
baju[i] = baju[j];
baju[j] = tempBaju;
i++; j–;
}
}
if (left < j) sort(baju, left, j, by, option);
if (i < right) sort(baju, i, right, by, option);
}

void saveData(Baju baju[], int totalItem){
FILE *file = fopen(“data.txt”, “w”);
for (int i = 0; i < totalItem; i++)
fprintf(file, “%s;%s;%d;%d\n”, baju[i].kodeBaju, baju[i].namaBaju, baju[i].qty, baju[i].hargaSatuan);
fclose(file);
}

int main(){
Baju baju[100];
int totalItem = initProgram(baju);
int choose, avail;
char tempCode[10], tempBy[10], tempSrt[10];
do{
system(“cls”);
printf(“\t\t\tJackForce Store\n\n”);
generateTable(baju, totalItem);
printf(“Menu\n”);
printf(“====\n”);
printf(“1. Add Item\n”);
printf(“2. Remove Item\n”);
printf(“3. Sort Item\n”);
printf(“4. Exit\n”);
printf(“\nInput menu : “);
scanf(“%d”, &choose); fflush(stdin);
switch (choose){
case 1:
sort(baju, 0, (totalItem-1), “code”, “asc”);
do{
printf(“Input your item’s name [3..20] : “);
gets(baju[totalItem].namaBaju);
} while (strlen(baju[totalItem].namaBaju)<3 || strlen(baju[totalItem].namaBaju)>20);
do{
printf(“Input your item’s qty [1..1000] : “);
scanf(“%d”, &baju[totalItem].qty); fflush(stdin);
} while (baju[totalItem].qty<1 || baju[totalItem].qty>1000);
do{
printf(“Input your item’s price [10000..1000000] : “);
scanf(“%d”, &baju[totalItem].hargaSatuan); fflush(stdin);
} while (baju[totalItem].hargaSatuan<10000 || baju[totalItem].hargaSatuan>1000000);
strcpy(baju[totalItem].kodeBaju, generateCode(baju, totalItem));
totalItem++;
printf(“Success insert the new item!”);
getchar();
break;
case 2:
avail = -99;
do{
printf(“Input your item’s code [input ‘cancel’ to cancel] : “);
scanf(“%s”, tempCode); fflush(stdin);
if (strcmp(tempCode, “cancel”) != 0 && (avail = checkCode(tempCode, baju, totalItem)) == -1){
printf(“Can’t find the item that you mean.. Please check again the code.\n”);
getchar();
}
} while (strcmp(tempCode, “cancel”) != 0 && avail == -1);
if (avail != -99){
for (int i = avail + 1; i >= 1 && i < totalItem; i++){
baju[i-1] = baju[i];
}
totalItem -= 1;
printf(“Success delete an item!”);
getchar();
}
break;
case 3:
do{
printf(“Sort by [code/name/qty/price] : “);
scanf(“%s”, tempBy);
} while (strcmp(tempBy, “code”) != 0 && strcmp(tempBy, “name”) != 0 && strcmp(tempBy, “qty”) != 0
&& strcmp(tempBy, “price”) != 0);
sort(baju, 0, (totalItem-1), tempBy, “asc”);
printf(“The data has been sorted!”);
getchar();
break;
}
} while (choose != 4);
saveData(baju, totalItem);
printf(“Exit from the System.. Press Any Key to Continue…”);
getchar();
return 0;
}

Algoritma-10

Sorting

– Sorting adalah metode pengurutan data yang memudahkan kita dalam pekerjaan.

– Tipe-tipe sorting

1. Simple

a. Bubble sort :

  • Adalah pengurutan data dengan membandingkan data di sebelahnya sampai ampai bisa dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Bisa mengurutkan data dari yang terbesar ke yang terkecil atau sebaliknya (Ascending atau Descending)

b. Selection sort :

  • Adalah pengurutan data dengan membandingkan indeks yang ada dan data ditukar menurut indeks yang ada. Menggunakan temp sebagai tempat menyimpan data terkecil.

c. Insertion sort :

  • Adalah pengurutan data dengan metode penyisipan dan membandingkan data, namun dalam putaran pengurutan tidak menentukan nilai terkecilnya.

2. Intermediate

a. Quick sort :

  • Adalah pengurutan data yang menggunakan teknik pemecahan data menjadi partisi-partisi, sehingga metode ini disebut juga dengan nama partition exchange sort.
  • Metode cukup sulit bagi amatiran, namun efektif dalam pekerjaannya.

b. Merge sort :

  • Adalah pengurutan data dengan membaginya menjadi beberapa bagian, baru digabungkan kembali dengan pengsortiran.

 

Searching

– Dapat digunakan lebih efektif saat data sudah disortir dengan metode diatas.

– Berfungsi untuk mencari data yang ingin digunakan para pengguna/pekerja.

– Memakai kata kunci.

– Jenis searching :

1. Linear Search :

  • Memakai teknik barbar.
  • Pemakaian metode ini tak efektif untuk data besar.
    • Algoritma :
    1. n : total record of array x.
    2. For each x[i], 0 £ i £ n-1, check whether x[i] = key.
    3. If x[i] = key, then the searched data is found in index=i. Finished.
    4. If x[i] ¹ key, then continue searching until the last data which is i = n-1.
    5. If i= n-1 and x[i] ¹ key, it means the data is not exist in the list, and setindex = -1.
    6. Finished.

2. Binary search :

  • Efektif penggunannya dalam data kecil dan belum disortir.
  • Algoritma :
  1. n : total record of array x.
  2. left=0, right= n-1.
  3. mid =(int) (left + right)/2.
  4. If x[mid]=key then index = mid. Finished.
  5. If x[mid]<key then left = mid+1.
  6. If x[mid]>key then right = mid-1.
  7. If left £ right and x[mid] ¹ key, then repeat point 3.
  8. If x[mid] ¹ key then index = -1. Finished.

3. Interpolation search :

  • Efektif jika data sudah disortir dan lokasi pencarian data mendetail.
  • Algoritma :
  1. In the interpolation search, we’ll split the data according to the following formula:
  2. If data[mid] = sought data, data has been found, searching is stopped and return mid.
  3. If data[mid]!= sought data, repeat point ** (**Searching is continued while sought data > data[min] and sought data < data[max].)
  4. Looking for a mid value by entering into the interpolation formula
  5. If data[mid] > sought data, high = mid – 1
  6. If data[mid] < sought data, low = mid + 1
  7. It will be looped until the requirements point ** are not met thenreturn (-1), data not found

 

Algoritma-8

File Processing

Definisi Streams
Stream adalah urutan karakter. Semua input dan output data stream.

Ketika program C dijalankan ada 3 standard streams yang diaktifkan:

  1. Standard Input Stream (stdin)
    Mengontrol stream input dari keyboard
  2. Standard output Stream (stdout)
    Mengontrol stream output ke monitor
  3. Standard error Stream (stderr)
    Mengontrol pesan error

File dan Streams :
Membuka file ordering pointer kembali ke initiator. Pointer menunjuk ke struktur data dengan tipe FILE didefinisikan dalam stdio.h

Contoh stream :
Standard Input Stream (misal : scanf), dengan file pointer stdin
Standard output Stream (saat ingin dicetak misal : printf), dengan file pointer stdout.
Standard error Stream (jika kita pelajari C# lebih lanjut, akan ada perror), dengan file pointer stderr.

Buffer area adalah bagian dari memori yang digunakan sebagai ruang sementara sebelum data pindah ke sebuah file.

fopen = untuk membuka data dari file yang ingin dibuka.

fclose = untuk menutup semua data yang telah dibuka.

fprintf, fputs = memasukkan data ke dalam file.

fscanf, fgets = untuk menampilkan data yang telah dimasukkan ke dalam file.

Beberapa perintah untuk mengakses file:

  1. w=untuk menulis ulang semua data yang ada
  2. r=untuk membaca saja data yang ada
  3. a=untuk menambahkan data yang telah ada
  4. w+=untuk menulis ulang semua data serta membaca data
  5. r+=untuk membaca dan juga menambahkan data yang ada
  6. a+=untuk menambahkan data juga membaca data
  7. wb=menulis data dalam bentuk binary
  8. rb=membaca sebuah data yang dibentuk dalam binary
  9. ab=menambahkan data dalam bentuk binary