Thursday, November 5, 2009

Membuat program quene dengan bahasa pascal (program antrian kereta api,antrian loket karcis,antrian pendaftaran spmb,dll)

Pada artike kali ini kita akan bahsa bagaimana cara membuat program antrian (quene) dengan bahasa pascal.Anda banyak contoh antrian yang bisa kita implementasikan pada program ini akan tetapi sebagai contoh kita akan gunakan contoh pada sistem antrian pendaftaran SPMB.

Ada beberapa hal yang akan kita basas pada program ini yaitu :

  1. Cetak Antrian
  2. Tambah Antrian Pendaftar
  3. Ambil Orang yang selesai daftar'
  4. Cari Seseorang dalam Antrian
  5. Seseorang meninggalkan antrian
  6. Seseorang menyerobot antrian
  7. Loket Pendaftaran ditutup

Pada tiap pembahasan tersebut kita akan gunakan procedur tertentu.Langsung saja untuk mebuat program antrian kita gunakan :

Inilisasi awal list

 Procedure baru(x: string; var tunjuk: antrian) ;
   begin
 new(tunjuk);
 tunjuk^.isi := x;
 tunjuk^.next := nil;
   end;



function cek suatu list kosong atau tidak



function isempty(depan,belakang:antrian):boolean;
   begin
        isempty:= (depan=nil) and (belakang=nil)=true
   end;


Sedangkan untuk program pada sistem antrian SPMB adalah seperti dibawah ini :



program antrian_SPMB;
 uses  wincrt;
type  antrian = ^node;
    node = record
  isi : string[10];
  next : antrian;
         end;
            
var    dpn, blk : antrian;
        pointer  : string;
        x        : string;
        cr       : string;
        pil      :char;
{============================================================}
{Procedure identitas: untuk menampilkan identitas kita}
 procedure identitas;
   begin
        writeln('+-----------------------------------+');
        writeln('+    Nama : Riky Bagus Muhajir      +');
        writeln('+    NIM  : M0508117                +');
        writeln('+  Program Antrian Pendaftaran SPMB +');
        writeln('+-----------------------------------+');
   end;
{============================================================}
{procedure baru digunakan untuk inisialisasi awal list}
 Procedure baru(x: string; var tunjuk: antrian) ;
   begin
 new(tunjuk);
 tunjuk^.isi := x;
 tunjuk^.next := nil;
   end;
{============================================================}
{function isempty digunakan untu mengecek apakah suatu list kosong atau tidak}
function isempty(depan,belakang:antrian):boolean;
   begin
        isempty:= (depan=nil) and (belakang=nil)=true
   end;
{============================================================}
{Fucntion cari digunakan untuk mencari mengecek apakah seseorang ada pada antrian atau tidak}
Function cari(x: string; depan:antrian) : boolean;
var tunjuk : antrian;
    ada,kosong: boolean;         
   begin
        ada := false; tunjuk := depan;
        kosong:= isempty(dpn,blk);
           if kosong=false then begin
       while (tunjuk <> nil) and (ada=false) do
                  if tunjuk^.isi = x then
                     ada := true
                  else
                     tunjuk := tunjuk^.next;                   
              end;
         cari:=ada;
   end;
{============================================================}
{procedure tambahantri digunakan untuk menambakan jumlah orang dalam antrian}
procedure tambahantri(var belakang:antrian);                   
var x:string;
    tunjuk:antrian;
   begin
        write('Masukan nama orang yang mau masuk antrian : ');
        readln(x);
        baru(x,tunjuk);
        belakang^.next:=tunjuk;
        belakang:=tunjuk;
   end;
{============================================================}
{prosedure hapusdpn diguakan untuk menghapus list dalam antrian}
procedure hapusdpn(var depan,belakang:antrian);
var bantu:antrian;           
   begin
        if isempty(depan,belakang) then
           writeln('Antrian Kosong')
        else if depan=belakang then
           begin
                depan:=nil;belakang:=nil
           end
        else
           begin
                bantu:=depan^.next;
                depan:=bantu;
           end;
   end;
{============================================================}
 {prosedure slesaiantri digunakan untuk mengambil orang yang telah selesai antri}
 procedure slesaiantri(var depan,belakang:antrian;var 
 x:string);
   begin    
        if dpn=nil then
          x:='Antrian Kosong'
        else
            begin
                 x:=dpn^.isi;
                 hapusdpn(depan,belakang);
            end;
 end;
{============================================================}
{procedure hapusx digunakan utk mengambil seseorang dari antrian}
{sebagai contoh ketika seseorang ingin ketoilet atau capek setelah lama mengantri
maka iya meninggalkan antrian}
 procedure hapusx(var depan,belakang:antrian);
 var bantu,hapus:antrian;
     ada:boolean;
     y:string;
   begin
        write('Masukan nama orang yang mau meninggalkan   antrian : ');
        readln(y);
        if isempty(depan,belakang) then
            writeln('Antrian Kosong')
        else if depan=belakang then
            begin
                 depan:=nil;belakang:=nil
            end
        else
            begin
                 bantu:=depan;
                 hapus:=depan;
                 ada:=false;
                   while (bantu<>nil) do begin
                 if bantu^.isi=y then
                     if bantu=depan then
                         depan:=bantu^.next
                        else
                            hapus^.next:=bantu^.next;
                 hapus:=bantu;
                 bantu:=bantu^.next;
                  end;
            end;
 end;
 
