laporan praktikum modul ix

31
LAPORAN PRAKTIKUM ALGORITMA PEMROGRAMAN & STRUKTUR DATA MODUL IX DISUSUN OLEH NAMA : DEVI NIM : 2012081043 KELAS : TI2012A LABORATORIUM KOMPUTER

Upload: devi-apriansyah

Post on 16-Apr-2017

69 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Laporan praktikum modul ix

LAPORAN PRAKTIKUMALGORITMA PEMROGRAMAN & STRUKTUR DATA

MODUL IX

DISUSUN OLEHNAMA : DEVINIM : 2012081043KELAS : TI2012A

LABORATORIUM KOMPUTERFAKULTAS ILMU KOMPUTERUNIVERSITAS KUNINGAN

2012

Page 2: Laporan praktikum modul ix

I. PEMBAHASAN

A. Dasar Teori

Definisi Queue

Jika diartikan secara harafiah, queue berarti antrian, queue merupakan

salah satu contoh aplikasi dari pembuatan double linked list yang cukup

sering kita temui dalam kehidupan sehari-hari, misalnya saat Anda

mengantri di loket untuk membeli tiket. Istilah yang cukup sering dipakai

seseorang masuk dalam sebuah antrian adalah enqueue. Dalam suatu

antrian, yang datang terlebih dahulu akan dilayani lebih dahulu. Istilah yang

sering dipakai bila seseorang keluar dari antrian adalah dequeue. Walaupun

berbeda implementasi, struktur data queue setidaknya harus memiliki

operasi-operasi sebagai berikut :

EnQueue Memasukkan data ke dalam antrian

DeQueue Mengeluarkan data terdepan dari antrian

Clear Menghapus seluruh antrian

IsEmpty Memeriksa apakah antrian kosong

IsFull Memeriksa apakah antrian penuh

Implementasi Queue dengan Linear Array

Linear Array

Linear array adalah suatu array yang dibuat seakan-akan merupakan

suatu garis lurus dengan satu pintu masuk dan satu pintu keluar. Berikut ini

diberikan deklarasi kelas Queue Linear sebagai implementasi dari Queue

menggunakan linear array. Dalam prakteknya, anda dapat menggantinya

sesuai dengan kebutuhan Anda. Data diakses dengan field data, sedangkan

indeks item pertama dan terakhir disimpan dalam field Head dan Tail.

Konstruktor akan menginisialisasikan nilai Head dan Tail dengan -1 untuk

menunjukkan bahwa antrian masih kosong dan mengalokasikan data

sebanyak MAX_QUEUE yang ditunjuk oleh Data. Destruktor akan

mengosongkan antrian kembali dan mendealokasikan memori yang

digunakan oleh antrian.

Page 3: Laporan praktikum modul ix

Operasi-Operasi Queue dengan Linear Array

IsEmpty

Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong

atau sudah berisi data. hal ini dilakukan dengan mengecek apakah tail

bernilai -1 atau tidak. Nilai -1 menandakan bahwa queue masih kosong.

IsFull

Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau

masih bisa menampung data dengan cara mengecek apakah nilai tail sudah

sama dengan jumlah maksimal queue. Jika nilai keduanya sama, berarti

queue sudah penuh.

EnQueue

Fungsi EnQueue berguna untuk memasukkan sebuah elemen dalam

queue.

DeQueue

Fungsi DeQueue berguna untuk mengambil sebuah elemen dari queue.

Operasi ini sering disebut juga serve. Hal ini dilakukan dengan cara

memindahkan sejauh satu langkah ke posisi di depannya sehingga otomatis

elemen yang paling depan akan tertimpa dengan elemen yang terletak di

belakangnya.

Clear

Fungsi Clear berguna untuk menghapus semua lemen dalam queue

dengan jalan mengeluarkan semua elemen tersebut satu per satu hingga

queue kosong dengan memanfaatkan fungsi DEQueue.

Implementasi Queue dengan Circular Array

Circular Array

Circular array adalah suatu array yang dibuat seakan-akan merupaka

