Anda di halaman 1dari 17

LAPORAN PRAKTIKUM RESMI

POHON BINER (LANJUTAN)




Disusun oleh :
Unggul Budi Suryanto
201301011

Dosen pengampu :
Yosef Murya Kusuma Ardhana.S.T., M.Kom




JURUSAN SISTEM INFORMASI
SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO
PURWOKERTO
2014
BAB I
TEORI DASAR

1. Pengantar
. OPERASI PADA POHON BINER
Operasi pada binary tree merupakan satu rangkaian proses yang dapat dibagi menjadi
beberapa bagian operasi (fungsi) seperti:
1. Inisisalisasi.
Inisialisasi yang dimaksud adalah pemberian nilai awal pada suatu variabel atau kondisi
yang dapat digunakan sebagai ciri suatu kondisi.
Instruksi dasar untuk inisisalisasi.
Root = NULL;
P=NULL;
Inisisalisasi bila ditulis dalam sebuah fungsi.
Nama fungsi Inisisalisasi
void Inisialisasi() {
Root=NULL;
P=NULL;
}
Fungsi ini harus dilaksanakan sebelum operasi yang lain. Pointer Root ketika
dideklarasikan isinya sudah ada, tapi nilainya tidak diketahui. Pointer Root perlu diisi dengan
NULL karena Pointer Root ini akan dijadikan tanda. Bila isinya NULL, berarti tree belum
ada. Bila isinya bukan NULL berarti tree sudah ada, dimana node akar sedang ditunjuk oleh
pointer Root.
2. Pembuatan sebuah node.
Fungsi untuk Pembuatan Sebuah Node.
void BuatSimpul(char X){
P=(Simpul*)malloc(sizeof(Simpul));
If(P != NULL)
{ P->INFO=X;
P->Left=NULL;
P->Right=NULL;
}
else
{ printf(Pembuatan Node Gagal);
Exit(1);
}
}
Dengan fungsi ini terbentuk sebuah node yang ditunjuk oleh pointer P dengan ilustrasi
sebagai berikut:

3. Pembuatan node akar.
Fungsi untuk Menjadikan Sebuah Node Sebagai Node Akar.
void BuatSimpulAkar()
{ if(Root == NULL)
{ if(P != NULL)
{ Root=P;
Root->Left=NULL;
Root->Right=NULL;
}
else
printf(\n Node Belum Dibuat);
}
else
printf(Pohon Sudah Ada);
}
Hasil fungsi diatas dapat diilustrasikan sebagai berikut:

Sebelum membuat tree pertama kali (node akar) perlu diperiksa terlebih dahulu apakah
tree memang belum ada. Ciri tree yang belum ada adalah Root=NULL. Kalau tree sudah ada
jangan membuat node akar baru, yang artinya membuat tree baru, dan pointer Root diminta
untuk mencetak komentar Tree Sudah Ada
Bila tree memang belum ada, perlu diperiksa lagi apakah node yang akan dibuat menjadi
node akar tree sudah dibuat. Ciri node baru sudah dibuat adalah P != NULL. Bila node
belum dibuat, maka node akar tree-pun belum bisa dibuat. Untuk itu cukup mencetak Node
Belum Dibuat.\
Dalam aplikasi sebenarnya, mungkin tidak cukup dengan menampilkan komentar, tetapi
diperlukan proses tertentu sesuai dengan sifat dan tujuan aplikasi.
4. Penambahan (insert) node baru kedalam sebuah tree.
Menambahkan sebuah node baru kedalam sebuah tree, maksudnya adalah menempatkan
node baru tersebut menjadi subordinat sebuah node baik pada cabang kiri (pointer left)
maupun pada cabang kanan (pointer right). Ada dua macam proses insert yang akan dibahas
dalam materi ini.
Insert urut nomor node, atau instert level per level.
Instert pada nomor node tertentu.
Illustrasi insert node

Setelah disederhanakan ilustrasi diatas menjadi sebagai berikut :

INSERT URUT NOMOR NODE, ATAU INSTERT LEVEL PER LEVEL
Jika persoalannya hanya menginsert node B sebagai subordinat kiri node A maka
instruksinya cukup dengan :
Root->Left=P;
Atau untuk menginsert node baru tersebut menjadi subordinat kanan maka instruksinya
cukup dengan :
Root->Right=P;

5. Penghapusan (delete) node dari sebuah tree.
6. Pembacaan atau penelusuran binary tree.
Pembagian ini bukan berdasarkan urutan proses, namun hanya berdasarkan fungsinya yang
berbeda.







