Pascal Air Quality Index Calculator: Analyzing Measurement Files

Computer science5.42 KB

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 .

Download

PDF Word HTML