iseng buat
program antrian_dufan;
{$APPTYPE CONSOLE}
uses
SysUtils;
const max = 10;
type A = array[1..max] of string;
B = array[1..max] of string;
function ispenuh(r : integer) : boolean;
begin
if (r = max) then
ispenuh := true
else ispenuh := false;
end;
function iskosong(f, r : integer) : boolean;
begin
if (f=0) and (r=0) then
iskosong := true
else iskosong := false;
end;
procedure masukantrian1(var Qa : A; var fa, ra : integer; nama : string);
begin
inc(ra);
Qa[ra] := nama;
if (fa = 0) then fa := 1;
end;
procedure masukantrian2(var Qa : B; var fb, rb : integer; nama : string);
begin
inc(rb);
Qa[rb] := nama;
if (fb = 0) then fb := 1;
end;
procedure masukpengunjung(var Qa : A; var Qb : B; var fa, ra, fb, rb : integer);
var nama : string;
begin
if ispenuh(ra) and ispenuh(rb) then
writeln('Antrian Penuh..!!!')
else begin
write('Masukan Nama Pengunjung :'); readln(nama);
while (nama <> '') do
begin
if ispenuh(ra) and ispenuh(rb) then
writeln('Antrian Penuh..!!!')
else if (ra <> max) then
Masukantrian1(Qa, fa, ra, nama)
else masukantrian2(Qb, fb, rb, nama);
write('Masukan Nama Pengunjung :'); readln(nama);
end;
end;
end;
procedure POP(var Qa : A; var f, r : integer; i : integer);
begin
if (i=1) then
begin
writeln;
writeln('Yang masuk wahana :');
writeln('[',i,'] ',Qa[f]);
end
else writeln('[',i,'] ',Qa[f]);
inc(f);
end;
procedure TampilAntrian(var Qa : A; var Qb : B; var fa, ra, fb, rb : integer);
var i : integer;
begin
if not iskosong(fa, ra) then
begin
for i := ra downto fa do
begin
if (i = fa) then
write(' | ',Qa[i],' |')
else write(' | ',Qa[i])
end;
end;
writeln;
if not iskosong(fb, rb) then
begin
for i := fb to rb do
begin
if (i = rb) then
write(' | ',Qb[i],' |')
else write(' | ',Qb[i])
end;
end;
end;
procedure geser1(var Qa : A; var fa, ra : integer);
var i : integer;
begin
for i := fa to ra do
begin
Qa[i-4] := Qa[i];
end;
dec(fa,4);
dec(ra,4);
end;
procedure geser2(var Qa : A; var Qb : B; var fa, ra, fb, rb : integer);
var i : integer;
j : integer;
begin
j := ra;
for i:= j+1 to max do
begin
if not iskosong(fb, rb) then
begin
Qa[i] := Qb[fb];
inc(fb);
if (fb > rb) then
begin
fb := 0; rb := 0;
end;
inc(ra);
end;
end;
if not iskosong(fb, rb) then
begin
for i:= fb to rb do
begin
Qb[i-4] := Qb[i];
end;
dec(fb,4);
dec(rb,4);
end;
end;
procedure geser(var Qa : A; var Qb : B; var fa, ra, fb, rb : integer);
begin
geser1(Qa, fa, ra);
if not iskosong(fb, rb) then
geser2(Qa, Qb, fa, ra, fb, rb);
end;
Procedure MasukKeWahana(var Qa : A; var Qb : B; var fa, ra, fb, rb : integer);
var i : integer;
begin
if iskosong(fa, ra) then
writeln('Antrian Kosong..!!!')
else begin
for i := 1 to 4 do
begin
if (ra >= i) then
POP(Qa, fa, ra, i);
end;
writeln;
TampilAntrian(Qa, Qb, fa, ra, fb, rb);
writeln;
if iskosong(fa, ra) then
writeln('Antrian kosong')
else begin
writeln('Antrian Bergeser');
geser(Qa, Qb, fa, ra, fb, rb);
end;
end;
end;
var Qa : A;
Qb : B;
fa, ra, fb, rb, pil : integer;
begin
fa := 0; ra := 0; fb := 0; rb := 0;
repeat
writeln;
writeln;
writeln('Tampilan Menu :');
writeln('[1] Masuk Pengunjung ke antrian');
writeln('[2] Pengunjung keluar ke wahana permainan');
writeln('[3] Tampilkan antrian pengunjung');
writeln('[4] Exit program');
write('Masukan pilihan anda :'); readln(pil);
case pil of
1 : MasukPengunjung(Qa, Qb, fa, ra, fb, rb);
2 : MasukKeWahana(Qa, Qb, fa, ra, fb, rb);
3 : TampilAntrian(Qa, Qb, fa, ra, fb, rb);
end;
until pil = 4;
end.