Aparkaleku-kudeaketa eta Zubi-txapelketaren Programa Pascal-en: Egitura eta Funtzioak
Zubi-txapelketa eta Aparkaleku-kudeaketa: Pascal programak
CASE aukera OF
'1': BEGIN
Writeln;
Write('Zenbaki identifikatzailea eman: ');
ReadLn(iEzabatzekoIdentifikadorea);
MaketaKendu(iEzabatzekoIdentifikadorea, sFitxIzen);
END;
'2': BEGIN
iZenbatZubiLehian := fniZenbatuZubiakLehian(sFitxIzen);
CASE iZenbatZubiLehian OF
0: BEGIN
Writeln('Dagoeneko lehiaketa bukaturik dago, ez da zubirik lehian geratzen');
END;
1: BEGIN
Writeln('Zubi bakarra geratzen da lehian, hau da zubi txapelduna:');
ZubiTxapeldunaZehaztu(sFitxIzen, rdZubiTxapelduna);
ZubiBatErakutsi(rdZubiTxapelduna);
WriteLn;
END;
ELSE
BEGIN
LehianDaudenZubiakErakutsi(sFitxIzen);
WriteLn;
Writeln('Txanda berri bati ekin!');
LehianDaudenZubieiKargaBerriaJarri(sFitxIzen);
END;
END;
END;
'3': BEGIN
iZenbatZubiLehian := fniZenbatuZubiakLehian(sFitxIzen);
CASE iZenbatZubiLehian OF
0: BEGIN
Writeln('Azken txandan zubi guztiak erori dira, lehiaketa irabazlerik gabe bukatu da');
END;
1: BEGIN
Writeln('Zubi bakarra geratzen da lehian!');
iIdentIrabazlea := fniZubiIrabazlea(sFitxIzen);
Writeln('Hau da zubi irabazlea: ', iIdentIrabazlea);
WriteLn;
END;
ELSE
BEGIN
Writeln(iZenbatZubiLehian, ' zubi lehian, lehiaketa ez da oraindik bukatu');
END;
END;
END;
END;{CASE}
IF aukera <> '0' THEN
BEGIN
cTeklaBatSakatu := ReadKey;
Write(cTeklaBatSakatu);
END;
UNTIL aukera = '0';
Writeln;
Writeln('Amaitzeko INTRO sakatu');
ReadLn;
END.
Aparkalekuen programa
PROGRAM Aparkalekuak;
Liburutegiak
USES Crt, SysUtils;
Konstanteak
CONST
ZENBAT_APARKALEKU = 100; { Parking-ak 100 aparkaleku-plaza ditu }
GAU_BATEN_KOSTUA = 15; { Gau bat igarotzearen kostua }
MINUTU_BATEN_KOSTUA = 0.011; { Minutu bakoitzeko kostua }
GAU_KOPURU_MAXIMOA = 2; { Zenbat gau onartzen dira }
MAX = 4080; { Array laguntzailearen neurria }
Motak
TYPE
tsKate8 = STRING[8];
tsKate30 = STRING[30];
tsKate10 = STRING[10];
tsKate2 = STRING[2];
trdData = RECORD
iUrtea, iHila, iEguna: Integer;
END;
trdUnea = RECORD
iOrduak, iMinutuak, iSegundoak: Integer;
END;
trdAutoarenDatuak = RECORD
sMatrikula: tsKate8;
rdSarreraData: trdData;
rdSarreraUnea: trdUnea;
rdIrteeraData: trdData;
rdIrteeraUnea: trdUnea;
iGauKopurua: Integer;
rZenbatekoa: Real;
END;
tardParking = ARRAY [1..MAX] OF trdAutoarenDatuak;
tfParking = FILE OF trdAutoarenDatuak;
Fitxategia sortu
{ Fitxategi baten existentzia aztertzen du. Ezezkoan, sortu egiten du }
PROCEDURE prFitxategiaSortu(sFitxIzen: tsKate30);
VAR f: tfParking;
BEGIN
IF NOT FileExists(sFitxIzen) THEN
BEGIN
Assign(f, sFitxIzen);
ReWrite(f);
Close(f);
WriteLn('"', sFitxIzen, '" izeneko fitxategia sortuta');
END;
END;
Fitxategitik array-ra
{ Parking fitxategiaren datuak array batera eraman. Bide batez, irten ez diren autoen gau kopurua inkrementatu. }
PROCEDURE prFitxategitikArrayra(sFitxIzen: tsKate30; VAR ardParking: tardParking; VAR iLuzera: Integer);
VAR f: tfParking;
BEGIN
{ Hasieran array hori hutsik dago }
iLuzera := 0;
{ Fitxategia zabaldu }
Assign(f, sFitxIzen);
Reset(f);
{ Fitxategia hasieratik bukaerara zeharkatu }
WHILE NOT EOF(f) DO
BEGIN
iLuzera := iLuzera + 1;
Read(f, ardParking[iLuzera]);
ardParking[iLuzera].iGauKopurua := ardParking[iLuzera].iGauKopurua + 1;
END;
Close(f);
END;
Menua
FUNCTION fncAukeraIrakurri: Char;
VAR cAukera: Char;
BEGIN
ClrScr;
Writeln;
Writeln;
WriteLn('************************ MENUA *******************************');
WriteLn(' 1. Auto baten sarrera');
WriteLn(' 2. Auto baten irteera');
WriteLn(' 3. Parking-ean dauden autoen informazioa pantailaratu');
Writeln;
WriteLn(' 0. Amaitu');
WriteLn;
Write('Zure aukera hautatu: ');
REPEAT
cAukera := ReadKey;
UNTIL ('0' <= cAukera) AND (cAukera <= '3');
Writeln(cAukera);
Writeln;
fncAukeraIrakurri := cAukera;
END;
Autoaren posizioa bilatu
{ Auto baten matrikula datua izanik, autoaren posizioa array barruan zehazten du, baldin eta oraindik irten ez bada (horretarako rZenbatekoa balioa erabiltzen da). Matrikula ez badu aurkitzen edo aurkitzen badu autoa irten bada, -1 itzuli. Bestela autoaren posizioa array barruan itzuli. }