BAB II
PENJELASAN PROGRAM
.
/*
* 3.cpp
*
* Created on: 28 sept 2014
* Author: unggul budi suryanto
*/


#include<iostream>
#include<conio.h>
#include<malloc.h>
using namespace std;

struct Node
{
struct Node *left;
char INFO;
struct Node *right;
};

typedef struct Node simpul;
simpul *Root, *P; char X;
void Inisialisasi()
{
Root=NULL;
P=NULL;
}

void buatsimpul(char X)
{
P=(simpul*)
malloc (sizeof(simpul));
P->INFO=X;
P->left=NULL;
P->right=NULL;
}

void buatakar()
{
Root=P;
}

void insert(int n, char X)
{
int S[20], Top;
int hasil;
int sisa, arah;
simpul *Q;
Top=-1; hasil=n;

while(hasil>1)
{
sisa=sisa%2;
Top++;
S[Top]=sisa;
hasil=hasil/2;
}
Q = Root;
while (Top > 0)
{
arah = S[Top]; Top--;
if (arah == 0)
{
Q =Q->left;
}
else
{
Q = Q->right;
}
}
arah = S[Top];
Top--;
if (arah==0)
{
Q->left =P;
}
else
{
Q->right =P;
}
}

void bacaurutnomor()
{
int i, j;
simpul *Q[129], *current;
i=1;
j=1;
Q[i]=Root;
while (Q[i] !=NULL)
{
current=Q[i];
cout<<current->INFO;

if (current->left !=NULL)
{
j++;
Q[j]=current->left;
}

if (current->right !=NULL)
{
j++;
Q[j]=current->right;
}
i++;
}
}

int main()
{
int i, n; char X;
int nom[20]={0,1,2,3,4,5,6,10,11,12};
char INFOx[20]="0ABCDEFJKU";
Inisialisasi();
X=INFOx[1];
buatsimpul(X);
buatakar();
for (i=2; i<=9; i++);
{
n=nom[i]; X=INFOx[i];
buatsimpul(X);
insert (n,X);
}
bacaurutnomor();
return 0;
}



Output dari program 1 adalah sebagai berikut :


Berikut penjelasan dari Listing program_1.cpp :

1. Tanda yang diawali dengan */ dan diakhiri dengan /* adalah script yang digunakan untuk
membuat sebuah komentar pada pemrograman C++ dan tidak berpengaruh dengan program
yang akan dijalankan
2. #include atau disebut sebagai pengarah preprocessor #include berfungsi untuk
menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum
kompilasi dimulai.
3. <iostream> adalah sebuah library yang dibutuhkan untuk fungsi input seperti cin>>var dan
output seperti cout<<var.
4.
struct Node
{
struct Node *left;
char INFO;
struct Node *right;
};


Adalah pendeklarasian tipedata abstrak struct bernama node.
5.
typedef struct Node simpul;
simpul *Root, *P; char X;


Adalah pendeklarasian tipedataabstrak typedef struct bernama node simpul
6.
void Inisialisasi()
{
Root=NULL;
P=NULL;
}
Ini adalah pendeklarasian void menu bernama inisialisasi yang nantinya akan dipanggil dalam
menu utama dalam program tersebut.
7.
void buatsimpul(char X)
{
P=(simpul*)
malloc (sizeof(simpul));
P->INFO=X;
P->left=NULL;
P->right=NULL;
}

Pendeklarasian void bernama buat simpul yang nantinya akan dipakai dalam program untuk
membuat suatu simpul simpul dalam program.
8.
void buatakar()
{
Root=P;
}

Ini adalah void bernama buat akar yang digunakan untuk mendeklarasikan bahwa yang akan
menjadi akar adalah variabel P.
9.
void insert(int n, char X)
{
int S[20], Top;
int hasil;
int sisa, arah;
simpul *Q;
Top=-1; hasil=n;

while(hasil>1)
{
sisa=sisa%2;
Top++;
S[Top]=sisa;
hasil=hasil/2;
}
Q = Root;
while (Top > 0)
{
arah = S[Top]; Top--;
if (arah == 0)
{
Q =Q->left;
}
else
{
Q = Q->right;
}
}
arah = S[Top];
Top--;
if (arah==0)
{
Q->left =P;
}
else
{
Q->right =P;
}
}
Adalah void yang mendeklarasikan apa yang akan dikerjakan dalam suatu program tersebut
yakni berupa rumus rumus yang bertujuan mencari data data yang akan ditampilkan dalam
output program tersebut sehingga dapat diorganisasikan sesuai apa yang akan kita inginkan.
10.
void bacaurutnomor()
{
int i, j;
simpul *Q[129], *current;
i=1;
j=1;
Q[i]=Root;
while (Q[i] !=NULL)
{
current=Q[i];
cout<<current->INFO;

if (current->left !=NULL)
{
j++;
Q[j]=current->left;
}

if (current->right !=NULL)
{
j++;
Q[j]=current->right;
}
i++;
}
}

Void baca urut nomor adalah void yang digunakan dalam program yang bertujuan untuk
membaca node yang telah diproses dalam rumus void insert diatas, sehingga dapat
dioutputkan.
11. Int main() adalah main program berupa integer atau program utama dalam koding tersebut.
Setiap program utama harus diawali dengan tanda kurung kurawal buka{ dan diakhiri dengan
tanda kurung kurawal tutup }.
12.
int i, n; char X;
int nom[20]={0,1,2,3,4,5,6,10,11,12};
char INFOx[20]="0ABCDEFJKU";
Inisialisasi();
X=INFOx[1];
buatsimpul(X);
buatakar();
for (i=2; i<=9; i++);
{
n=nom[i]; X=INFOx[i];
buatsimpul(X);
insert (n,X);
}
bacaurutnomor();
Ini adalah main program yang digunakan dalam program tersebut. Dalm program digunakan
tipedata int dan char.
Kemudian disini program program yang telah dideklarasikan diatas dipanggil untuk
melakukan proses dengan sebuah inputan agar dapat keluar outputnya.
13. return 0; digunakan untuk membaca data karakter.

TUGAS PRAKTIKUM
Tugas praktikum dalam modul ini adalah ::
/*
* 3.cpp
*
* Created on: 29 sept 2014
* Author: unggul budi suryanto
*/


