Parkir Mobil Menggunakan Antrian
membuat parkir mobil menggunakan antrian langsung saja ini codingnya:
program antrian_mobil;
uses crt;
const
MAX=5;
NULL=0;
type
tipedata=string;
antrian = record
data:array[1..MAX]of tipedata;
rear:integer;
end;
{procedure untuk memberikan nilai awal antrian kosong}
procedure inisialisasi(var Q:antrian);
var x:integer;
begin
Q.rear:=Null;
for x:=1 to MAX do Q.data[x]:=' ';
end;
{procedure untuk melakukan proses delay}
procedure delayed;
var delayTime:integer;
begin
for delayTime:=1 to 100 do delay(500);
end;
{function untuk memeriksa apakah antrian masih ada ruang kosong}
function kosong(Q:antrian):boolean;
begin
kosong:=((Q.rear=NULL)or(Q.rear<MAX));
end;
{procedure untuk mencetak tampilan simulasi}
procedure SimScreen(var Q:antrian;status:string);
var
x,posX:integer;
begin
clrscr;
writeln('------------------------------');
writeln('| Antrian Pada Parkir Mobil |');
writeln('------------------------------');writeln;
writeln('Status: ',status);writeln;writeln;
if Q.rear=Null then
begin
writeln;writeln;
end
else
begin
writeln(' |Front');
writeln(' v');
end;
writeln('========================================================');
for x:=1 to MAX do write('\ ',Q.data[x],' ');
writeln('<');
writeln('========================================================');
posX:=5;
if Q.rear>1 then for x:=2 to Q.rear do posX:=posX+11;
if Q.rear<>null then
begin
gotoxy(posx,13);write('^');
gotoxy(posx,14);write('|Rear');
end;
end;
{fungsi untuk memeriksa data ada pada antrian}
function exist(Q:antrian;data:tipedata):boolean;
var
x:integer;
begin
exist:=false;
for x:=1 to MAX do
if Q.data[x]=data then
begin
exist:=true;
end;
end;
{procedure untuk menambahkan data pada akhir antrian}
procedure Enqueue(var Q:antrian; data:tipedata);
begin
if kosong(Q) then
begin
Q.rear:=Q.rear+1;
Q.data[Q.rear]:=data;
end;
end;
{procedure melakukan perulangan sampai ditemukan data yang cocok pada antrian pertama dan selanjutnya dihapus}
procedure Dequeue(var Q:antrian; data:tipedata);
var
temp:tipedata;
x,y,rear_temp:integer;
hapus:boolean;
begin
if exist(Q,data) then
begin
rear_temp:=Q.rear;
for x:=1 to rear_temp do
begin
hapus:=false;
if Q.data[1]=data then
begin
Q.data[1]:=' ';
Q.rear:=Q.rear-1;
hapus:=true;
end;
if hapus then
begin
temp:=Q.data[1];
for y:=1 to Q.rear do
Q.data[y]:=Q.data[y+1];
Q.data[rear_temp]:=temp;
rear_temp:=rear_temp-1;
end
else
begin
temp:=Q.data[1];
for y:=1 to rear_temp-1 do
begin
Q.data[y]:=Q.data[y+1];
end;
Q.data[y+1]:=temp;
end;
SimScreen(Q,'Mengganti posisi.');
delayed;
end;
end;
end;
{Procedure Untuk menampilkan menu}
procedure ShowMenu(var Q:antrian;var pil:char);
var
inputMobil:string;
x:integer;
begin
if kosong(Q) then
begin
gotoxy(1,16);
write('1. Mobil Masuk');
gotoxy(1,17);
write('2. Mobil Keluar');
end
else
begin
gotoxy(1,17);
write('2. Mobil Keluar');
end;
gotoxy(1,18);
write('3. Exit');
gotoxy(1,19);
write('Pilihan: ');pil:=readkey;
if (pil='1')or(pil='2') then
begin
SimScreen(Q,'Sukses! Menunggu input...');
gotoxy(1,16);
write('No. Kendaraan: ');
readln(inputMobil);
for x:=1 to length(inputMobil) do inputMobil[x]:=upcase(inputMobil[x]);
if pil='1' then
begin
Enqueue(Q,inputMobil);
SimScreen(Q,'Sukses! Data telah masuk.');
end
else if pil='2' then
begin
Dequeue(Q,inputMobil);
SimScreen(Q,'Sukses! Data telah dihapus.');
end;
end;
end;
{Program Utama}
var
Q:antrian;
pil:char;
begin
inisialisasi(Q);
SimScreen(Q,'Inisialisasi...');
delayed;
SimScreen(Q,'Sukses! Menunggu input...');
repeat
ShowMenu(Q,pil);
until pil='3';
end.
uses crt;
const
MAX=5;
NULL=0;
type
tipedata=string;
antrian = record
data:array[1..MAX]of tipedata;
rear:integer;
end;
{procedure untuk memberikan nilai awal antrian kosong}
procedure inisialisasi(var Q:antrian);
var x:integer;
begin
Q.rear:=Null;
for x:=1 to MAX do Q.data[x]:=' ';
end;
{procedure untuk melakukan proses delay}
procedure delayed;
var delayTime:integer;
begin
for delayTime:=1 to 100 do delay(500);
end;
{function untuk memeriksa apakah antrian masih ada ruang kosong}
function kosong(Q:antrian):boolean;
begin
kosong:=((Q.rear=NULL)or(Q.rear<MAX));
end;
{procedure untuk mencetak tampilan simulasi}
procedure SimScreen(var Q:antrian;status:string);
var
x,posX:integer;
begin
clrscr;
writeln('------------------------------');
writeln('| Antrian Pada Parkir Mobil |');
writeln('------------------------------');writeln;
writeln('Status: ',status);writeln;writeln;
if Q.rear=Null then
begin
writeln;writeln;
end
else
begin
writeln(' |Front');
writeln(' v');
end;
writeln('========================================================');
for x:=1 to MAX do write('\ ',Q.data[x],' ');
writeln('<');
writeln('========================================================');
posX:=5;
if Q.rear>1 then for x:=2 to Q.rear do posX:=posX+11;
if Q.rear<>null then
begin
gotoxy(posx,13);write('^');
gotoxy(posx,14);write('|Rear');
end;
end;
{fungsi untuk memeriksa data ada pada antrian}
function exist(Q:antrian;data:tipedata):boolean;
var
x:integer;
begin
exist:=false;
for x:=1 to MAX do
if Q.data[x]=data then
begin
exist:=true;
end;
end;
{procedure untuk menambahkan data pada akhir antrian}
procedure Enqueue(var Q:antrian; data:tipedata);
begin
if kosong(Q) then
begin
Q.rear:=Q.rear+1;
Q.data[Q.rear]:=data;
end;
end;
{procedure melakukan perulangan sampai ditemukan data yang cocok pada antrian pertama dan selanjutnya dihapus}
procedure Dequeue(var Q:antrian; data:tipedata);
var
temp:tipedata;
x,y,rear_temp:integer;
hapus:boolean;
begin
if exist(Q,data) then
begin
rear_temp:=Q.rear;
for x:=1 to rear_temp do
begin
hapus:=false;
if Q.data[1]=data then
begin
Q.data[1]:=' ';
Q.rear:=Q.rear-1;
hapus:=true;
end;
if hapus then
begin
temp:=Q.data[1];
for y:=1 to Q.rear do
Q.data[y]:=Q.data[y+1];
Q.data[rear_temp]:=temp;
rear_temp:=rear_temp-1;
end
else
begin
temp:=Q.data[1];
for y:=1 to rear_temp-1 do
begin
Q.data[y]:=Q.data[y+1];
end;
Q.data[y+1]:=temp;
end;
SimScreen(Q,'Mengganti posisi.');
delayed;
end;
end;
end;
{Procedure Untuk menampilkan menu}
procedure ShowMenu(var Q:antrian;var pil:char);
var
inputMobil:string;
x:integer;
begin
if kosong(Q) then
begin
gotoxy(1,16);
write('1. Mobil Masuk');
gotoxy(1,17);
write('2. Mobil Keluar');
end
else
begin
gotoxy(1,17);
write('2. Mobil Keluar');
end;
gotoxy(1,18);
write('3. Exit');
gotoxy(1,19);
write('Pilihan: ');pil:=readkey;
if (pil='1')or(pil='2') then
begin
SimScreen(Q,'Sukses! Menunggu input...');
gotoxy(1,16);
write('No. Kendaraan: ');
readln(inputMobil);
for x:=1 to length(inputMobil) do inputMobil[x]:=upcase(inputMobil[x]);
if pil='1' then
begin
Enqueue(Q,inputMobil);
SimScreen(Q,'Sukses! Data telah masuk.');
end
else if pil='2' then
begin
Dequeue(Q,inputMobil);
SimScreen(Q,'Sukses! Data telah dihapus.');
end;
end;
end;
{Program Utama}
var
Q:antrian;
pil:char;
begin
inisialisasi(Q);
SimScreen(Q,'Inisialisasi...');
delayed;
SimScreen(Q,'Sukses! Menunggu input...');
repeat
ShowMenu(Q,pil);
until pil='3';
end.
0 komentar: