Welcome to my Blog

Kamis, 05 Juni 2014

Implementasi Queue

Program Implementasi Queue Dalam Bahasa Pascal

By : @hadipranoto_

Screenshot of Queue Program 



Queue Pascal Source:




program antrian;
{I.S : Program antrian diberi harga awal}
{F.S : Program antrian dalam keadaan siap digunakan}
uses crt;

const
     Max=3;

type
     Data = record
          Nama: string[15];
    NIM : string[15];
    Kota: string[15];
    Lama: byte;
    Tipe: string[10];
     end;
  
     LarikQueue = array [1..Max] of data;

var
     Queue : LarikQueue;
     Front, Rear, N_antrian : Integer;
     Menu, Lagi :char;
     Elemen : data;
     carinim,carinama : string[15];

     Procedure inisialisasi (var Front,Rear: Integer);
     {I.S: Peubah penunjuk front dan rear diberi harga awal nol}
     {F.S: Peubah penunjuk front dan rear bernilai nol}
     begin
          Front:=0;
          Rear:=0;
     end;

     Function Kosong(Rear: Integer): boolean;
     {I.S: Penunjuk rear dalam keadaan terdefinisi}
     {F.S: Mengecek indeks penunjuk rear bernilai 0 atau tidak}
     begin
          Kosong:=false;
          if (Rear=0) then
               kosong:=true;
     end;

     Function Penuh(Rear: Integer): boolean;
     {I.S: Penunjuk rear dalam keadaan terdefinisi}
     {F.S: Mengecek indeks penunjuk rear bernilai max atau tidak }
     begin
          Penuh:=false;
          if (Rear=max) then
               penuh:=true;
     end;

     Function SatuElemen(Rear: Integer): boolean;
     {I.S: penunjuk rear dalam keadaan terdefinisi}
     {F.S: Mengecek indeks rear bernilai 1 atau lebih}
     begin
          satuelemen:=false;
          if (Rear=1) then
               satuelemen:=true;
     end;


     Procedure InputElemen (var Elemen: data);
     {I.S: Elemen dibaca dari piranti masukan}
     {F.S: Elemen disimpan kedalam memori komputer}
     begin
          gotoxy (25,5); write (' -----------Enqueue Data---------- ');
          gotoxy (25,7); write (' Masukan Nama       : ');readln (elemen.nama);
          gotoxy (25,8); write (' Masukan NIM        : ');readln (elemen.nim);
          gotoxy (25,9); write (' Masukan Kota       : ');readln (elemen.kota);
          gotoxy (25,10);write (' Masukan Lama Sewa  : ');readln (elemen.lama);
          gotoxy (25,11);write (' Masukan tipe mobil : ');readln (elemen.tipe);
          gotoxy (25,13);writeln (' ------------------------------- ');
     end;

     
     Procedure CetakElemen (Elemen: data);
     {I.S: Elemen dibaca dari piranti masukan}
     {F.S: Elemen disimpan kedalam memori komputer}
     begin
          gotoxy (25,5); writeln (' ---------Dequeue Data----------- ');
          gotoxy (25,7); writeln (' Nama             : ',elemen.nama);
          gotoxy (25,8); writeln (' NIM              : ',elemen.nim);
          gotoxy (25,9); writeln (' Kota             : ',elemen.kota);
          gotoxy (25,10);writeln (' Lama Sewa        : ',elemen.lama);
          gotoxy (25,11);writeln (' Tipe mobil       : ',elemen.tipe);
          gotoxy (25,13);writeln (' ------------------------------- ');
     end;

     Procedure PUSH (var Queue: LarikQueue; Rear: integer; Elemen: data);
     {I.S: Queue dan front sudah terdefinisi}
     {F.S: Menambahkan elemen kedalam Queue}
     begin
          Queue[rear].nama:=elemen.nama;
          Queue[rear].nim :=elemen.nim;
          Queue[rear].kota:=elemen.kota;
          Queue[rear].lama:=elemen.lama;
          Queue[rear].tipe:=elemen.tipe;
     end;

     Procedure POP (var Queue: LarikQueue; Front: integer; var Elemen: data);
     {I.S: Queue dan front sudah terdefinisi}
     {F.S: Mengeluarkan data dari Queue untuk kemudian disimpan kedalam elemen}
     begin
          elemen.nama:=Queue[front].nama;
          elemen.nim :=Queue[front].nim;
          elemen.kota:=Queue[front].kota;
          elemen.lama:=Queue[front].lama;
          elemen.tipe:=Queue[front].tipe;
     end;

     Procedure GeserData (var Queue: LarikQueue; var Front,Rear: integer);
     {I.S: Queue, front dan rear terdefinisi}
     {F.S: memindahkan posisi rear dan data ke-i ke posisi i-1}
     var
          Bantu: integer;
     begin
          Bantu:=front;
          repeat
            begin
                 Queue[bantu]:=Queue[bantu+1];
                 bantu:=bantu+1;
            end
          until (bantu=rear);
          rear:=rear-1;
     end;


     Procedure Enqueue (var Queue: LarikQueue; var Front, Rear : integer; Elemen : Data);
     {I.S: Queue, front, rear dan elemen terdefinisi}
     {F.S: Menambahkan elemen kedalam larik Queue}
     begin

          if (not penuh(rear)) then
             begin
                  N_antrian:=N_antrian+1;
                  InputElemen(Elemen);
                  if (kosong(rear)) then
                    begin
                         front:=1;
                         rear:=1;
                    end
                  else
                      rear:=rear+1;

                  Push (Queue,Rear,Elemen);
             end
          else
             begin
                  gotoxy (20,8); writeln ('Tidak bisa melakukan enqueue! Antrian Penuh!');
          end;
     end;

     Procedure Dequeue (var Queue: LarikQueue; var Front, Rear : integer; var Elemen : Data);
     {I.S: Queue, front dan rear terdefinisi}
     {F.S: Mengeluarkan data yang ada di indeks front ke elemen }
     begin
          if (not kosong(rear)) then
             begin
                  N_antrian:=N_antrian-1;
                  POP (Queue,Front,Elemen);
                  CetakElemen(Elemen);
                  if (SatuElemen(rear)) then
                     begin
                          front:=0;
                          rear:=0;
                     end
                  else
                     begin
                          GeserData (Queue,Front,Rear);
                  end;
             end
          else
             begin
                  gotoxy (25,6); Writeln ('Dequeue gagal, queue kosong!');
          end;
     end;

     Procedure pencarian_nim (Queue : LarikQueue; Front,Rear : Integer; carinim: string );
  {I.S: Melakukan pencarian unik terhadap nim}
  {F.S: Menampilkan hasil pencarian jika data ditemukan}
     var
          ketemu: boolean;
          bantu: integer;

     begin
          if (kosong(rear)) then
             begin
                 gotoxy (19,5); writeln ('Pencarian NIM');
                 gotoxy (19,6); writeln ('----------------------------------------');
                 gotoxy (19,13);writeln ('Antrian kosong!');
                 gotoxy (19,14);writeln ('----------------------------------------');
             end
          else
             begin
                  gotoxy (19,5); writeln ('Pencarian NIM');
                  gotoxy (19,6); writeln ('----------------------------------------');
                  gotoxy (19,14);writeln ('----------------------------------------');
                  gotoxy (19,7); write   ('Masukan Nim dicari : '); readln(carinim);

                  ketemu:=false;
                  bantu:=front;
                  while (not kosong(rear)) and ((bantu<>rear+1) and (not ketemu)) do
                  begin
                       if (Queue[bantu].nim=carinim) then
                         begin
                              ketemu:=true;
                         end
                       else
                         begin
                              bantu:=bantu+1;
                       end;
                  end;

            if (ketemu) then
                    begin
                         gotoxy (19,9); writeln ('NIM        : ',Queue[bantu].nim);
                         gotoxy (19,10);writeln ('Nama       : ',Queue[bantu].nama);
                         gotoxy (19,11);writeln ('Kota       : ',Queue[bantu].kota);
                         gotoxy (19,12);writeln ('Lama Sewa  : ',Queue[bantu].lama);
                         gotoxy (19,13);writeln ('Tipe Mobil : ',Queue[bantu].tipe);
                    end
            else
                    begin
                gotoxy (19,13);writeln('Tidak ditemukan penyewa dengan NIM "',carinim,'"');
            end;
          end;
          gotoxy (19,15);write('Tekan (y) untuk kembali : '); readln(menu);
     end;


     Procedure pencarian_nama (Queue : LarikQueue; Front,Rear: integer; nama_dicari : string);
     {I.S: Melakukan pencarian data tidak unik terhadap nama penyewa}
     {F.S: Menampilkan seluruh data hasil pencarian yang mempunyai kecocokan}
     var
          x,y,bantu : integer;
          ketemu : boolean;
     begin
          if (kosong(rear)) then
            begin
                 gotoxy (19,5); writeln ('Pencarian Nama');
                 gotoxy (19,6); writeln ('----------------------------------------');
                 gotoxy (19,7); write   ('Antrian Kosong! ');
                 gotoxy (19,15);writeln ('----------------------------------------');
                 gotoxy (19,16);write   ('Tekan (y) untuk kembali : '); readln(menu);
            end
          else
            begin
                 x:=10;
                 y:=7;
                 bantu:=front;
                 ketemu:=false;

                 gotoxy (19,5); writeln ('Pencarian Nama');
                 gotoxy (19,6); writeln ('----------------------------------------');
                 gotoxy (19,15);writeln ('----------------------------------------');
                 gotoxy (19,7); write   ('Masukan nama yang dicari : ');readln(nama_dicari);
                 clrscr;

                 gotoxy (10,3); writeln ('Pencarian Nama');
                 gotoxy (10,4); writeln ('------------------------------------------------------------------');
                 gotoxy (10,5); writeln ('| NIM       | Nama        | Kota      | Lama Sewa | Tipe Mobil   |');
                 gotoxy (10,6); writeln ('------------------------------------------------------------------');

                 while ((not kosong(rear)) and (bantu<>rear+1)) do
                 begin
                    if (Queue[bantu].nama=nama_dicari) then
                      begin
                           gotoxy (x,y);    writeln ('| ',Queue[bantu].nim);
                           gotoxy (x+12,y); writeln ('| ',Queue[bantu].nama);
                           gotoxy (x+26,y); writeln ('| ',Queue[bantu].kota);
                           gotoxy (x+38,y); writeln ('| ',Queue[bantu].lama,' hari');
                           gotoxy (x+50,y); writeln ('| ',Queue[bantu].tipe);
                           gotoxy (x+65,y); writeln ('|');
                           y:=y+1;
                           ketemu:=true;
                      end;
                    bantu:=bantu+1;
                 end;
                 if (ketemu) then
                   begin
                       gotoxy (x,y);writeln ('------------------------------------------------------------------');
                       gotoxy (x,y+1);write('Pencarian Selesai, tekan (y) untuk kembali : '); readln(menu);
                   end
                 else
                   begin
                       gotoxy (10,8); writeln ('Nama yang anda cari tidak ditemukan di antrian!');
                       gotoxy (10,9);writeln ('------------------------------------------------------------------');
                       gotoxy (10,10);write('Pencarian Selesai, tekan (y) untuk kembali : '); readln(menu);
                 end;
          end;
     end;


     Procedure TampilQueue (Queue : LarikQueue; Front,Rear: integer);
     {I.S: Queue, front dan rear sudah terdefinisi }
     {F.S: Menampilkan seluruh isi antrian}
     var
          x,y,bantu : integer;
     begin
          if (kosong(rear)) then
            begin
                 gotoxy (19,5); writeln ('Tabel isi Antrian');
                 gotoxy (19,6); writeln ('----------------------------------------');
                 gotoxy (19,7); write   ('Antrian Kosong! ');
                 gotoxy (19,15);writeln ('----------------------------------------');
                 gotoxy (19,16);write   ('Tekan (y) untuk kembali : '); readln(menu);
            end
          else
            begin
                 x:=10;
                 y:=7;
                 bantu:=front;
                 clrscr;

                 gotoxy (10,3); writeln ('Daftar Isi Antrian');
                 gotoxy (10,4); writeln ('------------------------------------------------------------------');
                 gotoxy (10,5); writeln ('| NIM       | Nama        | Kota      | Lama Sewa | Tipe Mobil   |');
                 gotoxy (10,6); writeln ('------------------------------------------------------------------');

                 while ((not kosong(rear)) and (bantu<>rear+1)) do
                 begin
                      gotoxy (x,y);    writeln ('| ',Queue[bantu].nim);
                      gotoxy (x+12,y); writeln ('| ',Queue[bantu].nama);
                      gotoxy (x+26,y); writeln ('| ',Queue[bantu].kota);
                      gotoxy (x+38,y); writeln ('| ',Queue[bantu].lama,' hari');
                      gotoxy (x+50,y); writeln ('| ',Queue[bantu].tipe);
                      gotoxy (x+65,y); writeln ('|');
                      y:=y+1;
                      bantu:=bantu+1;
                 end;
                 gotoxy (x,y);writeln ('------------------------------------------------------------------');
                 gotoxy (x,y+1);write('Tekan (y) untuk kembali : '); readln(menu);
          end;
     end;


     Procedure MenuQueue (var menu:char);
     {I.S: menu dibaca dari piranti masukan}
     {F.S: menampilkan daftar menu ke program utama }
     begin
          gotoxy(1,0);writeln  ('Queue by @hadiPranoto_ ');
          
          gotoxy(25,5);writeln  ('=================================');
          gotoxy(25,6);writeln  (' Program Antrian Penyewaan Mobil ');
          gotoxy(25,7);writeln  ('=================================');
          gotoxy(25,8);writeln  ('          Isi Antrian : ', N_antrian);
          gotoxy(25,9);writeln  (' 1. EnQueue');
          gotoxy(25,10);writeln (' 2. DeQueue');
          gotoxy(25,11);writeln (' 3. Pencarian NIM');
          gotoxy(25,12);writeln (' 4. Pencarian Nama');
          gotoxy(25,13);writeln (' 5. Menampilkan Isi Antrian');
          gotoxy(25,14);writeln (' 0. Exit');
          gotoxy(25,15);writeln ('=================================');
          gotoxy(25,16);write   (' Input Menu : ');readln (menu);
          
          case menu of
               '1': begin
                       clrscr;
                       EnQueue(Queue,Front,Rear,Elemen);
                       gotoxy (26,15);write (' Tekan (y) untuk kembali : ');readln (lagi);
                    end;

               '2': begin
                       clrscr;
                       DeQueue(Queue,Front,Rear,Elemen);
                       gotoxy (26,15);write (' Tekan (y) untuk kembali : ');readln (lagi);
                    end;

               '3': begin
                       clrscr;
                       Pencarian_nim(Queue,Front,Rear,carinim);
                    end;

               '4': begin
                       clrscr;
                       Pencarian_nama(Queue,Front,Rear,carinama);
                    end;

               '5': begin
                       clrscr;
                       TampilQueue (Queue,Front,Rear);
                    end;
          end;
     end;

begin
     Inisialisasi(Front,Rear);
     N_antrian:=0;

     Repeat
       begin
            clrscr;
            MenuQueue(menu);
       end
     Until ((lagi='t') or (lagi='T')) or (menu='0');

end.

Tidak ada komentar:

Posting Komentar