sebuah lingkaran dengan titik awal (head) dan titik akhir (tail) saling

bersebelahan jika array tersebut masih kosong. Posisi head dan tail pada

gambar diatas adalah bebas asalkan saling bersebelahan. Berikut ini

diberikan deklarasi kelas Queue Circular sebagai implementasi circular

array. Dalam prakteknya, Anda dapat menggantikanny sesuai dengan

Page 4: Laporan praktikum modul ix

kebutuhan Anda. Data diakses dengan field data, sedangkan indeks itemn

pertama dan terakhir disimpan dalam field Head dan Tail. Konstruktor akan

menginisialisasi nilai Head dan Tail dengan 0 dan MAX-QUEUE-1 untuk

menunjukkan bahwa antrian masih kosong dan mengalokasikan data

sebanyak MAX-QUEUE yang ditunjuk oleh Data. destruktor akan

mengosongkan antrian kembali dan mendealokasikan memori yan

digunakan oleh antrian.

Operasi-Operasi Queue dengan Circular Array

IsEmpty

Fungsi IsEmpty berguna untuk mengecek apakah Queue masih kosong

atau sudah berisi. Hal ini dilakukan dengan mengecek apakah tail masih

terletak bersebelahan dengan head dan tail lebih besar dari head atau tidak.

Jika benar, maka queue masih kosong.

IsFull

Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau

masih bisa menampung data dengan cara mengecek apakah tempat yang

masih kosong tinggal satu atau tidak (untuk membedakan dengan empty

dimana semua tempat kosong). Jika benar berarti queue penuh.

EnQueue

Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam

queue tail dan head mula-mula bernilai nol (0).

DeQueue

DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini

dilakukan dengan cara memindahkan posisi head satu langkah ke belakang.

Implementasi Queue dengan Double Linked List

Selain menggunakan array, queue juga dapat dibuat dengan linked list.

Metode linked list yang digunakan adalah double linked list.

Operasi-operasi Queue dengan Double Linked List

IsEmpty

Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong

atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah head

Page 5: Laporan praktikum modul ix

masih menunjukkan pada Null atau tidak. Jika benar berarti queue masih

kosong.

IsFull

Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau

masih bisa menampung data dengan cara mengecek apakah Jumlah Queue

sudah sama dengan MAX_QUEUE atau belum. Jika benar maka queue

sudah penuh.

EnQueue

Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam

queue (head dan tail mula-mula meunjukkan ke NULL).

DeQueue

Procedure DeQueue berguna untuk mengambil sebuah elemen dari

queue. Hal ini dilakukan dengan cara menghapus satu simpul yang terletak

paling depan (head).

B. Praktikum

Praktikum 1

1. Menulis source kode Program C++

Page 6: Laporan praktikum modul ix
Page 7: Laporan praktikum modul ix

Melakukan Kompilasi

Pilih menu project, lalu pilih submenu compile atau denngan menekan

ALTF9. Maka akan muncul seperti gambar di bawah ini.

Menjalankan Program

Menjalankan program dengan cara pilih menu Debug, lalu submenu Run

atau dengan cara menekan CTRL+F9. Maka akan muncul gambar seperti di

bawah ini.

Page 8: Laporan praktikum modul ix

Kita input pilihan yang pertama yaitu “I” dan menginputkan angka dalam

queue, maka tampilanya adalah sebagai berikut:

Setelah tekan enter lalu input any key atau tombol apapun pada keyboard,

lalu masukan pilihan yang kedua yaitu “D”, maka tampilannya sebagai

berikut ini:

Lakukan hal yang sama seperti perintah diatas, lalu kita masukan pilihan

yang ketiga yaitu “P”, maka hasilnya sebagai berikut:

Page 9: Laporan praktikum modul ix

Lakukan seperti perintah diatas dan input pilihan yang ke terakhir yaitu

“E”, maka tampilannya sebagai berikut:

2. Analisa dan buat pembahasannya

Sintaks diatas adalah sintaks ANTRIAN yang direpresentasikan dalam