{============================================================}
{ Procedure BuatAntrian untuk membangun antrian dengan input data secara interaktif}
 procedure buatantrian (var depan,belakang: antrian);
 Var c : char; tunjuk : antrian;i:integer;
    begin
         i:=0;                         
  depan := nil; belakang := nil;
  repeat           
           i:=i+1;
    write('masukan nama ke-',i,'            =');readln(x);
    baru(x,tunjuk);
    if  isempty(depan,belakang) then
             begin
              depan := tunjuk ;
              belakang := tunjuk;
             end
    else begin
              belakang^.next := tunjuk;
       belakang :=tunjuk;
                end;  
      repeat
  write('tambah data yang antri [Y/T] = ');
  readln(c);
             until c in ['T','t','y','Y'];
      until c in ['T','t'];
    end;
{============================================================}
{procedure sisiptengah digunakan untuk memasukkan seseorang yang menyerobot antrian}
procedure sisiptengah(var depan,belakang: antrian);
var  baru,bantu : antrian;
     x,y : string;
    begin
     write('Masukan nama orang yang menyerobot : ');readln(y);    
     write('menyerobot dibelakang ( masukan salah satu nama yang telah antri) : ');readln(x);
     bantu:=depan;
     while bantu^.next <> nil do
     begin
       if bantu^.isi= x then
       begin
        new(baru);
        baru^.isi := y;
        baru^.next:=bantu^.next;
        bantu^.next:=baru;
       end;
     bantu:=bantu^.next;
     end;
     end;
{============================================================}    
{Procedure Cetak untuk mencetak isi Antrian,pintu keluar antrian disebelah kanan dan
pintu masu antrian disebelah kiri}
procedure cetak(depan:antrian;var output:string);
          var bantu:antrian;y:string;
                                        
          begin
               bantu:=depan;
               output:='  Loket Pendaftaran';
              if isempty(dpn,blk) then output:='Antrian Kosong'
               else begin
                         while bantu<>nil do
                         begin
                               y:=bantu^.isi;
                               output:=y+'->>'+output;
                               bantu:=bantu^.next;
                         end;
                     output:='pintu masuk antrian  ->>'+output;
               end;                                      
          end;
{============================================================}
begin
screensize.y:=300;
identitas;
writeln;
writeln('=====================================');
writeln('     Antrian Awal Pendaftar SPMB     ');
writeln('Masukan data orang yang telah antri: ');
writeln('=====================================');
writeln;
buatantrian(dpn,blk);
repeat
      repeat
      {menu utama}
      writeln;
      writeln;
      writeln('            Simulasi:              ');
      writeln('     ANTRIAN PENDAFTARAN SPMB      ');
      writeln('-----------------------------------');
      writeln('[1] Buat Antrian Baru              '); 
      writeln('[2] Cetak Antrian                  ');
      writeln('[3] Tambah Antrian Pendaftar       ');
      writeln('[4] Ambil Orang yang selesai daftar');
      writeln('[5] Cari Seseorang dalam Antrian   ');
      writeln('[6] Seseorang meninggalkan antrian ');
      writeln('[7] Seseorang menyerobot antrian   ');
      writeln('[8] Loket Pendaftaran ditutup      ');
      writeln('-----------------------------------');
      write('Pilihan anda : ');pil:=readkey;writeln(pil);
      writeln;
      until (pil>='1') and (pil<='8');
      {case pil of mengacu pada menu pilihan yang akan mengaktifkan salah satu procedure  
       yang dipilih}
      case pil of
      '1' :begin
               buatantrian(dpn,blk);
               writeln;
               writeln;
               writeln;
           end;
      '2' :begin
               cetak(dpn,pointer);
               writeln(pointer);
               writeln;
               writeln;
               writeln;          
           end;                
      '3'  :begin            
               tambahantri(blk);
               writeln;   
               writeln('setelah ditambah antrian menjadi : ');            
               cetak(dpn,pointer);
               writeln(pointer);
               writeln;
               writeln;
               writeln;
            end;
      '4'  :begin
               slesaiantri(dpn,blk,x);          
               writeln('',x,' Telah selesai mendaftar,maka ia keluar dari antrian');
               writeln;
               writeln('Antrian menjadi :');            
               cetak(dpn,pointer);
               writeln(pointer);
               writeln;
               writeln;
               writeln;
                                    
         
            end;
      '5'  :begin
                write('Masukan nama orang  yang di cari : ');readln(cr);
                     if cari(cr,dpn)=true then
                        writeln('',cr,' ada dalam antrian')
                     else
                        writeln('',cr,' tidak ada dalam antrian');
                 writeln;
                 writeln;
                 writeln;
            end;
      '6'  :begin
                if not isempty(dpn,blk) then
                    begin
                      writeln('antrian awal');
                      cetak(dpn,pointer);
                      writeln(pointer);
                    
                      hapusx(dpn,blk);
                      writeln('Antrian Menjadi : ');
                      cetak(dpn,pointer);
                      writeln(pointer);
                      writeln;
                      writeln;
                      writeln;
                    end
                 else
                     writeln('Antrian Kosong');
            end;
      '7'  :begin
                writeln('Angtrian sebelum ada yang menyerobot');   
                cetak(dpn,pointer);
                writeln(pointer);
                writeln;
                sisiptengah(dpn,blk);
                writeln;
                writeln('Setelah ada yang menyerobot antrian menjadi :');   
                cetak(dpn,pointer);
                writeln(pointer);
                writeln;
                writeln;
                writeln;
            end;
      '8'  :begin
                  writeln('       Loket telah ditutup         ');
                  writeln('Antrian dilanjutkan hari berikutnya');
                  exit;
            end;
    
      end;