#include<iostream>
#include<conio.h>
#include<malloc.h>
using namespace std;

struct Node
{
struct Node *left;
char INFO;
struct Node *right;
};

typedef struct Node simpul;
simpul *Root, *P; char X;
void Inisialisasi()
{
Root=NULL;
P=NULL;
}

void buatsimpul(char X)
{
P=(simpul*)
malloc (sizeof(simpul));
P->INFO=X;
P->left=NULL;
P->right=NULL;
}

void buatakar()
{
Root=P;
}

void insert(int n, char X)
{
int S[20], Top;
int hasil;
int sisa, arah;
simpul *Q;
Top=-1; hasil=n;

while(hasil>1)
{
sisa=hasil%2;
Top++;
S[Top]=sisa;
hasil=hasil/2;
}
Q = Root;
while (Top > 0)
{
arah = S[Top];
Top--;
if (arah == 0)

Q=Q->left;

else

Q=Q->right;

}
arah = S[Top];
Top--;
if (arah==0)

Q->left=P;

else

Q->right=P;

}

void BacaUrutNomor()
{
int i,j,n, batas=2;
int nom[20]={0,1,2,3,4,5,6,10,11,21};
simpul *Q[129], *Current;

for(i=0;i<=128;i++)
Q[i]=NULL;
i=1; j=1; n=1;
cout<<"\n";
Q[i]=Root;

while(Q[i]!=NULL)
{
Current=Q[i];
cout<<" "<<Current->INFO;
i++;
n=nom[i];

if(n>=batas)
{
cout<<"\n";
batas=batas*2;
}

if(Current->left != NULL)
{
j++;
Q[j]=Current->left;
}

if(Current->right != NULL)
{
j++;
Q[j]=Current->right;
}
}
}

int main()
{
int i, n; char X;
int nom[20]={0,1,2,3,4,5,6,10,11,21};
char INFOx[20]="0ABCDEFJKU";
Inisialisasi();
X=INFOx[1];
buatsimpul(X);
buatakar();
for(i=2; i<=9; i++)
{
n=nom[i];
X=INFOx[i];
buatsimpul(X);
insert(n,X);
}
BacaUrutNomor();
return 0;
}


Berikut adalah output :

Penjelasan program segitiga biner.cpp :
1. Tanda yang diawali dengan */ dan diakhiri dengan /* adalah script yang digunakan untuk
membuat sebuah komentar pada pemrograman C++ dan tidak berpengaruh dengan program
yang akan dijalankan
2. #include atau disebut sebagai pengarah preprocessor #include berfungsi untuk
menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum
kompilasi dimulai.
3. <iostream> adalah sebuah library yang dibutuhkan untuk fungsi input seperti cin>>var dan
output seperti cout<<var.
4.
struct Node
{
struct Node *left;
char INFO;
struct Node *right;
};


Adalah pendeklarasian tipedata abstrak struct bernama node.
5.
typedef struct Node simpul;
simpul *Root, *P; char X;


Adalah pendeklarasian tipedata abstrak typedef struct bernama node simpul
6.
void Inisialisasi()
{
Root=NULL;
P=NULL;
}
Ini adalah pendeklarasian void menu bernama inisialisasi yang nantinya akan dipanggil dalam
menu utama dalam program tersebut.
7.
void buatsimpul(char X)
{
P=(simpul*)
malloc (sizeof(simpul));
P->INFO=X;
P->left=NULL;
P->right=NULL;
}

Pendeklarasian void bernama buat simpul yang nantinya akan dipakai dalam program untuk
membuat suatu simpul simpul dalam program.
8.
void buatakar()
{
Root=P;
}

Ini adalah void bernama buat akar yang digunakan untuk mendeklarasikan bahwa yang akan
menjadi akar adalah variabel P.
9.
void insert(int n, char X)
{
int S[20], Top;
int hasil;
int sisa, arah;
simpul *Q;
Top=-1; hasil=n;

while(hasil>1)
{
sisa=sisa%2;
Top++;
S[Top]=sisa;
hasil=hasil/2;
}
Q = Root;
while (Top > 0)
{
arah = S[Top]; Top--;
if (arah == 0)
{
Q =Q->left;
}
else
{
Q = Q->right;
}
}
arah = S[Top];
Top--;
if (arah==0)
{
Q->left =P;
}
else
{
Q->right =P;
}
}
Adalah void yang mendeklarasikan apa yang akan dikerjakan dalam suatu program tersebut
yakni berupa rumus rumus yang bertujuan mencari data data yang akan ditampilkan dalam
output program tersebut sehingga dapat diorganisasikan sesuai apa yang akan kita inginkan.
10.
void BacaUrutNomor()
{
int i,j,n, batas=2;
int nom[20]={0,1,2,3,4,5,6,10,11,21};
simpul *Q[129], *Current;

for(i=0;i<=128;i++)
Q[i]=NULL;
i=1; j=1; n=1;
cout<<"\n";
Q[i]=Root;

while(Q[i]!=NULL)
{
Current=Q[i];
cout<<" "<<Current->INFO;
i++;
n=nom[i];

if(n>=batas)
{
cout<<"\n";
batas=batas*2;
}

if(Current->left != NULL)
{
j++;
Q[j]=Current->left;
}

if(Current->right != NULL)
{
j++;
Q[j]=Current->right;
}
}
}

Void baca urut nomor adalah void yang digunakan dalam program yang bertujuan untuk
membaca node yang telah diproses dalam rumus void insert diatas, sehingga dapat
dioutputkan.
Dalam void ini digunakan fungsi for while dan fungsi if untuk menentukan hasilnya.
11. Int main() adalah main program berupa integer atau program utama dalam koding tersebut.
Setiap program utama harus diawali dengan tanda kurung kurawal buka{ dan diakhiri dengan
tanda kurung kurawal tutup }.
12.
int i, n; char X;
int nom[20]={0,1,2,3,4,5,6,10,11,12};
char INFOx[20]="0ABCDEFJKU";
Inisialisasi();
X=INFOx[1];
buatsimpul(X);
buatakar();
for (i=2; i<=9; i++);
{
n=nom[i]; X=INFOx[i];
buatsimpul(X);
insert (n,X);
}
bacaurutnomor();
Ini adalah main program yang digunakan dalam program tersebut. Dalm program digunakan
tipedata int dan char.
Kemudian disini program program yang telah dideklarasikan diatas dipanggil untuk
melakukan proses dengan sebuah inputan agar dapat keluar outputnya.
13. return 0; digunakan untuk membaca data karakter.



BAB III
KESIMPULAN
Dalam melakukan penulisan coding, harus sesuai dan benar karena apabila ada karakter atau
huruf yang berbeda maka program tersebut akan error atau akan mengeluarkan output yg tidak sesuai
dengan apa yang kita inginkan.
Apabila dalam program awal suatu variabel dideklarasikan menggunakan huruf kecil maka
program program dibawahnya harus menggunakan huruf kecil juga karena apabila tidak sama maka
hasil program akan eror.
Walaupun pada saat kita build/kita coba melakukan debug tidak eror atau buitd complete
belum tentu program tersebut dapat berjalan pada saat kita run seperti kasus seperti diatas. Namun
coding diats apabila dilakukan run menggunakan borland dapat berjalan.




Daftar pustaka

Ilustrasi eclipse Indigo C++, YM Kusuma Ardhana, ST.

Anda mungkin juga menyukai