Rabu, 16 Desember 2015

TUGAS LANJUTAN QUEUE

SOAL
Berikan contoh ilustrasi dari kasus antrian berikut :
a)      Diketahui suatu antrian / queue dengan max = 6
b)      Lakukan Enqueue 4 elemen ke dalam antrian, dimanakah posisi Head dan Tail .
c)      Kemudian lakukan Dequeue 2 elemen dari antrian, maka dimanakah posisi Head dan Tail ?
d)      Dari keadaan diatas, bagaimanakah kondisi IsFull dan IsEmptynya ?
ILUSTRASI KONDISI KASUS PERTAMA
Deklarasi Awal Queue
Variabel yang akan digunakan adalah data (array sebagai tempat queue), head, tail.  Sama seperti Stack, Nilai dari head dan tail dimulai dari -1 yang menandakan queue kosong. sebagai contohnya kita akan membuat queue dengan data maksimal sebanyak 6 data.


ILUSTRASI KONDISI KASUS KEDUA TENTANG ENQUEUE
ENQUEUE
Digunakan untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang. Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu.
Contoh :
Lakukan Enqueue 4 elemen ke dalam antrian, dimanakah posisi Head dan Tail .


ILUSTRASI KONDISI KASUS KETIGA TENTANG DEQUEUE
DEQUEUE
Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian. Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dengan 1.
Contoh :
Berdasarkan ilustrasi pertama, lakukan Dequeue 2 elemen dari antrian, maka dimanakah posisi Head dan Tail ?





ILUSTRASI KONDISI KASUS KEEMPAT TENTANG IsEMPTY
IsEMPTY
Untuk memeriksa apakah Antrian sudah penuh atau belum. Dengan cara memeriksa nilai 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.


ILUSTRASI KONDISI KASUS TENTANG IsFull
IsFull
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.

CONTOH APABILA DI BUAT DALAM BENTUK PROGRAM
Program antrian_array_statis;
       
Uses wincrt;
Const
Max_queue = 6;
Type
Queue = array[1..Max_queue] of char;
       
Var
 Antrian      : queue;
I       : integer;
Depan        : integer;
Belakang   : integer;
Pilih           : char;
   Elemen       : char;
{***************************************
 * Procedure menampilkan antrian data. *
 ***************************************}
   Procedure tampilkan( x :integer);
      Var
                   I : integer;
     Begin
         For i := 1 to x do
         Begin
            Gotoxy(18 + 4 * i, 19);
            Write(antrian[i]);
           
         End;
      END; {*procedure TAMPILAKAN*}
Procedure clear;
 Var
  I : integer;
 Begin
For i := 1 to 10 do
Begin
Gotoxy(62 - 4 * i, 19);writeln(' ');
end;
END; {*procedure HUPUS*}
       
{****************************************************************
* Fungsi untuk menge-cek keadaan antrian ( penuh atau kosong ) *****************************************************************}
Function kosong(belakang:integer):boolean;
Begin
 Kosong := false;
  If (belakang = 0) then
  Kosong := true;
End;
Function penuh(belakang:integer):boolean;
Begin
Penuh := false;
If (belakang = max_queue) then
Penuh := true;
End;            
{*******************************************************************
* Procedure untuk menambah elemen baru selama antrian belum penuh.*
* Jika antrian sudah penuh. Program akan menampilkan suatu pesan. *
*******************************************************************}
PROCEDURE TAMBAH_ELEMEN (VAR DEPAN, BELAKANG: INTEGER; ELEMEN: CHAR);
BEGIN
IF ( PENUH(BELAKANG)) THEN
BEGIN
GOTOXY(32,16); WRITE('ANTRIAN SUDAH PENUH');
 END
Else
               Begin
                  Gotoxy(49,15);writeln('    ');
                  gotoxy(31,15);write('isikan elemennya : ');
                 
                  readln(elemen);
                 
                  Gotoxy(49,15);writeln('    ');
       
                  if (kosong(belakang)) then
                  Begin
                     Depan := 1;
                     Belakang := 1;
                     Antrian[belakang] := elemen;
                  End
Else
Begin
  Belakang := belakang + 1;
                           Antrian[belakang] := elemen;
                        End;
                        Tampilkan(belakang);
                     End;
                     Gotoxy(31,15);write('                   ');
                  end;
{*******************************************************************
             * Procedure untuk menghapus elemen dari antrian yang belum kosong.*
             * Jika antrian kosong, program akan menampilkan suatu pesan.      *
             *******************************************************************}
               PROCEDURE HAPUS (VAR DEPAN, BELAKANG : INTEGER);
                  VAR
                     I : INTEGER;
                  BEGIN
                     IF (NOT KOSONG(BELAKANG)) THEN
                     BEGIN
                        ELEMEN := ANTRIAN[DEPAN];
                        FOR I := DEPAN TO (BELAKANG - 1) DO
             
Begin
                           Antrian[i] := antrian[i+1];
                        End;
             
                        Belakang := belakang - 1;
                        Clear;
                     End
             
                     Else
                     Begin
                       
                        Gotoxy(33,16); writeln('antrian kosong...!');
                       
                     End;
                     Tampilkan(belakang);
                  END; {*procedure hapus*}
             
            {*******************************************************************
             * procedure pembukaan program, nama : TARKIMAN NIM : 10110738.    *
             *******************************************************************}
              Procedure tarkiman;
                  Var
                     S,t : string;
                     I,x : integer;
             
                  Begin
                    
                     S := 'tugas struktur data - program antrian ( queue )';
                     for i := 1 to length(s) do
                     Begin
                        For x := 1 to 5 do