until (pil='8');
end.
end.


Apabila program di ata kita run maka akn menghasilkan output seperti dibawah ini :



OUTPUT PROGRAM

Sebagai contoh diawal antrian kita masukan input seperti dibawah ini :
Diantrian pertama kita masukan “RIKY” antrian kedua kita masukan”ROMA”,dan diantrian ketiga kita masukan “FIAN”.











image



Setelah kita inputkan data antrian awal seperti yangdicontohkan diatas kemuduian kita tekan enter maka akan keluar menu seperti dibawah ini :











image

setelah muncul menu program maka kita tingal pilih operasi yang kita inginkan
Bila pilihan kita masukkan angka 1 maka dilakukan pembuatan antrian awal baru
Jika pilihan kita masukkan angka 2 maka akan dilakukan program cetak antrian yang akan menghasilkan output spt dibawah ini :

image

Jika pilihan kita masukkan angka 3 maka akan dilakukan program tambah antrian.Procedure tambahantri akan menambahkan orang pada antrian dan ketika ditambahkan orang baru maka orng tersebut akan berada diurutan paling belakan dari antrian sebelumnya.Sebagai contoh kita akan tambahakan “BUDI” kedalam antrian yang sudah ada :

image

Jika pilihan kita masukkan angka 4 maka akan dilakukan program pengambilan list dari antrian.Procedure slesaiantri akan mengambil list yang masuk paling awal dalam antrian.Karena pada list yang kita buat diawal tadi “RIKY” masuk diurutan paling awal maka dia yang akan keluar paling awal juga.

