Wednesday 10 April 2013

Laporan Praktikum Algoritma Modul 9


 LAPORAN PRAKTIKUM
ALGORITMA PEMROGRAMAN
DAN STRUKTUR DATA
MODUL 9




Disusun oleh :
Nama          :  Ricky Rudianto
NIM            :  2012081127
Kelas           :  Teknik Informatika A



LABORATORIUM KOMPUTER
FAKULTAS ILMU KOMPUTER
UNIVERSITAS KUNINGAN
2012
MODUL 9

ANTRIAN (QUEUE)

“PEMBAHASAN”

Dasar Teori
Antrian (Queue) adalah suatu kumpulan data yang penambahan elemennya hanya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang atau rear), dan penghapusan atau pengambilan elemen dilakukan lewat ujung yang lain (disebut dengan sisi depan atau front). Antrian (Queue) mempunyai prinsip FIFO (Firs In Firs Out) bahwa yang pertama masuk maka yang pertama keluar.
Operasi Dasar Queue
1.    Create Queue
·      Untuk menciptakan dan menginisialisasi Queue
·      Dengan cara membuat Head dan Tail
·      Bentuk umum :
void create( )
{
               antrian.head = -1;
               antrian.tail = -1;
}
2.    Empty Queue
·      Untuk memeriksa apakah antrian sudah penuh atau belum
·      Dengan cara memeriksa Tail, jika Tail = -1 maka empty
·      Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah
·      Pergerakan pada antrian terjadi dengan penambahan elemen antrian kebelakang, yaitu menggunakan nilai Tail


·      Bentuk umum :
void isEmpty
{
               if (antrian.tail = -1)
                           return 1;
               else
                           return 0;
}
3.    Full Queue
·      Untuk mengecek apakah antrian sudah penuh atau belum
·      Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh
·      Bentuk umum :
void idFull
{
               if (antrian.tail = Max-1)
                           return 1;
               else
                           return 0;
}
4.    Enqueue
·      Untuk menambahkan elemen ke dalam antrian, penambahan elemen selalu di tambahkan di elemen paling belakang.
·      Penambahan elemen selalu menggerakan Variabel Tail dengan cara increment counter Tail terlebih dahulu.
·      Bentuk umum :
void enqueue (int data)
{
               if (isEmpty ( ) = 1)
{
                           antrian.head=antrian.tail=0;
                           antrian.data[antrian.tail]=data;
                           printf(“%d, masuk”, antrian.data[antrian.tail]);
               }
               else
               if (isFull ( ) = 0)
               {
                           antrian.tail++;
                           antrian.data[antrian.tai]=data;
                           printf(“%d, masuk”, antrian.data[antrian.tail]);
               }
}
5.    Dequeue
·      Digunakan untuk menghapus elemen terdepan/pertama (head) dari antrian
·      Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dengan 1
·      Penggeseran dilakukan dengan menggunakan looping
·      Bentuk umum :
int Dequeue
{
               int i;
               int e = antrian.data[antrian.head];
               for (i=antrian.head; i<=antrian.tail; i++)
               {
                           antrian.data[i]=antrian.data[i+1];
               }
               antrian.tail--;
               return e;
}
6.    Clear Queue
·      Untuk menghapus elemen antrian dengan cara membuat Tail dengan Head = -1
·      Penghapusan elemen-elemen antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen antrian tidak lagi terbaca
·      Bentuk umum :
void clear ( )
{
               antrian.head = -1;
               antrian.tail = -1;
               printf(“data clear”);
}
7.    Tampilan Queue
·      Untuk menampilkan nilai-nilai elemen antrian
·      Menggunakan looping dari Head s/d Tail
·      Bentuk umum :
void clear ( )
{
               antrian.head = -1;
               antrian.tail = -1;
               printf(“data clear”);
}











PRAKTIKUM
Praktikum 1
1.    Tulis source code di bawah ini :
#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;
}

