Sabtu, 23 Mei 2015

pascal queue parkir

Program SIMULASI_PARKIR;

  uses crt;

  const Terus = 'Tekan sembarang tombol untuk terus';

  type Str10  = string[10];
       Antri  = ^simpul;
       Simpul = record
                  Info    : Str10;
                  Berikut : Antri
                end;

  var  Depan,
       Belakang    : Antri;
       Pilih,
       P           : char;
       Keterangan  : string;
       No_Plat     : Str10;


procedure INISIALISASI (var Front, Rear: Antri);

  begin
    new(Front);
    Front^.Info := chr(0);
    Front^.Berikut := Front;
    Rear := Front
  end;


procedure MASUK (var Front, Rear : Antri;
                       No_Plat : Str10);
  var Baru : Antri;

  begin
    new(Baru);
    Baru^.Info := No_Plat;
    Baru^.Berikut := Front;
    Rear^.Berikut := Baru;
    Rear := Baru
  end;


procedure KELUAR
  (var Front, Rear : Antri;
                        NO_Plat : Str10);
  var Mobil, Bantu, TM : Antri;
      P                : char;
      Nomor            : integer;


function ADA_MOBIL
  (var Lok : Antri; D : Antri;
                         X : Str10) : boolean;
  var Ada : boolean;

  begin
    Ada := false;
    Lok := D^.Berikut;
    repeat
      if Lok^.Info = X then
         Ada := true
       else
         Lok := Lok^.Berikut
    until Ada or (Lok = D);
    ADA_MOBIL := Ada
  end;

  begin
    if not (ADA_MOBIL(Mobil, Front, No_Plat)) then
       begin
         gotoxy(40,9);
         writeln('MOBIL YANG DIMAKSUD TIDAK ADA');
         gotoxy(40,11);write(Terus);
         P := readkey
       end
    else
       if Mobil = Front^.Berikut then

          begin
            Front^.Berikut := Mobil^.Berikut;
            dispose(Mobil)
          end

       else

          begin
            Bantu := Front;
            clrscr;
            write ('Mobil yang dikeluarkan ');
            writeln('sementara:');
            write('------------------------');
            writeln('----------'); writeln;
            Nomor := 1;
            repeat
              Bantu := Bantu^.Berikut;
              write('Mobil ke', Nomor:3);
              write(',    Nomor Plat: ');
              writeln(Bantu^.Info);
              inc(Nomor);
            until Bantu^.Berikut^.Info = No_Plat;
            writeln; write(Terus);
            P := readkey;
            Bantu^.Berikut := Mobil^.Berikut;
            dispose(Mobil)
          end
  end;


procedure BACA_MOBIL (Front : Antri);
  var Bantu : Antri;
      Nomor : integer;
      P     : char;

  begin
    Bantu := Front^.Berikut;
    if Bantu = Front then

       begin
         gotoxy(1,4);
         write('TEMPAT PARKIR KOSONG'); writeln
       end
    else

       begin
         Nomor := 1;
         repeat
           write('Mobil ke',Nomor:3,',   Nomor');
           writeln(' Plat: ',Bantu^.Info);
           Bantu := Bantu^.Berikut;
           inc(Nomor)
         until Bantu = Front
       end
  end;
  begin

     INISIALISASI(Depan,Belakang);


     repeat
       clrscr; writeln('SIMULASI TEMPAT PARKIR');

       write('---------------------------------');
       writeln('-------------');
       writeln; writeln('    M : Mobil Masuk');
       writeln('    K : Mobil Keluar');
       writeln('    C : Cetak Data Mobil');
       writeln('    S : Selesai');
       writeln; writeln('    PILIH SALAH SATU: ');


       repeat
         gotoxy(23,10); writeln('    ');
         gotoxy(23,10); Pilih := upcase(readkey);
       until Pilih in ['M','K','S','C'];


       case Pilih of
        'M' : Keterangan := 'MOBIL  MASUK';
        'K' : Keterangan := 'MOBIL KELUAR';
        'C' : begin
                clrscr;
                   write('Data Mobil di ');
                   writeln('Tempat Parkir');
                   write('--------------');
                   writeln('-------------'); writeln;
                BACA_MOBIL(Depan); writeln;
                   write('Tekan sembarang tombol ');
                   write('untuk kembali ke menu');
                P := readkey;
              end;
        'S' : begin
                clrscr;
                   writeln('SIMULASI SELESAI');
                   writeln('----------------')
              end

       end;
       if Pilih in ['M','K'] then
          begin
            gotoxy(40,5); writeln(Keterangan);
            gotoxy(40,6); writeln('------------');
               gotoxy(40,7);
               write('Nomor plat mobil: ');
                          readln(No_Plat);
               if Pilih = 'M' then
                  MASUK(Depan, Belakang,No_Plat)
               else
                  KELUAR(Depan,Belakang,No_Plat)
          end
     until Pilih = 'S'
  end.

Tidak ada komentar:

Posting Komentar