Anda di halaman 1dari 15

Praktikum Pemrograman Bahasa C

SEARCHING TUJUAN BELAJAR Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: 1. Memahami konsep dan kegunaan algoritma pencarian 2. Memahami konsep algoritma Sequential Search dan Binary Search 3. Mengimplementasikan algoritma Sequential Search dan Binary Search dalam bahasa pemrograman 4. Mengidentifikasi permasalahan yang membutuhkan algoritma pencarian TUGAS PENDAHULUAN 1. Buatlah algoritma Sequential Search Tak Terurut 2. Buatlah algoritma Sequential Search Terurut 3. Buatlah algoritma Binary Search PEMBAHASAN 1. Algoritma Sequential Search Tak Terurut 1. Awal program user akan diminta memasukkan jumlah data yang akan diproses dengan sequential unsorted search. Batas tersebut akan digunakan sebagai batas pengendali loop untuk menyeleksi data. while((!ketemu)&&(i<n)) 2. Pengecekan data tersebut terjadi dalam tubuh while, yang terdapat dua kondisi yaitu data ketemu [if(data[i]==key)]atau tidak [i++]. 3. Jika data belum ditemukan, maka update indeks i. 4. dan jika data telah ditemukan maka langsung ke kondisi untuk mencetak data. 5. Jika sampai data terakhir pengecekan tidak menenmukan data yang dimaksud, maka masuk ke kondisi terakhir yaitu cetak bahwa data tidak ditemukan. 2. Algoritma Sequential Search Terurut dapat dituliskan sebagai berikut : 1. i 0 2. ketemu false 3. Selama (tidak ketemu) dan (i <= N) kerjakan baris 4 4. Jika (Data[i] = x) maka ketemu true, jika tidak i i + 1 5. Jika (ketemu) maka i adalah indeks dari data yang dicari, jika tidak data tidak ditemukan 3. Algoritma pencarian biner dapat dituliskan sebagai berikut : 1. L 0 2. R N - 1 3. ketemu false 4. Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai dengan 8 5. m (L + R) / 2 6. Jika (Data[m] = x) maka ketemu true 7. Jika (x < Data[m]) maka R m 1 8. Jika (x > Data[m]) maka L m + 1 9. Jika (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan

Praktikum Pemrograman Bahasa C

TREE TUJUAN Setelah melakukan praktikum ini siswa diharapkan mengerti : 1. Dan menjadi familiar dengan definisi binary tree 2. Mempelajari definisi extended dan complete binary tree 3. Mempersiapkan perbuatan representasi binary tree dan operasi binary tree SOAL PEMROGRAMAN 1. Rangkailah 7 macam prosedur binary search tree di atas menjadi suatu program utuh dengan data bilangan random sejumlah n, kemudian macam-macam proses : inorder(sorting), min, max, successor, insert, delete yang disediakan dapat dipilih melalui menu 2. Tambahlah program soal no 1 di atas untuk proses pembacaan preorder dan postorder, cobalah untuk membaca ekspresi inorder di bawah : a. (a+b)/(c-d*e)+e+g*h/a b. x-y*z+(a+b+c/d*e PEMBAHASAN 1. PROGRAM 1 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define n 100000 int i,data[n];int i;char data2[n];flag=0;int r = 0; int s;char kar;int c=0;char lagi;int num,key; void pilihan();char dataq[100]; char inp;char pil; void cetak2(); void del(); int maks(); int minim(); int minim2(); void insert(); void display(); void inorder(); int success(); void search();

struct node { int data; struct node *left,*right; }; typedef struct node tree; tree *root;

Praktikum Pemrograman Bahasa C

void masukkan() { printf("\n Masukkan banyaknya data : "); scanf("%d",&s); printf("\n %c Data awal Random :\n\n",1); // srand(time(NULL)); root=NULL; for(i=0;i<s;i++) { data[i]=rand()%1000; insert(&root,data[i]); } cetak2();puts(""); } void main() { int pilsort; do { system("cls"); printf("\n\n ============== PROSEDUR BINARY TREE ==============\n"); printf(" 1. Inorder tree walk\n"); printf(" 2. Tree Search\n"); printf(" 3. Tree Minimum\n"); printf(" 4. Tree Maksimum\n"); printf(" 5. Tree Successor\n"); printf(" 6. Tree Insert\n"); printf(" 7. Tree Delete\n"); printf(" ==================================================\n"); printf(" %c Pilihan Prosedur : ",1); scanf("%d",&pilsort); pilihan(pilsort); printf("\n Lakukan lagi?(y/t) "); fflush(stdin); scanf("%c",&lagi); while((lagi=='Y')||(lagi=='y'));

} }

void pilihan(int pildata) { if(pildata==1) { masukkan(); printf("\n Tampilan inorder elemen tree :\n"); printf("\n"); inorder(root); puts(""); 3

Praktikum Pemrograman Bahasa C

} else if(pildata==2) { masukkan(); printf("\n Ketiklah elemen yang akan dicari : "); scanf("%d",&key); search(root,key,&flag); if(flag==0) { printf("\n GAGAL...!!\n"); printf(" Element %d tidak ada",key); puts(""); } } else if(pildata==3) { masukkan(); minim(root); } else if(pildata==4) { masukkan(); maks(root); } else if(pildata==5) { masukkan(); success(root); } else if(pildata==6) { masukkan(); printf("\n Ketiklah elemen yang akan ditambahkan :"); scanf("%d",&key); insert(&root,key); puts(""); printf("\n Elemen setelah insert :\n"); puts(""); display(root); puts(""); } else if(pildata==7) { masukkan(); del(root); } } void cetak2() { for(i=0;i<s;i++) 4

Praktikum Pemrograman Bahasa C

printf("[%3d]\t",data[i]); puts("");

void display(tree *root) { if(root!=NULL) {

} void inorder(tree *root) { if(root!=NULL) { inorder(root->left); printf("[%3d]\t",root->data); inorder(root->right); } } void search(tree *root,int key,int *flag) { tree *temp; temp=root; while(temp!=NULL) { if(temp->data==key) { *(flag)=1; printf("\n SUCCESS...!!!"); printf("\n Elemen %d berhasil ditemukan",temp->data); puts(""); } if(temp->data>key) temp=temp->left; else temp=temp->right; } } int maks(tree *root) { struct node* ayah = root; while (ayah->right != NULL) { ayah = ayah->right; } printf("\n Maksimum elemen : ............... [%3d] ",ayah->data); 5

printf("[%3d] \t",root->data); display(root->left); display(root->right);

Praktikum Pemrograman Bahasa C

puts(""); return(ayah->data);

int minim(tree *root) { struct node* ibu = root; while (ibu->left != NULL) { ibu = ibu->left; } printf("\n Minimum elemen : ................ [%3d] ",ibu->data); puts(""); return(ibu->data); } int minim2(tree *root) { struct node* ibu = root; while (ibu->left != NULL) { ibu = ibu->left; } printf("\n Elemen Successor : ................ [%3d] ",ibu->data); puts(""); return(ibu->data); } void insert(tree **root,int num) { tree *new; if(*root==NULL) { new=(tree*)malloc(sizeof(tree)); new->left=NULL; new->data=num; new->right=NULL; *root=new; } else { if(num<(*root)->data) insert(&((*root)->left),num); else insert(&((*root)->right),num); } } int success(tree* root) { struct node* y=root; 6

Praktikum Pemrograman Bahasa C

if (root->right != NULL) return minim2(root->right); { } while(y != NULL && root == y->right) root = y;

printf("\n Elemen Successor : ................ [%3d] ",y->data); puts(""); return (y->data);

void del(tree *root) { free(root); printf("\n Tree sudah habis, alias telah dihapus semua\n"); } Preview :

Praktikum Pemrograman Bahasa C

2. PROGRAM 2 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define n 100000 int i,data[n];int i;char data2[n];flag=0;int r = 0; int s;char kar;int c=0;char lagi;int num,key; void pilihan();char dataq[100]; char inp;char pil; void cetak2(); void del(); int maks(); int minim(); int minim2(); void insert(); void display(); void inorder(); void preorder(); void output(); int success(); void search(); void postorder(); void bwt_ekspresi(); struct node { int data; struct node *left,*right; }; typedef struct node tree; 8

Praktikum Pemrograman Bahasa C

tree *root; struct node * pohon (char *dataq, int kir, int kan) { struct node *ortu; int tengah = (kir + kan)/2; ortu = (struct node*) malloc(sizeof(struct node)); ortu->data = dataq [tengah]; if ( kir>= kan) { ortu->left = NULL; ortu->right = NULL; return (ortu); } if (kir <= tengah - 1) ortu->left = pohon (dataq, kir, tengah - 1); else ortu->left = NULL; if (tengah + 1 <= kan) ortu->right = pohon (dataq, tengah + 1, kan); else ortu->right = NULL; return(ortu); } void masukkan() { printf("\n Masukkan banyaknya data : "); scanf("%d",&s); printf("\n %c Data awal Random :\n\n",1); // srand(time(NULL)); root=NULL; for(i=0;i<s;i++) { data[i]=rand()%1000; insert(&root,data[i]); } cetak2();puts(""); } void main() { int pilsort; do { system("cls"); printf("\n\n ============== PROSEDUR BINARY TREE ==============\n"); printf(" 1. Inorder tree walk\n"); printf(" 2. Tree Search\n"); printf(" 3. Tree Minimum\n"); printf(" 4. Tree Maksimum\n"); printf(" 5. Tree Successor\n"); 9

Praktikum Pemrograman Bahasa C

printf(" 6. Tree Insert\n"); printf(" 7. Tree Delete\n"); printf(" 8. Preorder dan Postorder\n"); printf(" ==================================================\n"); printf(" %c Pilihan Prosedur : ",1); scanf("%d",&pilsort); pilihan(pilsort); printf("\n Lakukan lagi?(y/t) "); fflush(stdin); scanf("%c",&lagi); while((lagi=='Y')||(lagi=='y'));

} }

void pilihan(int pildata) { if(pildata==1) { masukkan(); printf("\n Tampilan inorder elemen tree :\n"); printf("\n"); inorder(root); puts(""); } else if(pildata==2) { masukkan(); printf("\n Ketiklah elemen yang akan dicari : "); scanf("%d",&key); search(root,key,&flag); if(flag==0) { printf("\n GAGAL...!!\n"); printf(" Element %d tidak ada",key); puts(""); } } else if(pildata==3) { masukkan(); minim(root); } else if(pildata==4) { masukkan(); maks(root); } else if(pildata==5) { 10

Praktikum Pemrograman Bahasa C

} else if(pildata==6) { masukkan(); printf("\n Ketiklah elemen yang akan ditambahkan :"); scanf("%d",&key); insert(&root,key); puts(""); printf("\n Elemen setelah insert :\n"); puts(""); display(root); puts(""); } else if(pildata==7) { masukkan(); del(root); } else if(pildata==8) { bwt_ekspresi(); } } void cetak2() { for(i=0;i<s;i++) printf("[%3d]\t",data[i]); puts(""); } void display(tree *root) { if(root!=NULL) { printf("[%3d] \t",root->data); display(root->left); display(root->right); } } void inorder(tree *root) { if(root!=NULL) { inorder(root->left); printf("[%3d]\t",root->data); inorder(root->right); } } 11

masukkan(); success(root);

Praktikum Pemrograman Bahasa C

void search(tree *root,int key,int *flag) { tree *temp; temp=root; while(temp!=NULL) { if(temp->data==key) { *(flag)=1; printf("\n SUCCESS...!!!"); printf("\n Elemen %d berhasil ditemukan",temp->data); puts(""); } if(temp->data>key) temp=temp->left; else temp=temp->right; } } int maks(tree *root) { struct node* ayah = root; while (ayah->right != NULL) { ayah = ayah->right; } printf("\n Maksimum elemen : ............... [%3d] ",ayah->data); puts(""); return(ayah->data); } int minim(tree *root) { struct node* ibu = root; while (ibu->left != NULL) { ibu = ibu->left; } printf("\n Minimum elemen : ................ [%3d] ",ibu->data); puts(""); return(ibu->data); } int minim2(tree *root) { struct node* ibu = root; while (ibu->left != NULL) { ibu = ibu->left; 12

Praktikum Pemrograman Bahasa C

} printf("\n Elemen Successor : ................ [%3d] ",ibu->data); puts(""); return(ibu->data);

void insert(tree **root,int num) { tree *new; if(*root==NULL) { new=(tree*)malloc(sizeof(tree)); new->left=NULL; new->data=num; new->right=NULL; *root=new; } else { if(num<(*root)->data) insert(&((*root)->left),num); else insert(&((*root)->right),num); } } int success(tree* root) { struct node* y=root; if (root->right != NULL) return minim2(root->right); { } while(y != NULL && root == y->right) root = y;

printf("\n Elemen Successor : ................ [%3d] ",y->data); puts(""); return (y->data);

void del(tree *root) { free(root); printf("\n Tree sudah habis, alias telah dihapus semua\n"); } void preorder(tree *root) { if(root) { 13

Praktikum Pemrograman Bahasa C

} } void postorder(tree *root) { if(root) { postorder(root->left); postorder(root->right); printf(" %c ",root->data); } } void bwt_ekspresi() { root = NULL; fflush(stdin); while(pil != 'b') { printf("\n Masukkan notasi satu demi satu : "); scanf("%c", &inp); dataq[r++] = inp; fflush(stdin); printf("\n exit<b> | lanjut<enter>"); pil = getchar(); } r --; root = pohon(dataq, 0, r); printf("\n Ekspresi preorder\n"); preorder (root); printf("\n Ekspresi postorder\n"); postorder (root); }

printf(" %c ",root->data); preorder(root->left); preorder(root->right);

Preview :

14

Praktikum Pemrograman Bahasa C

15

Anda mungkin juga menyukai