Mata Kuliah
Sistem Cerdas
Judul Jobsheet
Jobsheet 3, 4, & 5
Nama
Adi Indera Dwi Anggara
Prodi
S1 Pendidikan Teknik Elektro
OFF
C
Nilai
TTD
A. Analisa Hasil Latihan 1 (jobsheet 3) a. Flowchart START
Operasi Add Input data
F Tambah nilai data
F Preorder if(root!=NULL)
T
Masukkan & simpan nilai data
T
Tampil data PreOrder
F
InOrder if(root != NULL)
T
Tampil data InOrder
FINISH
b. Kode program #include #include #include #include struct Node { int data; Node *kiri; Node *kanan; }; Node *root = NULL; void tambah (Node **root, int databaru) { if((*root)== NULL) { Node *baru; baru = new Node; baru-> data = databaru; baru->kiri = NULL; (*root) = baru; (*root)->kiri = NULL; (*root)->kanan = NULL; printf ("Data bertambah!"); }
F
PosOrder
EXIT
if(root !=NULL)
T
Tampil data PostOrder
else if(databaru<(*root)->data) tambah(&(*root)->kiri, databaru); else if(databaru>(*root)->data) tambah(&(*root)->kanan, databaru); else if(databaru == (*root)->data) printf ("Data sudah ada!"); } void preorder(Node *root) { if(root!=NULL){ printf("%d ", root->data); preorder(root->kiri); preorder(root->kanan); } } void inorder(Node *root) { if(root != NULL){ inorder(root->kiri); printf("%d ", root->data); inorder(root->kanan); } } void postorder(Node *root) { if(root !=NULL){ postorder(root->kiri); postorder(root->kanan); printf("%d ", root->data); } } int main() { char pil; while (true) { system("cls"); unsigned char data; printf("\t---PROGRAM TREE---"); printf("\nMENU"); printf("\n----\n"); printf("1. Tambah Data\n"); printf("2. Pre-Order\n"); printf("3. In-Order\n"); printf("4. Post-Order\n"); printf("5. Exit\n"); printf("Pilihan Anda : "); scanf("%c",&pil); switch(pil) {
case '1': printf("\nINPUT : "); printf("\n-------"); printf("\nMasukkan data: "); scanf("%u", &data); tambah(&root,data); _getch(); break; case '2': printf("\nOUTPUT PRE ORDER : "); printf("\n------------------\n"); if(root!=NULL) preorder(root); else printf("Masih Kosong!!!"); _getch(); break;
case '3': printf("\nOUTPUT IN ORDER : "); printf("\n------------------\n"); if(root!=NULL) inorder(root); else printf("Masih Kosong!!!"); _getch(); break; case '4': printf("\nOUTPUT POST ORDER : "); printf("\n------------------\n"); if(root!=NULL) postorder(root); else printf("Masih Kosong!!!"); _getch(); break; case '5': exit(0); break; } } }
c. Screenshot hasil
Latihan 2 a. Flowchart
START
Deklarasi matriks
F Void hubungan simpul
Void busur terpendek
T Tampil data hubungan keseluruhan simpul
Tampil data busur terpendek
FINISH
b. Kode program #include #include #include #include using namespace std;
int matrix[8][8]={{0,5,999,4,999,999,12,999}, {5,0,2,999,999,999,999,999}, {999,2,0,999,6,999,3,999}, {4,999,999,0,999,6,999,999}, {999,999,6,999,0,999,999,6}, {999,999,999,6,999,0,3,6}, {12,999,3,999,999,3,0,4}, {999,999,999,999,6,6,4,0}}; char namaSimpul[9]="ABCDEFGH"; int min=100; void HubunganSimpul() { int i, j;
//
int min=100;
printf("Hubungan antara simpul dalam graph: \n"); for(i=0; i<=7; i++) { printf("\n Simpul %c ", namaSimpul[i]); for(j=0; j<=7; j++) { if (matrix[i][j]!=0&&matrix[i][j]!=999) { printf("\n berhubungan dengan simpul %c ", namaSimpul[j]); } } printf("\n ==============================="); } }
void BusurTerpendek() { int i, j; int min=100; for(i=0; i<=7; i++) { for(j=0; j<=7; j++) { if(matrix[i][j]!=0 && matrix[i][j]!=999) { if(matrix[i][j]
} } int main(){ char pilih; while (true) { system("cls"); printf("\n\t--PROGRAM OPERASI GRAPH--"); printf("\nMENU"); printf("\n----\n"); printf("1. Temukan simpul paling kecil\n"); printf("2. Temukan hubungan antar simpul \n"); printf("3. Keluar\n"); printf("Pilihan Anda : "); scanf("%c",&pilih); printf("\n-----------------------------------\n"); switch(pilih) { case '1': printf("Menu: Simpul paling kecil"); printf("\n------------------------\n"); BusurTerpendek(); _getch(); break; case '2': printf("Menu: Temukan hubungan antar simpul"); printf("\n------------------------\n"); HubunganSimpul(); _getch(); break; case '3': exit(0); break; } } }
c. Screenshot hasil
Kesimpulan : 1. Program Tree dapat digunakan untuk mempresentasikan keadaan atau status Node dalam metode pencarian 2. Struct Node untuk mendeklarasikan struktur da ta Node 3. Operasi tambah digunakan untuk memasukkan data baru kedalam Tree 4. Jika data lebih besar dari Root maka data akan diletakkan disebelah kanan 5. Jika data lebih kecil dari Root maka data akan diletakkan disebelah kiri 6. PreOrder digunakan untuk menelusuri simpul dengan urutan dari akar, kiri, dan kanan 7. InOrder digunakan untuk menelusuri simpul dengan urutan dari kiri, akar, dan kanan 8. PostOrder digunakan untuk menelusuri simpul dengan urutan kiri, k anan, dan akar
A. Analisa hasil Latihan 1 (jobsheet 4) a. Flowchart start
Deklarasi Variabel
Masukkan simpul
Proses pencarian jalur terpendek
Keluaran Jalur terependek
selesai
b. Kode program #include #include #include using namespace std; int main(){ a: char simpul[10]= "ABCDEFGHI"; int queue[10]; int b, c, d, e, f, g; char x; int n = 9; char matriks[10][10]={"011100000",
"100010000", "100011000", "100001000", "011000100", "001100010", "000010001", "000001001", "000000110"}; printf("\nMasukan Simpul Awal (A-I)"); printf("\nTentukan Simpul Awal: "); scanf("%c",&x); c=-1; for (d=0;d<=n-1;d++){ if(simpul[d]==x){ c=d; } } if(c==-1){ printf("simpul salah"); getch(); goto a; } else { d=c; e=0; queue[e]=d; for(f=0;f<=n-1;f++){ matriks[f][d]='0'; } b=e; while(b
printf("%c", simpul[g]); } }
} c. Screenshot program Latihan 2 A. Flowchart start
Deklarasi Variabel
Masukkan simpul
Proses pencarian jalur terpendek
Keluaran Jalur terependek
selesai
B.
Kode Program #include #include
#include using namespace std; int main(){ a: char simpul[10]= "ABCDEFGHI"; int queue[10]; int b, c, d, e, f, g; char x; int n = 9; char matriks[10][10]={"011100000", "100010000", "100011000", "100001000", "011000100", "001100010", "000010001", "000001001", "000000110"}; printf("\nMasukan Simpul Awal (A-I)"); printf("\nTentukan Simpul Awal: "); scanf("%c",&x); c=-1; for (d=0;d<=n-1;d++){ if(simpul[d]==x){ c=d; } } if(c==-1){ printf("simpul salah"); getch(); goto a; } else { d=c; e=0; queue[e]=d; for(f=0;f<=n-1;f++){ matriks[f][d]='0'; } b=e; while(b
b++; queue[b]=f; for(c=0;c<=n-1;c++){ matriks[c][f]='0'; } } } e++; } for(d=0;d<=n-1;d++){ g=queue[d]; printf("%c", simpul[g]); } }
} C.
Screenshoot Program
Kesimpulan 1. Breadth-first search (BFS) melakukan proses searching pada semua node yang berada pada level atau hirarki tetangga yang terdekat terlebih dahulu sebelum melanjutkan proses searching pada node di level berikutnya.
2. Metode BFS membutuhkan memori yang cukup banyak namun dengan menggunakan metode ini solusinya tidak akan menemukan jalan buntu. 3. Depth-first search (DFS) adalah proses sear ching sistematis buta yang melakukan ekpansi sebuah path (jalur) menuju penyelesaian masalah sebelum melakukan ekplorasi terhadap path yang lain. 4. Pencarian rute terpendek dilakukan dengan cara membuat simpul-simpul yang menjadi titik awal, titik-titik yang akan dilalui dan juga titik akhir sebagai akhir dari tujuan atau sebagai simpul yang dicari.
A. Analisa Hasil Latihan 1 (jobsheet5) a. Flowchart START
Deklarasi matriks
for(i =0; i<=8; i++)
Proses penelusuran data
Tampil data jarak terpendek
FINISH
b. Kode program #include #include #include #include using namespace std;
int graph[8][8] = {{ 0,8,6,999,999,999,999,999}, {8,0,999,999,2,999,999,999}, {6,999,0,4,999,999,999,999}, {999,999,4,0,3,9,999,8}, {999,2,999,3,0,9,999,999}, {999,999,999,9,9,0,2,999}, {999,999,999,999,999,2,0,2}, {999,999,999,8,999,999,2,0}}; int int int int int int int
i, k; start, goal; member = 1, nonmember = 0; nilai_acuan = 999; status[8]; cost[8]; path[8];
int int int int
cur; small; dc; jarakbaru;
int main() { printf ("\t--PROGRAM ALGORITMA DJIKSTRA--"); printf ("\n\n"); printf ("Simpul asal (0-7): "); scanf("%i", &start); printf("Simpul tujuan (0-): "); scanf("%i", &goal); for(i =0; i<=8; i++) { status[i]= nonmember; cost[i] = 999; status[start]= member; cost[start] = 0; cur = start; } while (cur!=goal) { small = 999; dc=cost[cur]; for (i=0; i<=8; i++) { if (status[i]==nonmember) { jarakbaru = dc + graph[cur][i]; if(jarakbaru
}
c. Screenshot hasil
Latihan 2 a. Flowchart START
Deklarasi matriks
for(i =0; i<=8; i++) Proses pencarian data terpendek
Tampil data jarak terpendek
FINISH
b. Kode program #include #include #include #include using namespace std;
int graph[8][8] = {{ 0,8,6,999,999,999,999,999}, {8,0,999,999,2,999,999,999}, {6,999,0,4,999,999,999,999}, {999,999,4,0,3,9,999,8}, {999,2,999,3,0,9,999,999}, {999,999,999,9,9,0,2,999}, {999,999,999,999,999,2,0,2}, {999,999,999,8,999,999,2,0}}; //int heuristik[8] = { 14,10,10,24,14,20,4,10}; int heuristik[8] = { 15,12,11,10,7,4,2,0}; int int int int int int int int
i, k,n; start, goal; member = 1, nonmember = 0; nilai_acuan = 999; status[8]; cost[8]; path[8]; cur;
int small; int dc; int jarakbaru; int main() { printf ("\tPROGRAM ALGORITMA A STAR (A*)"); printf ("\n\nSimpul asal (0-7): "); scanf("%i", &start); printf("Simpul tujuan (0-7): "); scanf("%i", &goal); for(i =0; i<=8; i++) { status[i]= nonmember; cost[i] = 999; status[start]= member; cost[start] = 0; cur = start; } while (cur!=goal) { small = 999; dc=cost[cur]; for (i=0; i<=7; i++) { if (status[i]==nonmember) { jarakbaru = dc + graph[cur][i] + heuristik[i]; if(jarakbaru
Kesimpulan : 1. Djikstra bekerja dengan cara mencari nilai terendah dalam graph yang diperoleh dengan menjumlahkan simpul-simpul yang dilalui saat melakukan penelusuran 2. A Star bekerja dengan cara mencari nilai terendah dalam graph yang diperoleh dengan menjumlahkan simpul-simpul yang dilalui saat melakukan penelusuran dengan menambahkan nilai heuristic yang telah dimasukkan. 3. Dengan menentukan Start dan Goal proses pencarian rute terpendek dapat ditemukan dengan adanya informasi yang telah didapatkan