bentuk struck, operasi yang akan dilakukan pada sintaks diatas adalah :

- Insert = untuk memasukan nilai antrian.

- Delete= untuk menghapus nilai antrian.

- Print_list= untuk menampilkan nilai antrian

- Dan operasi – operasi dasar lainya.

Dan dalam sintaks diatas telah dikelompokan operasi operasinya agar lebih

mudah dipahami, dimana terdiri atas :

- Implementasi operasi Queue

- Insert

- Delete

- Print_list

- Show_working

- Main

Page 10: Laporan praktikum modul ix

1. Implementasi Operasi Queue

Pembahasan:

Terdiri dari 2 header yakni iostream dan conio. Terdiri dari 1 kelas yakni

Linked_list_Queue, dan badan dari kelas itu terdiri dari 1 struct yang diprivate

dan diberi nama node, dan dalam struct tersebut terdapat 2 variabel.

Selanjutnya dideklarasikan 4 variabel/karkter antrian yang bersifat pointer,

dan ke 4 ini menunjuk nilai struct node. Sehingga ke 4 ini memiliki variabel yang

sama.

Selanjutnya dideklarasikan 5 fungsi, yaitu fungsi link_list_Queue, fungsi

delete, fungsi insert, fungsi print_list dan fungsi show_working.

Fungsi pertama dideklarasikan yang dimana variabel rear dan front memiliki

nilai NULL(mengisi)

#include<iostream.h>#include<conio.h>class Linked_list_Queue{ private: struct node { int data; node *next; }; node*rear; node*entry; node*print; node*front;

public: Linked_list_Queue( ); void Delete( ); void Insert( ); void print_list( ); void show_working( );};Linked_list_Queue::Linked_list_Queue( ){ rear=NULL; front=NULL;}

Page 11: Laporan praktikum modul ix

2. Insert()

Pembahasan:

Sintaks selanjutnya yakni fungsi Enqueu yakni memasukan elemen antrian.

Dideklarasikan kembali variabel baru yakni num yang bertipe integer. Dan dalam

sintaks disamping pun ada kondisi if yang kondisinya rear==NULL artinya jika

nilai rear tersebut terisi maka badan if akan dijalankan. Dan arti dari badan if itu

yakni memasukan nilai kedalam program.

Sehingga jika kondisi if tersebut terisi maka nilai akan masuk pada program

dan variabel num, dan akan menampilkan output “SUDAH MASUK DALAM

QUEUE” dan “press any kae tu return to menu” artinya tolong tekan tombol

apapun untuk kembali kelayar utama. Inilah fungsi dari next dan null.

void Linked_list_Queue::Insert(){ int num; cout<<"\n\n\n\n\n\t Masukan angka dalam Queue : ";cin>>num; entry=new node; if(rear==NULL) {

entry->data=num;entry->next=NULL;rear=entry;front=rear;

} else {

entry->data=num;entry->next=NULL;rear->next=entry;rear=entry;

} cout<<"\n\n\t *** "<<num<<" sudah masuk dalam Queue."<<endl; cout<<"\n\n\n\t\t Press any key to return to Menu."; getch();}

Page 12: Laporan praktikum modul ix

3. Delete()

Pembahasan:

Sintaks selanjutnya yakni fungsi Dequeu dalam antrian atau untuk

mengeluarkan/menghapus elemen paling depan dari antrian. Sebagai contoh jika

kita masukan elmenen 1,2,3,4,5, lalu kita jalankan fungsi ini maka secara otomatis

angka 1 akan terhapus dari antrian karna angka 1 adalah element terdepan. dan

jika setiap element telah dikeluarkan maka fungsi akan menampilkan “Queue is

empty” artinya nilai queue telah kosong seperti sintaks yang telah dibuat diatas.

Namun jika hanya 1 element yang ingin dihapus maka sintkas akan kembali

kemenu utama dan melakukan instruksi lainya.

4. Print_list

