Pascal Air Quality Index Calculator: Analyzing Measurement Files
FUNCTION fnboIndizeakKalkulaturikBai (sFitxIzen : tsKateLuze) : Boolean ;
VAR
f: tfrdNeurketenFitxategia;
rdNeurketaBat: trdNeurketa ;
boKalkulatuak: Boolean ;
iNeurketaKopurua : Integer ;
BEGIN
boKalkulatuak := TRUE ;
Assign(f, sFitxIzen) ;
Reset(f) ;
iNeurketaKopurua := FileSize(f) ;
IF 1 <= iNeurketaKopurua THEN
BEGIN
Seek(f, iNeurketaKopurua - 1) ;
Read(f, rdNeurketaBat) ;
IF rdNeurketaBat.iKI = -1 THEN
boKalkulatuak := FALSE ;
END ;
Close(f) ;
fnboIndizeakKalkulaturikBai := boKalkulatuak ;
END ;
Behatokiaren Zerrenda Lortu
PROCEDURE BehatokiarenZerrendaLortu (sFitxIzen : tsKateLuze ;
sBehatokiBat : tsKateLabur ;
VAR ardNeurketenZerrenda : tardNeurketenZerrenda ;
VAR iLuzera : Integer) ;
VAR
f: tfrdNeurketenFitxategia;
rdNeurketaBat : trdNeurketa ;
BEGIN
iLuzera := 0 ;
Assign(f, sFitxIzen) ;
Reset(f) ;
WHILE NOT EOF(f) DO
BEGIN
Read(f, rdNeurketaBat) ;
IF UpCase(rdNeurketaBat.sBehatokia) = UpCase(sBehatokiBat) THEN
BEGIN
iLuzera := iLuzera + 1 ;
ardNeurketenZerrenda [iLuzera] := rdNeurketaBat ;
END ;
END ;
Close(f) ;
END ;
Egun Okerrak Jarraian Egiaztatu
FUNCTION fnboEgunOkerrakJarraian (iHasierakoPosizioa, iEgunOkerrakJarraian : Integer ;
CONST ardNeurketenZerrenda : tardNeurketenZerrenda) : Boolean ;
VAR
i: Integer ;
boOkerra : Boolean ;
BEGIN
boOkerra := TRUE ;
FOR i := iHasierakoPosizioa TO iHasierakoPosizioa + iEgunOkerrakJarraian - 1 DO
IF (ardNeurketenZerrenda[i].iKI <> 0) AND (ardNeurketenZerrenda[i].iKI <> 1) THEN
boOkerra := FALSE ;
fnboEgunOkerrakJarraian := boOkerra ;
END ;
Egun Jarraiak Erakutsi
PROCEDURE EgunJarraiakErakutsi (iEgunOkerrakJarraian : Integer ;
CONST ardNeurketenZerrenda: tardNeurketenZerrenda ;
iLuzera : Integer) ;
VAR
i: Integer ;
boOkerra : Boolean ;
BEGIN
FOR i := 1 TO iLuzera - iEgunOkerrakJarraian + 1 DO
BEGIN
boOkerra := fnboEgunOkerrakJarraian(i, iEgunOkerrakJarraian, ardNeurketenZerrenda) ;
IF boOkerra THEN
WITH ardNeurketenZerrenda[i] DO
BEGIN
Writeln('Data: ', sData) ;
Writeln(' KIO: ', rKIO:0:1) ;
END ;
END ;
END ;
Programa Nagusiko Aldagaiak
VAR {------------------ Programa Nagusiko aldagaiak -------------}
sFitxIzen: tsKateLuze ;
sBehatokiBat: tsKateLabur ;
ardNeurketenZerrenda : tardNeurketenZerrenda ;
iLuzera: Integer ;
iEgunOkerrakJarraian : Integer ;
cAukera, cItxaron: Char ;
Programa Nagusia
BEGIN {----------------- Programa Nagusia -----------------------}
Write('Neurketen fitxategiak duen izena eman: ') ;
Readln(sFitxIzen) ;
IF NOT FileExists(sFitxIzen) THEN
Writeln('ERROREA! ', sFitxIzen, ' izeneko fitxategirik ez dago')
ELSE
REPEAT
cAukera := fncAukeraIrakurri;
CASE cAukera OF
'1' : NeurketaGuztiakErakutsi(sFitxIzen) ;
'2' : KalitateIndizeakKalkulatu(sFitxIzen) ;
'3' : IF fnboIndizeakKalkulaturikBai(sFitxIzen) THEN
BEGIN
Write('Analizatuko den behatokiaren izena: ') ;
Readln(sBehatokiBat) ;
BehatokiarenZerrendaLortu(sFitxIzen, sBehatokiBat, ardNeurketenZerrenda, iLuzera) ;
IF iLuzera = 0 THEN
Writeln('ERROREA! ', sBehatokiBat, ' behatokiaren neurketarik ez dago fitxategian')
ELSE
BEGIN
Write('Kalitate okerreko (KI=0 edo KI=1) egun kopurua eman: ') ;
Readln(iEgunOkerrakJarraian) ;
Writeln ;
Writeln('Kalitate okerreko egunak ', iEgunOkerrakJarraian, ' izanik, noiz hasten diren:') ;
EgunJarraiakErakutsi(iEgunOkerrakJarraian, ardNeurketenZerrenda, iLuzera) ;
END ;
END
ELSE
Writeln('ERROREA! KIO eta KI indizeak kalkulatu gabe daude fitxategian') ;
END ;
IF cAukera <> '0' THEN
cItxaron := ReadKey ;
WriteLn(cItxaron) ;
UNTIL cAukera = '0' ;
Writeln ;
Write('Tekla bat sakatu bukatzeko') ;
cItxaron := ReadKey ;
END .