void Linked_list_Queue::Insert( )
{
            int num;
            cout<<"\n\n\n\n\n\t Masukkan 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<<" masuk ke Queue."<<endl;
            cout<<"\n\n\n\t\t Press any key to return to Menu. ";
            getch();
}

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\t***"<<deleted_element<<"dihapus"<<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\t Angka yang ada di Queue : \n"<<endl;
            else
                        cout<<"\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 Press any key to return to Menu. ";
            getch();
}

void Linked_list_Queue::show_working( )
{
            char Key=NULL;
            do
            {
                        clrscr();
                        gotoxy(5,5);
                        cout<<"Menu"<<endl;
                        gotoxy(10,8);
                        cout<<"Pilih salah satu menu : "<<endl;
                        gotoxy(15,10);
                        cout<<"Press \'I\' to Masukkan data Queue"<<endl;
                        gotoxy(15,12);
                        cout<<"Press \'D\' to Hapus data dari Queue"<<endl;
                        gotoxy(15,14);
                        cout<<"Press \'P\' to Tampilkan data Queue"<<endl;
                        gotoxy(15,16);
                        cout<<"Press \'E\' to Exit"<<endl;
                        Input:
                        gotoxy(10,20);
                        cout<<"                                                                                   ";
                        gotoxy(10,20);
                        cout<<"Masukkan Pilihan : ";
                        Key=getch();

                        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( );
                        else
                                    goto Input;
            }
            while(1);
}
int main()
{
            Linked_list_Queue obj;
            obj.show_working();
            return 0;
}

Bahasa C++ :














2.    Di kompile dan jalankan, maka hasilnya adalah sebagai berikut :
Dari hasil diatas sudah jelas bahwa apabila kita :
Ketik ‘I’ untuk memasukan data Queue
Ketik ‘D’ untuk menghapus data dari Queue
Ketik ‘P’ untuk menampilkan data Queue
Ketik ‘E’ untuk keluar
Sebagai contoh dari program diatas adalah sebagai berikut :
Ketika saya ketik ‘I’ maka saya harus memasukan angka dalam Queue misalkan angka yang saya masukan adalah 12
Maka akan tampil “12 masuk ke Queue”. Dan untuk menampilkan data Queue tersebut saya akan mengetik ‘P’, maka :



Dan untuk menghapus data yang ada di Queue yaitu ketik “D”, maka :



TUGAS MODUL 9
Soal !
1.Tambahkanlah Function Untuk Mencari Suatu Elemen Dalam Queue.
2.Tambahkan Function Untuk Mengedit suatu elemen dalam Queue.
3.Carilah Nilai total, Rata-Rata, terbesar dan terkecil dari elemen-elemen queue dalam function itu tersendiri.




Penyelesaian !
No. 1
Tulis source code berikut :
#include <stdio.h>
void main()
{
            int queue[5];
            int depan = -1;
            int belakang = -1;
int pilihan, data, i;
do
{
printf("MENU\n");
printf("1. ENQUEUE\n2. DEQUEUE\n3. VIEW\n4. EXIT\n");
printf("Pilihan = "); scanf("%d", &pilihan);
switch (pilihan)
{
case 1: //enqueue
//apakah queue belum penuh?
if (belakang < 4 )
{
printf("Data Masuk (masukkan integer) = "); scanf("%d", &data);
queue[belakang+1] = data;
belakang++;
if (belakang == 0)
depan = 0;
}
else
printf("Queue penuh!\n");
break;
case 2: //dequeue
//apakah queue belum kosong?
if (depan <= belakang)
{
printf("Data keluar = %d\n", queue[depan]);
depan++;
}
else
printf("Queue kosong!\n");
break;
case 3:
for(i=depan; i<=belakang; i++)
printf("%d ", queue[i]);
printf("\n");
break;
}
}
while (pilihan != 4);
}











Bahasa C++ :



Dikompile dan jalankan, maka hasilnya yaitu :




No. 2
Tulis source code berikut :
 #include<stdio.h>