void Linked_list_Queue::Delete(){ if(front==NULL)

cout<<"\n\n\n\t *** Error : Queue is empty.\n"<<endl; else { int deleted_element=front->data; node *temp; temp=front; front=front->next; delete temp; cout<<"\n\n\n\t *** "<<deleted_element<<" dihapus dari Queue."<<endl; } cout<<"\n\n\n\t\t Press any key to return to Menu."; getch();}

void Linked_list_Queue::print_list(){ print=front;

if(print!=NULL) cout<<"\n\n\n\n\n\t Angka angka yang ada dalam Queue : \n"<<endl; else cout<<"\n\n\n\n\n\t *** Tidak ada yang ditampilkan."<<endl; while(print!=NULL) { cout<<"\t"<<print->data<<endl; print=print->next; } cout<<"\n\n\n\t\t Pres any key to return to menu."; getch();}

Page 13: Laporan praktikum modul ix

Pembahasan:

Sintaks diatas adalah sintkas untuk menampilkan elemen-element antrian

yang telah di masukan. Sehingga print=front arinya print=depan. Jadi mulai dari

element depan yang akan ditampilkan. Angka yang ditampilkan akan berbentuk

horizontal atau kebawah karna di dalam sintaks penampilannya itu digunkan \n.

Namun jika data telah terhapus semua maka akan menmpilkan fungsi else. “ tidak

ada yang ditampilkan”.

5. Show_working

Pembahasan:

Sintaks selanjutnya yakni pembuatan tampilan untuk operasi-operasi yang

telah kita buat sebelumnya, disini di deklarasikan kembali variabel key yang harus

diberi nilai karna disanan key=NULL, dan dalam sintaks diatas pun ada fungsi

GOTOXY yang berfungsi untuk menentukan jarak karakternnya. Yang terdiri dari

baris dari jumlah spasi dan enter dalam pixel.

