Anda di halaman 1dari 10

LATIHAN 1

1. FLOWCHART
START

INISIALISASI
VARIABEL DATA
ROOT TREE NODE

MASUKAN MENU

DECISION MENU
1 -5

1. Fungsi Tambah
2. Fungsi preOrder 3. Fungsi inOrder 4. Fungsi postOrder 5. EXIT
data

DATA BARU
MASUK
VARIABEL STOP
ROOT TREE
NODE

MEMBACA HASIL FUNGSI


ROOT TREE PREORDER
NODE

MEMBACA HASIL FUNGSI


ROOT TREE INORDER
NODE

MEMBACA HASIL FUNGSI


ROOT TREE POSTORDER
NODE

2. KODE PROGRAM
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct Node
{
int data;
Node *kiri;
Node *kanan;
};

void tambah(Node **root,int databaru)


{
if((*root) == NULL)
{
Node *baru;
baru = new Node;
baru->data = databaru;
baru->kiri = NULL;
baru->kanan = NULL;
(*root) = baru;
(*root)->kiri = NULL;
(*root)->kanan = NULL;
printf("Data bertambah!");
}
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()
{
int c, data;
Node *pohon,*t;
pohon = NULL;
char pil;
do {
system("cls");
printf("1. Tambah\n");
printf("2. Lihat Pre-order\n");
printf("3. Lihat In-order\n");
printf("4. Lihat Post-order\n");
printf("5. Keluar\n");
printf("Silahkan masukkan pilihan anda (1-5)... ");
pil=getche();

if(pil!='1' && pil !='2' && pil !='3' && pil!='4' && pil!='5' )
printf("\n\nAnda salah mengetikkan inputan...\n");
else
{
if(pil=='1')
{
printf("\n");
printf("\nData baru : ");scanf("%d", &data);
tambah(&pohon,data);
}
else
{
if(pil=='2')
{
printf("\n");
if(pohon!=NULL) preOrder(pohon);
else printf("Masih kosong!");
getch();
}
else
{
if(pil=='3')
{
printf("\n");
if(pohon!=NULL) inOrder(pohon);
else printf("Masih kosong!");
getch();
}
else
{
if(pil=='4')
{
printf("\n");
if(pohon!=NULL) postOrder(pohon);
else printf("Masih kosong!");
getch();
}}}
}}}
while(pil!='5');
}

3. HASIL PROGRAM
ANALISA
Pada program latihan 1 ini terdapat 5 menu utama yaitu Tambah, Pre-order, In-
order, Post-order, dan Keluar. Yang pertama yaitu menu Tambah, void tambah(Node
**root, int databaru)-> fungsi ini digunakan untuk melakukan penambahan node
yang berisi data/nilai pada tree. Parameternya adalah variabel pointer bertipe data abstrak
yaitu node dan variabel bertipe data integer (untuk menyimpan data yang diinput). Jika
data yang akan dimasukkan lebih besar daripada elemen root, maka akan diletakkan di
node sebelah kanan, sebaliknya jika lebih kecil maka akan diletakkan di node sebelah
kiri. Untuk data pertama akan menjadi elemen root.

void tambah(Node **root,int databaru)


{
if((*root) == NULL)
{
Node *baru;
baru = new Node;
baru->data = databaru;
baru->kiri = NULL;
baru->kanan = NULL;
(*root) = baru;
(*root)->kiri = NULL;
(*root)->kanan = NULL;
printf("Data bertambah!");
}
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!");
}
Sedangkan cara kerja menu Pre-order yaitu cetak node yang dikunjungi, kunjungi
left, kunjungi right. void preOrder(Node *root)-> fungsi ini digunakan untuk
mengunjungi node secara pre-Order sekaligus mencetak isi node yang telah dikunjungi
secara urut dimulai dari kunjungan yang pertama.

void preOrder(Node *root)


{
if(root != NULL){ printf("%d ",root->data);
preOrder(root->kiri);
preOrder(root->kanan);
}

Selanjutnya yaitu cara kerja In-order, yakni kunjungi left, cetak node yang
dikunjungi, kunjungi right. void inOrder(Node *root)-> fungsi ini digunakan untuk
mengunjungi node secara in-Order sekaligus mencetak isi node yang telah dikunjungi
secara urut dimulai dari kunjungan yang pertama.

void inOrder(Node *root)


{
if(root != NULL){ inOrder(root->kiri);
printf("%d ",root->data);
inOrder(root->kanan);
}

Cara kerja Post-order yaitu kunjungi left, kunjungi right, cetak node yang
dikunjungi. void postOrder(Node *root)-> fungsi ini digunakan untuk mengunjungi
node secara post-Order sekaligus mencetak isi node yang telah dikunjungi secara urut
dimulai dari kunjungan yang pertama.

void postOrder(Node *root)


{
if(root != NULL){ postOrder(root->kiri);
postOrder(root->kanan);
printf("%d ",root->data);
}
LATIHAN 2
1. FLOWCHART
START

INISIALISASI MATRIX
DAN NAMASIMPUL

MASUKAN MENU

DECISION MENU
1 -3

2. HUBUNGAN
1. SIMPUL TERKECIL 3. EXIT
ANTAR SIMPUL

PROSES CARI
MELALUI
FUNGSI BUSUR STOP
TERPENDEK

PROSES CARI
MELALUI
FUNGSI
HUBUNGAN
SIMPUL

HASIL FUNGSI
BUSUR TERPENDEK

HASIL FUNGSI
HUBUNGAN SIMPUL

2. KODE PROGRAM
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
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]<min)
{
min = matrix[i][j];
}
}
}
}
printf ("Bobot busur terpendek adalah %i \n", min);
printf ("Hubungan busur terpendek berasal dari simpul: \n");
for(i=0; i<=7; i++)
{
for (j=0; j<=7; j++)
{
if (matrix[i][j]== min)
{
printf ("\nSimpul %c ", namaSimpul[i]);
printf ("berhubungan dengan simpul %c ",
namaSimpul[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;
}
}
}

3. HASIL PROGRAM
4. ANALISA
Pada program ini terdapat 3 pilihan menu yakni untuk menemukan simpul paling
kecil, menemukan hubungan antar simpul, dan keluar. Pada pilihan menu untuk mencari
simpul terpendek dari matriks yang telah disediakan didapatkan hasil nilai terpendeknya
adalah 2 yang didapatkan dari program berikut:
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]<min)
{
min = matrix[i][j];
}
}
}
}
Selanjutnya yaitu program untuk mencari hubungan antar simpul yang hasilnya
didapatkan dari program sebagai berikut:

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 ===============================");
}
}

KESIMPULAN

Anda mungkin juga menyukai