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

Algoritma-7

Function and Recursive

Program = module (function)

Main program -> sub program -> sub program

  • Library function=yang sudah disediakan dari C sendiri
  • User Defined function=function yang dapat dibuat oleh pengguna/user

Cara buat fungsi:

Return-value-type function-name (parameter list){ statement; }

Scoping batasan dari suatu variable
Passing parameter

Passing by value
Suatu nilai tidak akan berubah karena memorynya beda

Passing by location
Suatu nilai akan berubah karena lokasi memorynya sama

Iterative=pengulangan

Recursive = pengulangan pemanggilan diri sendiri

Algoritma-6

Review Material

I -> P -> O

P= selection, looping, storage

Selection:

  1. If
  2. Else if
  3. Else
  4. Switch-case

Looping:

  1. While
  2. Do-while
  3. For

Storage:

  1. File in
  2. SQL
  3. No SQL

Contoh kodingan:

  1. Segitiga pascal

#include <stdio.h>
int main()

{
int input;
int kol,bar,segitiga[100][100];
scanf(“%d”,&input);fflush(stdin);
for (baris=0;bar<input;bar++)
{
for (kol=0;kol<=bar;kol++)
{
if(kol==0 || kol==bar)
{
segitiga[bar][kol]=1;
}
else if(bar>1 && kol<bar)
{
segitiga[bar][kol]=segitiga[bar-1][kol]+segitiga[bar-1][kol-1];
}
printf(“%d “,segitiga[bar][kol]);
}
printf(“\n”);
}
return 0;
}

  1. Bilangan prima

#include<stdio.h>
int main()
{

int a,b,i,c=0;

scanf(“%d”,&i);
fflush(stdin);
for(a=2;a<i+1;a++){
for(b=1;b<=a;b++)
{if(a%b==0){c++;}}

if (c==2)
{printf(“%d “,a);}c=0;}
getchar();
return 0;
}

Algoritma-5

Pointer & Array

Pointer: variabel yang menyimpan alamat variabel lain

<type> *ptr_name;

Operator:

  1. Content of =*
  2. Address of =&

Pointer to pointer: variabel yang menyimpan alamat variabel lain

<type> **ptr_ptr;

Contoh:

int i, *ptr, **ptr_ptr;

ptr= &i;

ptr_ptr= &ptr;

Array: menyimpang banyak data yang bersifat homogen

Type array_name[size];

Inisialisasi array –> Type array_name[size]={initialization};

Pengaksesan array:

*(A+2) atau A[2]

Pointer variable: variabel yang bisa ditandai dengan value baru saat dijalankan

Pointer constant: variabel yang tidak bisa ditandai dengan value baru

Array 2 dimensi –> Type array_name[row][column];

Array 3 dimensi –> Type array_name[row][column][depth];

Macam-macam Array:

  1. Array of pointer
  2. Array of character

String:  sebuah Array of Character yang diakhiri dengan NULL of Character

String Constant atau String Literal: beberapa karakter yang ditulis diantara tanda kutip

Perebedaan Char dan String

  • Char ditulis dengan kutip 1 (‘ ‘), sedangkan string dengan kutip 2 (” “)

Library string.h:
1. strlen() = Return a value of string length; excluded null char
2. strcpy(s1,s2) = Copy s2 to s1
3. strncpy(s1,s2,n) = Copy first n characters of s2 to s1
4. strcat(s1,s2) = Adding string s2 to the end of string s1
5. strncat(s1,s2,n) = Adding n characters of string s2 to the end of string s1
6. strcmp(s1,s2) = Comparing the value of string s1 and s2, if similar returning 0
7. etc.

Algoritma-4

Repetition/Looping Operation

Repetition/looping operation:

  • For

for(exp1; exp2; exp3) statement; ||

for(exp1; exp2; exp3){statement1; statement2; }

exp1 & exp3=bisa berisi banyak menggunakan koma

  1. exp1 = initialization
  2. exp2 = conditional
  3. exp3 = increment or decrement

exp1, exp2, exp3 = optional

  • While <minimal 0>

while(exp) statement;  ||

while(exp){statement1; statement2; }

exp = boolean expression

True = not zero -> statement executed

False = zero

  • Do-While <minimal 1>

do{statement; }while(exp);

True = keep executing

False = stop executing

 

Algoritma-3

SELEKSI

Syntax

  • If
    • True=menjalankan statement
    • False=tidak menjalankan statement

if(boolean) statement ||

if(boolean){statement 1; statement 2; statement 3; }

  • If-Else
    • True=menjalankan statement
    • False=menjalankan statement lain

if(boolean) statement ||if(boolean){statement 1; statement 2; statement 3; }

else{statement 1; statement 2; }

  • Nested-If –> If yang bersarang

if(boolean)statement 1; if(boolean)statement 2; if(boolean)statement 3; ||

if(boolean)statement 1;else if(boolean)statement 2; else if(boolean)statement 3;

  • Switch-Case=menggunakan ekspresi; else –> deffault, menjalankan statement sampai bertemu ‘break’

switch(expression){case constant 1:statement 1;break;

case constant 2:statement 2; break; deffault:statement; }

  • Operator ?:  –> sama dengan if tapi menjadi sebuah value

condition?then-expression:else-expression;

Error type:

  1. Compile-time error
    • Syntax
  2. Link-time error
    • Error input link
  3. Run-time error

Kesalahan alamat memori, bisa jadi overflow

  1. Logical-error
    • Algoritma yang salah

Algoritma-2

Operator & Operand

Operator = suatu simbol untuk memproses suatu data

Operand = data yang akan diproses

Operator berdasarkan jumlah data:

  1. Unary Operator = satu data
  2. Binary Operator = dua data
  3. Ternary Operator = tiga data

Berdasarkan operasinya, operator dibagi menjadi:

  • Assignment (=)
  • Arithmatic [+ – * / % ++ — ()]
  • Relational (== != < > <= >= ?:)
  • Logical (&& || !)
  • Bitwise (& | ^ ~ >> <<)
  • Pointer

Combined Operator = mempersingkat operator

Contoh: a=a+b —> a+=b

^ = expression or

a|b&!(a&b)

Algoritma-1

OOP (Object Oriented Program)

Suatu metode programming yang berorientasi kepada objek.

  1. Encapsulation= pemberian hak
  2. Inheritance= ketidakwajiban untuk menampilkan suatu hal
  3. Abstraction= kewajiban untuk menampilkan suatu hal
  4. Interface= bapak tertinggi dalam OOP, wajib mengimplementasikan
  5. Polymorphism

Problem – Process – Solution

Algoritma= langkah-langkah/tahap-tahap melakukan suatu hal

  1. Sequence= langkah-langkah berurutan
  2. Looping= langkah yang berulang
  3. Condition= langkah yang memiliki suatu kondisi

Pseudocode= bahasa sehari-hari dari bahasa komputer yang dapat dimengerti manusia

I -> P -> O  ==  Input -> Process -> Output