void Linked_list_Queue::show_working(){ char Key=NULL; do {

clrscr();gotoxy(5,5);cout<<"**** Implementation of Linked List as a Queue

******"<<endl;gotoxy(10,8);cout<<"Pilih salah satu menu: "<<endl;

gotoxy(15,10);cout<<"- Press \'I\' to Masukan data dalam Queue"<<endl;gotoxy(15,12);cout<<"- Press \'D\' to Hapus data dari Queue"<<endl;gotoxy(15,14);cout<<"- Press \'P\' to Tampilkan data dari Queue"<<endl;gotoxy(15,16);cout<<"- Press \'E\' to Exit"<<endl;

Page 14: Laporan praktikum modul ix

Pembahasan:

Fungsi diatas untuk ketentuan pemilihan operasi dimana if yang pertama

yakni (int(key)=27 jumlah keyboard yang bisa di gunakan hanya terdiri dari 27

tuts. Sehingga ada tombol yang tidak bisa kita tekan. Dan else if lainnya hanya

untuk memberikan kebebasan jika kita menekan huruf kapital dan kecil. Disana

telah diatur sintaksnya. Dan setiap else disana telah ditentukan tampilantampilan

yang akan dijalankan.

6. Main()

Pembahasan:

Sintaks diatas adalah induknya dari semua fungsi sebelumnya. Dan dalam

fungsi utama disana didefunisikan kembali elemen class sebelumnya dengan nama

obj. Digunakan untuk pemanggilan sturct untuk show_working

Input:gotoxy(10,20);cout<<"";gotoxy(10,20);cout<<"Masukan Pilihan : ";

Key=getche();if(int(Key)==27 || Key=='e' || Key=='E') break;

else if(Key=='i' || Key=='I')Insert();

else if(Key=='d' || Key=='D')Delete();

else if(Key=='p' || Key=='P')print_list();

elsegoto Input;

}while(1);

}

int main(){ Linked_list_Queue obj; obj.show_working();

return 0;}

Page 15: Laporan praktikum modul ix

3. Ubah source kode diatas menggunakan preprocessor include.h dan untuk

setiap operasi queue gunakan bentuk umum sesuai dengan dasar teori

praktikum.

Sourec kode pada Turbo C++

Page 16: Laporan praktikum modul ix

Melakukan kompilasi

Page 17: Laporan praktikum modul ix

Menjalankan program

Pembahasan:

Program diatas sama seperti program sebelumnya, hanya saja dalam

program ini menggunkana header stdio. Sehingga fungsi yang digunakan

untuk program tersebut adalah printf dan scanf. Dalam header stdio digunakan

juga kode format untuk menampilkan keluaran sesuai dengan variable yang

digunakan.

Page 18: Laporan praktikum modul ix

II. TUGAS

1. Tambahkan function untuk mencari suatu elemen dalam queue

2. Tambahakan function untuk mengedit suatu elemen dalam queue

Jawaban no 1 dan no 2:

Menulis source kode Program C++

Page 19: Laporan praktikum modul ix
Page 20: Laporan praktikum modul ix

Pembahasan:

Program diatas menggunakan header conio dan stdio, dan mempunyai

konstanta MAX 8, yang artinya jumlah antrian max 8. Dalam sintaks tersebut

mempunya 3 variabel yang bertipe char. Operasi yang digunakan dalam

antrian tersebut adalah create, isempty, isfull, enqueue, dequeue, clear dan

tampil. Untuk menampilkan suatu keluaran digunakan fungsi printf dan untuk

menginput digunaka fungsi scanf yang berada pada file header stdio. Dan

untuk menghapus pada layar digunakan fungsi clrscr yang berada pada file

header conio. Perulangan yang di gunakan dalam program tersebut adalah

while do.

3. Carilah nilai total, rata-rata, terbesar dan terkecil

Mencari nilai total dan rata-rata

Melakukan Kompile

Menjalankan program

Page 21: Laporan praktikum modul ix

Pembahasan:

Program diatas adalah program untuk menghitung jumlah dan rata-rata.

Header yang digunakan adalah stdio dan conio. Program diatas mempunyai

konstanta max 8 yang artinya maksimal jumlah data yang diinputkan adalah 8.

Dalam program tersebut mempunyai 5 variabel yang bertipe integer dan float.

Sitem input output yang digunakan adalah printf dan scanf yang berada pada

file header stdio. Kode format yang digunakan adalah %f dan %d sesuai

dengan variable yang telah di deklarasikan sebelumnya.

Mencari nilai terbesar dan terkecil

Source kode pada C++

Melakukan kompilasi

Page 22: Laporan praktikum modul ix

Menjalankan Program

Pembahasan:

Program diatas adalah program untuk mencari nilai terbesar dan terkecil.

Header yang digunakan adalah stdio. Dalam program tersebut terdapat fungsi

tambahan yaitu double terbesar dan double terkecil. Dan untuk mencari nilai

terbesar atau terkecil digunakan struktur pemilihan if then else. Dalam fungsi

utama yaitu int main terdapat I/O printf untuk menampilkan hasil keluaran dan

scanf untuk menginputkan data.

Page 23: Laporan praktikum modul ix

III. KESIMPULAN

Dari data diatas dapa saya simpulkan bahwa Karakteristik yang

membedakan queue (antrian) dari stack adalah cara menyimpan dan mengambil

data dengan struktur first in first out (FIFO). Hal ini berarti elemen pertama yang

ditempatkan pada queue adalah yang pertama dipindahkan. Selain itu, Elemen –

element dasarnya adalah :

1. Elemen antrian yaitu item-item data yang terdapat di elemen antrian

2. Front (elemen terdepan dari antrian)

3. Rear (elemen terakhir dari antrian)

4. Jumlah elemen pada antrian (Count)

5. Status antrian

Operasi dasar Queue terbagi menjadi :

1. Create Queue

2. Empty Queue

3. Full Queue

4. Enqueue

5. Dequeue

6. Clear Queue

Page 24: Laporan praktikum modul ix

IV. Daftar Pustaka

www.google.com

Modul Pembelajaran, Algoritma Pemrograman dan Struktur Data