Begin
                           Gotoxy(17+i,x+1);write(copy(s,i,1));
                           Gotoxy(17+i,x);write(' ');     
                        end;
              End 
                     T := 'tarkiman ( 10110738 )';
                     for i := 1 to length(t) do
                     Begin
Gotoxy(30,10);write(copy(t,1,i));
 End;
End;
{*******************************************************************
* Procedure menu program, bingkai tampilan pilihan menu.          *
 * Dan ilustrasi kotak-kotak antrian.                              *
 *******************************************************************}
 Procedure menuprogram;
Begin
Gotoxy(12,2); writeln('8*******************************************************8');
Gotoxy(16,3); writeln('menu program antrian data ( queue )BY SITI HAJAR');                  
 gotoxy(12,4); writeln('=========================================================');
Gotoxy(12,3);writeln('|');gotoxy(68,3);writeln('|');
Gotoxy(12,4);writeln('|');gotoxy(68,4);writeln('|');
Gotoxy(12,5);writeln('|');gotoxy(68,5);writeln('|');
Gotoxy(12,6);writeln('|');gotoxy(68,6);writeln('|');
Gotoxy(12,7);writeln('|');gotoxy(68,7);writeln('|');
Gotoxy(12,8);writeln('|');gotoxy(68,8);writeln('|');
Gotoxy(12,9);writeln('|');gotoxy(68,9);writeln('|');
Gotoxy(12,10);writeln('|');gotoxy(68,10);writeln('|');
Gotoxy(12,11);writeln('|');gotoxy(68,11);writeln('|');
Gotoxy(13,11);writeln('=======================================================');
Gotoxy(12,12);writeln('|');gotoxy(68,12);writeln('|');
Gotoxy(24,12);writeln('ilustrasi tampilan antrian ( queue )');
gotoxy(12,13);writeln('|');gotoxy(68,13);writeln('|');
Gotoxy(13,13);writeln('=======================================================');
Gotoxy(12,14);writeln('|');gotoxy(68,14);writeln('|');
Gotoxy(12,15);writeln('|');gotoxy(68,15);writeln('|');
Gotoxy(12,16);writeln('|');gotoxy(68,16);writeln('|');
Gotoxy(12,17);writeln('|');gotoxy(68,17);writeln('|');
Gotoxy(12,18);writeln('|');gotoxy(68,18);writeln('|');
Gotoxy(12,19);writeln('|');gotoxy(68,19);writeln('|');
Gotoxy(12,20);writeln('|');gotoxy(68,20);writeln('|');
Gotoxy(12,21);writeln('|');gotoxy(68,21);writeln('|');
Gotoxy(12,22);writeln('|');gotoxy(68,22);writeln('|');
Gotoxy(12,22);writeln('8*******************************************************8');
                    
Gotoxy(20,21);writeln('f  i  f  o ATAU f c f s');
                    
Gotoxy(20,18);writeln('*************************');
Gotoxy(20,19);writeln('|');gotoxy(24,19);writeln('|');gotoxy(28,19);writeln('|');
Gotoxy(32,19);writeln('|');gotoxy(36,19);writeln('|');gotoxy(40,19);writeln('|');
Gotoxy(44,19);writeln('|');
Gotoxy(20,20);writeln('*************************');
Gotoxy(16,18);writeln('out');gotoxy(47,18);writeln('in');
Gotoxy(16,19);writeln('<==');gotoxy(47,19);writeln('<==');
Gotoxy(25,6);writeln('1. Menambah elemen baru (enqueue)');
Gotoxy(25,7);writeln('2. Menghapus elemen (dequeue)');
Gotoxy(25,9);writeln('0. Exit');
Gotoxy(7,24);writeln('silahkan tekan tombol 1 atau 2 pada keyboard anda dan 0 untuk exit');        
Gotoxy(29,24);writeln('1');gotoxy(36,24);writeln('2');gotoxy(61,24);writeln('0');        
End;    
{*********************************************************************
* Procedure pilihan menu, sesuai tombol yang di tekan pada keyboard *
* 1. Menambahkan elemen antrian ( proses enqueue )                  *
* 2. Menghapus elemen antrian ( proses dequeue )                    *
* 0. Exit ( mengakhiri program )                                    *
*********************************************************************}   
PROCEDURE MENU( PILIH:CHAR);
Begin
Case pilih of
'1' : begin
Gotoxy(30,16);writeln('                        ');                          
gotoxy(25,6);writeln('1. Menambah elemen baru (enqueue)');                  
Tambah_elemen(depan,belakang,elemen);
End;
'2' : begin
Gotoxy(30,16);writeln('                        ');
gotoxy(25,7);writeln('2. Menghapus elemen (dequeue)');
Hapus(depan,belakang);
End;
'0' : begin
Gotoxy(25,9);writeln('0. Exit');
Clrscr;
End;
End;
End;
{*******************************************************************
* Program utama...................................................*
*******************************************************************}
Begin
 Clrscr;
 Tarkiman;
 Clrscr;
 depan := 0;
  Belakang := 0;
  Clrscr;
  Repeat
  Menuprogram;
 Pilih:=readkey;
 Menu(pilih);
  Until pilih='0'
End.

             
           
   TAMPILAN OUTPUT
          

       

       

 


Tidak ada komentar:

Posting Komentar