#include<iostream.h>
#include<conio.h>
#define QSIZE 5
int front=0,rear=-1,q[QSIZE];
void insert(int x)
{

rear=(rear+1)%QSIZE;
q[rear]=x;
}
int del()
{
int t=0;
if(rear<=-1)
cout<<"\nQueue is empty.\n\n";
else
{
t=q[front];
if(front!=rear)
front=(front+1)%QSIZE;
else
{
front=0;
rear=-1;
}
}
return t;
}
void display()
{
int i;
if(rear<=-1)
cout<<"\nQueue is empty.\n\n";
else
{
cout<<"\nThe queue is\n";
for(i=front;i!=rear;i=(i+1)%QSIZE)
cout<<q[i]<<" \t";
cout<<q[i]<<" \n";
}
}
void destroy()
{
int i=0;
if(rear<=-1)
cout<<"\nQueue is empty.\n\n";
else
for(i=front;i<=rear;i=(front+1)%QSIZE)
del();
if(i!=0)
cout<<"\nQueue is destroy.\n\n";
}
void main()
{
int ch,in,d;
clrscr();
do
{
cout<<"\nMAIN MENU\n\n";
cout<<"1.Insert\n";
cout<<"2.Delete\n";
cout<<"3.Display\n";
cout<<"4.Destroy\n";
cout<<"5.Exit\n\n";
cout<<"Enter your choice:";
cin>>ch;
switch(ch)
{
case 1:clrscr();
if(front==(rear+1)%QSIZE && rear>=QSIZE-1)
cout<<"\nQueue is full\n\n";
else
{
cout<<"\nEnter the element to be inserted (integer only):";
cin>>in;
insert(in);
clrscr();
}
break;
case 2:clrscr();
d=del();
if(d!=0)
cout<<"\nElement deleted="<<d<<"\n\n";
break;
case 3:clrscr();
display();
break;
case 4:clrscr();
destroy();
break;
case 5:break;
default:clrscr();
cout<<"\nEnter an appropriate choice.\n\n";
}

}
while(ch!=5);
}
Bahasa C++ :
















Dokompile dan jalankan, maka hasilnya adalah :
No. 3
Tulis source code berikut :
#include <iostream.h>
void main ()
{
int i,j=11;
float k,z=0;
int x[12]={1,3,5,4,7,2,99,16,45,67,89,45};
int maks = -1000;
int min = 1000;
cout<<"    "<<" Menghitung Total ,Nilai Maksimal ,Minimal ,Dan Nilai Rata-rata "<<endl;
cout<<"================================================================================"<<endl;
                                                 for (i=0; i<12; i++)
                                                 {
                                                 if (i==j)
                                                 cout<<" "<<x[i]<<" ";
                                                 else
                                                 cout<<" "<<x[i]<<" + ";
                                                 z=z+x[i];
                                                 }
                                                 cout<<endl<<endl;
                                                 cout<<" Nilai Total     : "<<z;
                                                 cout<<endl;
for (i=0; i<12; i++)
                                                 {
                                                 if (x[i]>maks)
                                                 maks=x[i];
                                                 }
cout<<" Nilai Maksimal  : "<<maks<<endl;
for (i=0; i<12;i++)
                                                 {
                                                 if (x[i]<min)
                                                 min=x[i];
                                                 }
cout<<" Nilai Minimal   : "<<min<<endl;
k=z/j;
cout<<" Nilai Rata-rata : "<<k;
}
Bahasa C++ :

Dikompile dan jalankan, maka hasilnya adalah :


KESIMPULAN
Antrian (Queue) adalah suatu kumpulan data yang penambahan elemennya hanya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang atau rear), dan penghapusan atau pengambilan elemen dilakukan lewat ujung yang lain (disebut dengan sisi depan atau front). Antrian (Queue) mempunyai prinsip FIFO (Firs In Firs Out) bahwa yang pertama masuk maka yang pertama keluar.

1 comment: