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;
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;
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;
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.