image

Jika pilihan kita masukkan angka 5 maka akan dilakukan pencarian suatu data dari deretan list.Dalam hal ini kita misalkan pencarian seseorang didalam suatu antrian.Procedure cari akan mengecek satu demi satu data yang ada yang ada dalam antrian.Sebagai contoh kita akan mencari nama “FIAN”.Jika data yang kita cari ada dalam antrian maka :

image


Sedangkan jika data yang kita cari tidak ada dalam rangkaian maka : Misal kita akan cari nama “DEWI” dalam antrian,karena “DEWI” tidak ada dalam antrian diatas tadi maka :

image

Jika pilihan kita masukkan angka 6 maka akan dilakukan pengambilan data(nama)tertentu dari deretan antrian.Procedure hapusx akan mencari satu demi satu data yang akan kita hapus dari deretan antrian,jika data yang ingin kita hapus itu ada dalam antrian maka data tersebut akan dihapus.Sebagai contoh karena “FIAN” ingin pergi ketoilet maka ia kluar dari antrian :

image

Jika kita masukkan angka 7 maka akan dilakukan program penyrobotan dalam suatu antrian.Sebagai cotoh “DONY” akan menyerobot dibelakang “ROMA” maka:

image

Jika hari sudah sore maka tempat pendaftaran peserta SPMB ditutup dan untuk menutup tempat pendaftaran pilihan kita isi angka 8 :

image

Selamat mencoba..







20 comments:

Rizkyzone said...

pertamax..... sip kawan artikelnya.... nambah ilmu

Laksamana Embun said...

Kang saya jatuh cinta dengan semua artikel pemograman yang akang buat,, boleh kah saya bertukran link dengan blog in?

soft said...

wah, mas jago pemrograman ya, sip, dukung deh bwat karyanya, :D

Blackberry Application said...

artikelnya mantap, bisa berbagi dengan orang lain tentang pemrograman,

free Recipes said...

nice post friend, keep update , thnx

new games said...

berkunjung ke situsmu , artikelnya bagus bro,

kimbut said...

wah pas q lagi belajar pascal,
mkasih bro tutorialnya..
jadi terbantu nih..
komen balik ya,

joe said...

mantab ne sob post nya pas bgt ama yg q cari... thx.....


ditunggu komen balik nya...

Djakarta News said...

artikel yang berguna...top!

Affiliate Earn 50% Free said...

wuuaah.. rumit sekali.. just want to say that your blog is very cool

^_^

Laksamana Embun said...

Berhubung blum bljar bhsa ini jadi ngudeng nya baru dikit2..

Oia kang, feed blog akang rusak tuh, jadi setiap akang update saya ga bisa tahu.. Tolong di perbaiki...

Thanks

Anonymous said...

Thankz ea Bro,,
artikel ya..
co2k banged buat tugas akhir semester 1 ku...

pulsa murah said...

Kira2 yg paling mudah untuk pembuatan software pulsa apa yah?? Mungkin akang tertarik utk membahasnya.

Landavia said...

emang harus ada versi exenya biar gampang nyobanya

km bisa delphi?

Program kasir said...

dai nya keliatan jelas conto pembuatan prosedur nya...
tapi sukses..

Cahyo said...

wah, dah smester brpa nih?? ambil jursan apa? saya jg masih dpt matkul ttg pascal, baru sampe sorting n stack. mampir balik ke blog ku ya ?

Sewa Mobil Bali said...

saya seneng bgt baca artikel tau...itu bisa dibilang nambah ilmu...he..salam kenal...

Gusryan Zari Khamsya _ High Voltage Engineering said...

cooolllll brooo......
maksih ya.. bsa dcoba neh
salam kenal...

Kunjungi my bloQ…. ok
Andalas University
Faculty of Engineering
Electrical Engineering

Sewa Mobil Bandung said...

siippp infonya,,, ntar coba di aplikasikan,,,,

rental mobil di bandung said...

info yang bermanfaat thanks ea,,,,, salam.......