PACKET statinternDEFINES statinternstart,statistiklistezeigen, erstellestatistik,zeigefertigestatistik,statblaettern:LET matrix= "ms stat matrix",obli="mu objektliste",ueberschriftenfeld=2,fortsetzungsfeld= 3,spaltentitel=4,wertebereichanfang=5,spaltenzahl=6,zeilenzahl=11, zeilenlaenge=8,maxfeld=100,laengezaehlfeld=5,laengewertefeld=8;LET mv=100,nv= 20;ROW nvTEXT VAR spaltenwert;INT VAR maxspaltenwert;ROW mvTEXT VAR zeilenwert;INT VAR maxzeilenwert;INT VAR zeileleer;LET anhangzeilen=2;LET maxbestaende=8,maxauswertungen=17;LET titelergaenz1="alle Klassen ", titelergaenz2="alle Tutorenkurse ";ROW maxbestaendeTEXT CONST bestandtitel1:= ROW maxbestaendeTEXT :("der Jahrgangsstufe ","Jahrgangsstufen der Sek. 1", "Jahrgangsstufen der Sek. 2","alle Jahrgangsstufen", "Neuangemeldete zur Jgst. 5","Neuangemeldete zur Jgst. 11", "Neuangemeldete zu einer anderen Jgst.","Abgegangene aller Jahrgangsstufen"); LET allejgstsek1=2,allejgstsek2=3,allejgst=4,neuan5=5,neuan11=6,neuansonst=7, abgegangene=8;ROW maxauswertungenTEXT CONST bestandtitel2:=ROW maxauswertungenTEXT :("Geschlecht","Alter","Schultyp der Herkunftsschule", "Art des Zugangs zur Jgst.","Versetzungsergebnis", "Teilnahme Religionsunterricht","Sprachenfolge","Kunst/Musik", "Ortsteil des Wohnortes","Staatsangehörigkeit","Muttersprache", "Einschulungsjahr Grundschule","Herkunftsschule","Religionszugehörigkeit", "Spätaussiedler","Abgangsgrund","Abschluß");LET geschlecht=1,alter=2,schultyp =3,zugang=4,versetzung=5,teilnahmereli=6,fremdsprachen=7,kunst=8,ort=9,staat= 10,sprache=11,einschulung=12,herkunft=13,religion=14,aussiedler=15,abgang=16, abschluss=17;LET fortsetzungstitel=" Forts.",leertitel="leer", leertitelplatzhalter="�",sonsttitel="sonst",summentitel="Summe";LET neuanmeld5="n05",neuanmeld11="n11",neuanmeldsonst="nso",archivbestand="abg", gesamtbestand="ls";LET bestort="c02 ortsteil",beststaat="c02 staaten", bestsprache="c02 sprachen",bestreligion="c02 relizugehoerigkeit",bestabgang= "c02 abgang",bestabschluss="c02 abschluss",bestschulart="c02 schulart", bestversetzung="c02 versetzung",bestzugang="c02 zugang",bestherkunft= "Schulen";LET null="0",niltext="",blank=" ";LET allesek1= " 05 06 07 08 09 10",allesek2=" 11 12 13";LET einenbestand= 2,einejgst=1,alleinsek1=4,alleinsek2=5;LET sjahr="Schuljahr",shj= "Schulhalbjahr",trenner1=".",trenner2="/",trennpos1=2,trennpos2=3,stattext1= "alle",stattext2="Werte",maxsek1=10,titeltrenner=", ",links=4,rechts=3,oben=2 ,unten=1,minjgst=5,maxjgst=13,abgkz="abg. ",maxkreuzzahl=1,basisohnebestand=1 ,laengespaltentitel=30,standardanfang=2;LET weiblich="w",maennlich="m",ja="j" ,nein="n";LET unzulaessigewahlnr=56,wartennr=69,fertignr=77,meldzuvielewerte= 87,nproc=1,standardabstand=2;LET maxoblizeile=18,listenauskunft=2018;LET beginntag=1,endetag=2,beginnmonat=4,endemonat=5,beginnjahr=7;BOOL VAR rechtsverschiebbar,variablezaehlung,neueintragnoetig,#20.01.88dr# vergleichsstart,sprungvonunten,fehlerzuvielewerte;INT VAR xaktuell,yaktuell, aktuellerbestand,statbestandnr,statjgst,statauswertungsnr,statbasisnr, jahrdestagesdatums,monatdestagesdatums,tagdestagesdatums,waspruefen,#06.07.87 dr#dateinummer,#01.02.88dr#schluesseldateinr,vglfeld,gewindex;#05.08.87dr# TEXT VAR kuerzelbestand,gewbestand,#06.08.87dr#bestaendezeile,vergleichsjgst, statgrundmaske,aktschuljahr,akthalbjahr,titelzeile;PROC statinternstart: standardvproc(maske(vergleichsknoten));sprungvonunten:=FALSE END PROC statinternstart;PROC statistiklistezeigen:IF eingangsbildschirmkorrektTHEN standardstartproc(obli);auskunftstextergaenzen;fuellestatistikliste; standardnprocELSE fehlerbehandlungFI .auskunftstextergaenzen:titelzeile:= niltext;IF statbestandnr=einejgstTHEN titelzeile1ELSE einfachetitelzeileFI ; ergaenzeauskunft(titelzeile+auskunftstextende,listenauskunft).titelzeile1:IF insek1THEN titelzeileCAT titelergaenz1ELSE titelzeileCAT titelergaenz2FI ; titelzeileCAT bestandtitel1(statbestandnr);titelzeileCAT aufberzweistellig( text(statjgst)).insek1:statjgst<=maxsek1.einfachetitelzeile:titelzeileCAT bestandtitel1(statbestandnr).fuellestatistikliste:INT VAR feldnr:= standardabstand+1;FOR iFROM 1UPTO maxauswertungenREP standardmaskenfeld( bestandtitel2(i),feldnr);feldnrINCR standardabstandPER ;feldnrDECR 1;FOR i FROM maxauswertungen+1UPTO maxoblizeileREP feldschutz(feldnr);feldnrINCR standardabstandPER .eingangsbildschirmkorrekt:IF sprungvonuntenTHEN TRUE ELSE INT VAR i,kreuzzahl:=0;TEXT VAR ankreuzfeld;statbestandnr:= standardanfang;FOR iFROM standardanfangUPTO maxbestaende+1REP ankreuzfeld:= standardmaskenfeld(i);IF ankreuzfeld<>niltextTHEN IF (i=standardanfang)THEN statjgst:=int(ankreuzfeld);IF (NOT lastconversionok)COR statjgstungueltig THEN LEAVE eingangsbildschirmkorrektWITH FALSE FI FI ;kreuzzahlINCR 1; statbestandnr:=iFI PER ;statbestandnrDECR 1;(kreuzzahl<=maxkreuzzahl)CAND ( kreuzzahl>0)FI .statjgstungueltig:(statjgstmaxjgst). fehlerbehandlung:standardmeldung(unzulaessigewahlnr,niltext);infeld( statbestandnr+1);return(nproc).END PROC statistiklistezeigen;PROC erstellestatistik:reinitparsing;IF listenwahlkorrektTHEN startestatistik( statbestandnr,statjgst,statauswertungsnr);initialisiereblaettern; zeigefertigestatistikELSE fehlerbehandlungFI .listenwahlkorrekt:INT VAR i, kreuzzahl:=0;TEXT VAR ankreuzfeld;statauswertungsnr:=standardanfang;INT VAR feldnr:=standardabstand;FOR iFROM 1UPTO maxauswertungenREP ankreuzfeld:= standardmaskenfeld(feldnr);IF ankreuzfeld<>niltextTHEN kreuzzahlINCR 1; statauswertungsnr:=iFI ;feldnrINCR standardabstandPER ;(kreuzzahl<= maxkreuzzahl)CAND (kreuzzahl>0).initialisiereblaettern:sprungvonunten:=TRUE ; IF NOT fehlerzuvielewerteTHEN standardmeldung(fertignr,niltext)FI ;xaktuell:= 1;yaktuell:=1.fehlerbehandlung:standardmeldung(unzulaessigewahlnr,niltext); infeld(statauswertungsnr*standardabstand);return(nproc).END PROC erstellestatistik;PROC zeigefertigestatistik:infeld(fortsetzungsfeld); standardnprocEND PROC zeigefertigestatistik;PROC startestatistik(INT CONST bestandnr,jgst,auswertungsnr):initialisiere;maskeausgeben;titelausgeben; indexbestimmen;bestaendeausgeben;werteverarbeitung(auswertungsnr). initialisiere:fehlerzuvielewerte:=FALSE ;statbasisnr:=basisohnebestand; statgrundmaske:=niltext.maskeausgeben:standardstartproc(matrix); standardmeldung(wartennr,niltext).titelausgeben:titelzeileCAT titeltrenner; IF auswertungsnr=versetzungTHEN versetzungsergaenzungFI ;titelzeilenrest; titelzeileausgeben.versetzungsergaenzung:liesschuljahr;lieshalbjahr; titelzeilenzusatz.liesschuljahr:aktschuljahr:=schulkenndatum(sjahr). lieshalbjahr:akthalbjahr:=schulkenndatum(shj).titelzeilenzusatz:titelzeile CAT (subtext(aktschuljahr,1,trennpos1));titelzeileCAT trenner2;titelzeileCAT (subtext(aktschuljahr,trennpos2));titelzeileCAT trenner1;titelzeileCAT akthalbjahr;titelzeileCAT titeltrenner.titelzeilenrest:titelzeileCAT bestandtitel2(auswertungsnr);.titelzeileausgeben:titelzeileIN ueberschriftenfeld.indexbestimmen:SELECT bestandnrOF CASE allejgst,neuan5, neuan11,neuansonst,abgegangene:gewindex:=ixsustatfamrufgebCASE allejgstsek1, allejgstsek2,einejgst:gewindex:=ixsustatjgstEND SELECT ;indexvorbelegen. indexvorbelegen:inittupel(dnrschueler);waspruefen:=einenbestand;gewbestand:= gesamtbestand;SELECT bestandnrOF CASE einejgst:putwert(fnrsustatuss, gesamtbestand);putwert(fnrsusgrpjgst,jgstkonv(jgst));waspruefen:=einejgst; CASE allejgstsek1:putwert(fnrsustatuss,gesamtbestand);putwert(fnrsusgrpjgst, "05");waspruefen:=alleinsek1;CASE allejgstsek2:putwert(fnrsustatuss, gesamtbestand);putwert(fnrsusgrpjgst,"11");waspruefen:=alleinsek2;CASE allejgst:putwert(fnrsustatuss,gesamtbestand);CASE neuan5:putwert(fnrsustatuss ,neuanmeld5);gewbestand:=neuanmeld5;CASE neuan11:putwert(fnrsustatuss, neuanmeld11);gewbestand:=neuanmeld11;CASE neuansonst:putwert(fnrsustatuss, neuanmeldsonst);gewbestand:=neuanmeldsonst;CASE abgegangene:putwert( fnrsustatuss,archivbestand);gewbestand:=archivbestand;END SELECT . bestaendeausgeben:SELECT bestandnrOF CASE einejgst:ermittleallekomponenten( jgst)CASE allejgstsek1:ermittlebestaendezeile(allesek1)CASE allejgstsek2: ermittlebestaendezeile(allesek2)CASE allejgst,neuansonst,abgegangene: ermittlebestaendezeile(allesek1+allesek2)CASE neuan5:ermittlebestaendezeile( praefix(allesek1))CASE neuan11:ermittlebestaendezeile(praefix(allesek2))END SELECT ;bestaendezeileersterteilIN spaltentitel.bestaendezeileersterteil:IF laengespaltentitellgPER ;maxspaltenwert:=iEND PROC ermittlebestaendezeile;PROC ermittleallekomponenten(INT CONST jgst):INT VAR dnrklassenbestand:=dnraktschuelergruppen;bestaendezeile:=niltext; maxspaltenwert:=0;vergleichsjgst:=jgstkonv(jgst);vergleichsstart:=TRUE ; inittupel(dnrklassenbestand);putwert(fnrsgrpsj,schulkenndatum(sjahr));putwert (fnrsgrphj,schulkenndatum(shj));statleseschleife(dnrklassenbestand, vergleichsjgst,niltext,dnrklassenbestand+3,dnrklassenbestand+4,PROC (BOOL VAR )gibklasseaus);END PROC ermittleallekomponenten;PROC gibklasseaus(BOOL VAR ende):INT CONST dnr:=dnraktschuelergruppen;TEXT CONST klassenjgst:= jgstkonv(intwert(dnr+3));IF vergleichsstartTHEN IF vergleichsjgst<> klassenjgstTHEN ende:=TRUE ELSE vergleichsjgst:=klassenjgst;vergleichsstart:= FALSE FI ELSE IF vergleichsjgst<>klassenjgstTHEN ende:=TRUE FI FI ;IF NOT endeTHEN TEXT CONST klassenkennung:=wert(dnr+4);maxspaltenwertINCR 1; spaltenwert(maxspaltenwert):=compress(klassenkennung);bestaendezeileCAT rechtstext(klassenkennung,laengezaehlfeld);FI END PROC gibklasseaus;PROC felderparsen:IF dateinummer=dnrschuelerTHEN IF vglfeld<=fnrsujgsteintrTHEN parsenooffields(fnrsujgsteintr-dnrschueler)ELSE parsenooffields(vglfeld- dnrschueler)FI ELIF dateinummer=dnrhalbjahresdatenTHEN parsenooffields( fnrhjdversetzung)ELIF dateinummer=dnrschulenTHEN parsenooffields( fnrsuskennlschule)ELSE parsenooffields(fnrsutiddiffdaten-dnrschueler)FI END PROC felderparsen;PROC statkonst(TEXT CONST wert1,wert2):#dr11.05.88#LET konstwertezahl=2;felderparsen;setzewerte;gibwerteaus;startezaehlung. setzewerte:variablezaehlung:=FALSE ;maxzeilenwert:=konstwertezahl+ anhangzeilen;zeileleer:=konstwertezahl+1;zeilenwert(1):=wert1;zeilenwert(2):= wert2;zeilenwert(zeileleer):=niltext.gibwerteaus:ausgabederzeilenwerte(1). startezaehlung:statzaehlung(PROC registriereeinenschueler).END PROC statkonst ;PROC statschluessel(TEXT CONST bestand):statschluessel(bestand,PROC registriereeinenschueler)END PROC statschluessel;PROC statschluessel(TEXT CONST bestand,PROC zaehlmethode):systemdboff;setzewerte;gibwerteaus; startezaehlung.setzewerte:kuerzelbestand:=bestand;variablezaehlung:=FALSE ; maxzeilenwert:=0;inittupel(schluesseldateinr);IF schluesselbestandTHEN statleseschleife(schluesseldateinr,bestand,niltext,schluesseldateinr+1, schluesseldateinr+2,PROC (BOOL VAR )tragegefundenenzeilenwertein)ELSE statleseschleife(schluesseldateinr,niltext,niltext,schluesseldateinr+1, schluesseldateinr+2,PROC (BOOL VAR )tragegefundenenzeilenwertein)FI ; maxzeilenwertINCR anhangzeilen;zeileleer:=maxzeilenwert-1;zeilenwert( maxzeilenwert):=sonsttitel;zeilenwert(zeileleer):=niltext.schluesselbestand:( bestandSUB 1)="c".gibwerteaus:ausgabederzeilenwerte(1).startezaehlung: statzaehlung(PROC zaehlmethode).END PROC statschluessel;PROC tragegefundenenzeilenwertein(BOOL VAR schluss):IF dbstatus=okTHEN IF schluesseldateinr=dnrschluesselTHEN IF wert(fnrschlsachgebiet)=kuerzelbestand THEN IF maxzeilenwert=mv-anhangzeilenTHEN fehlerzuvielewerte:=TRUE ; standardmeldung(meldzuvielewerte,niltext)ELSE maxzeilenwertINCR 1;zeilenwert( maxzeilenwert):=wert(fnrschlschluessel)FI ELSE schluss:=TRUE FI ELSE IF maxzeilenwert=mv-anhangzeilenTHEN fehlerzuvielewerte:=TRUE ;standardmeldung( meldzuvielewerte,niltext)ELSE maxzeilenwertINCR 1;zeilenwert(maxzeilenwert):= wert(schluesseldateinr+1)FI FI ELSE schluss:=TRUE FI END PROC tragegefundenenzeilenwertein;PROC statvariabel(PROC zaehlmethode):setzewerte; gibwerteaus;startezaehlung.setzewerte:variablezaehlung:=TRUE ;maxzeilenwert:= 0.gibwerteaus:stattext1IN wertebereichanfang;stattext2IN (wertebereichanfang+ zeilenlaenge).startezaehlung:statzaehlung(PROC zaehlmethode).END PROC statvariabel;PROC statzaehlung(PROC zaehlmethode):LET stackgroesse=15;INT VAR anzahl;vorbereitung;zaehlschleife;IF variablezaehlungTHEN umsortierenFI ; ausgabe.vorbereitung:reinitparsing;neueintragnoetig:=FALSE ;statinit( maxzeilenwert,maxspaltenwert).zaehlschleife:anzahl:=stackgroesse; multisearchforward(gewindex,anzahl);WHILE anzahl>0REP felderparsen;multisucc; IF pruefungbestand(waspruefen)THEN IF dateinummer=dnrdiffdaten#dr11.05.88# THEN diffdatenlesenELIF dateinummer=dnrhalbjahresdatenTHEN hjddatenlesenELIF dateinummer=dnrschulenTHEN schuldatenlesenFI ;zaehlmethode; gegebenenfallsneuenzeilenwertausgeben;anzahlDECR 1; wennstackabgearbeitetnachlesenELSE LEAVE zaehlschleifeFI ;PER .diffdatenlesen :inittupel(dnrdiffdaten);IF wert(fnrsutiddiffdaten)<>niltextTHEN readtid( dnrdiffdaten,wert(fnrsutiddiffdaten))FI .hjddatenlesen:inittupel( dnrhalbjahresdaten);IF wert(fnrsutidakthjd)<>niltextTHEN readtid( dnrhalbjahresdaten,wert(fnrsutidakthjd));FI .schuldatenlesen:inittupel( dnrschulen);IF wert(fnrsuskennlschule)<>niltextTHEN putwert(fnrschkennung, wert(fnrsuskennlschule));search(dnrschulen,TRUE )FI . gegebenenfallsneuenzeilenwertausgeben:IF variablezaehlungCAND neueintragnoetigTHEN ausgabederzeilenwerte(1)FI . wennstackabgearbeitetnachlesen:IF anzahl=0THEN anzahl:=stackgroesse;multisucc (gewindex,anzahl);FI .umsortieren:quicksort(1,maxzeilenwert).ausgabe: zwischentitel(0);ausgabederzeilenwerte(1);statausgeben(1,1).END PROC statzaehlung;PROC ausgabederzeilenwerte(INT CONST startzeile): sovielzeilenwiemoeglich;uebrigezeilenloeschen.sovielzeilenwiemoeglich:INT VAR i,endwert:=min(maxzeilenwert,startzeile+zeilenzahl-1);INT VAR basis:= wertebereichanfang;TEXT VAR ausgabewert:="";FOR iFROM startzeileUPTO endwert REP IF variablezaehlungTHEN ausgabewert:=zeilenwert(i);IF ausgabewert= leertitelplatzhalterTHEN ausgabewert:=leertitelFI ELIF i=zeileleerTHEN ausgabewert:=leertitelELIF i=maxzeilenwertTHEN ausgabewert:=sonsttitelELSE ausgabewert:=zeilenwert(i)FI ;rechtstext(ausgabewert,laengewertefeld)IN basis ;basisINCR zeilenlaengePER .uebrigezeilenloeschen:TEXT CONST loeschwert:= rechtstext(niltext,laengewertefeld);WHILE basisspaltenzahlTHEN basis:=((bestandnr-spaltenzahl)*laengezaehlfeld)+1; text(subtext(bestaendezeile,basis),laengespaltentitel)IN spaltentitel; aktuellespalte:=spaltenzahl;loeschespalte(wertebereichanfang+aktuellespalte); spaltenneuausgeben(bestandnr-spaltenzahl)FI ;infeld(wertebereichanfang+ aktuellespalte);INT VAR x,y;getcursor(x,y);cursor(x+laengezaehlfeld-1,y-2). END PROC zwischentitel;PROC statblaettern(INT CONST richtung):SELECT richtung OF CASE links:nachlinksblaetternCASE rechts:nachrechtsblaetternCASE unten: nachuntenblaetternCASE oben:nachobenblaetternEND SELECT ;return(nproc). nachlinksblaettern:blaettern(xaktuell,yaktuell,0,-spaltenzahl). nachrechtsblaettern:blaettern(xaktuell,yaktuell,0,spaltenzahl). nachuntenblaettern:blaettern(xaktuell,yaktuell,zeilenzahl,0). nachobenblaettern:blaettern(xaktuell,yaktuell,-zeilenzahl,0).END PROC statblaettern;PROC blaettern(INT VAR x,y,INT CONST xincr,yincr):IF zulaessig THEN meldefortsetzung;fuehreausFI .zulaessig:INT CONST xneu:=x+xincr;INT CONST yneu:=y+yincr;((xneu>0)CAND (xneu<=maxzeilenwert))CAND ((yneu>0)CAND ( yneu<=maxspaltenwert)).meldefortsetzung:IF (xneu=1)CAND (yneu=1)THEN rechtstext(niltext,laengewertefeld)IN fortsetzungsfeldELSE fortsetzungstitel IN fortsetzungsfeldFI .fuehreaus:x:=xneu;y:=yneu;IF xincr=0THEN spaltentitelneuELSE zeilentitelneuFI ;statausgeben(xneu,yneu).spaltentitelneu :ausgabederspaltenwerte(yneu).zeilentitelneu:ausgabederzeilenwerte(xneu).END PROC blaettern;PROC registriereeinenschueler:tragevariablenwertein(wert( vglfeld))END PROC registriereeinenschueler;PROC zaehlmethodealter:TEXT CONST suchwert:=jgstkonv(lebensalter(wert(fnrsugebdatums)));tragevariablenwertein( suchwert)END PROC zaehlmethodealter;PROC zaehlmethodereli:TEXT VAR suchwert:= "";suchwert:=wert(fnrddreliunter);IF NOT leerTHEN IF abgemeldetTHEN suchwert :=abgkz+suchwertFI FI ;eintragen.leer:suchwert=niltext.abgemeldet:datum( datumrekonversion(wert(fnrddabmeldedatreli)))<>nildatum.eintragen: tragevariablenwertein(suchwert).END PROC zaehlmethodereli;PROC zaehlmethodefremdsprachen:TEXT VAR suchwert:=text(wert(fnrdd1fremdfach),2)+ text(wert(fnrdd2fremdfach),2)+text(wert(fnrdd3fremdfach),2)+text(wert( fnrdd4fremdfach),2);IF suchwert=zeilenlaenge*blankTHEN suchwert:=niltextFI ; tragevariablenwertein(suchwert)END PROC zaehlmethodefremdsprachen;PROC tragevariablenwertein(TEXT CONST suchwert):INT VAR lva:=0,zeilennr:=0;BOOL VAR gefunden:=TRUE ;TEXT VAR gefundenerwert:=niltext;sucheaktuellenbestand; suchegefundenenwert;IF NOT gefundenAND variablezaehlungTHEN IF maxzeilenwert= mvTHEN fehlerzuvielewerte:=TRUE ;standardmeldung(meldzuvielewerte,niltext) ELSE neueintragnoetig:=TRUE ;zeilennrINCR 1;maxzeilenwert:=zeilennr; zeilenwert(zeilennr):=gefundenerwert;statinit(maxzeilenwert);registrierenFI ELSE neueintragnoetig:=FALSE ;registrierenFI .sucheaktuellenbestand:SELECT statbestandnrOF CASE einejgst:bestimmeaktuellenbestandCASE allejgstsek2: aktuellerbestand:=int(wert(fnrsusgrpjgst))-10CASE allejgst,allejgstsek1, abgegangene:aktuellerbestand:=int(wert(fnrsusgrpjgst))-4CASE neuansonst: aktuellerbestand:=int(wert(fnrsujgsteintr))-4CASE neuan5,neuan11: aktuellerbestand:=1END SELECT ;.bestimmeaktuellenbestand:FOR lvaFROM 1UPTO maxspaltenwertREP IF compress(wert(fnrsusgrpzugtut))=compress(spaltenwert(lva ))THEN aktuellerbestand:=lva;LEAVE bestimmeaktuellenbestandFI PER . suchegefundenenwert:IF suchwert=niltextTHEN IF variablezaehlungTHEN gefundenerwert:=leertitelplatzhalter;zeilennr:=gefundenezeile(gefundenerwert, maxzeilenwert,gefunden)ELSE zeilennr:=zeileleerFI ELSE gefundenerwert:= suchwert;zeilennr:=gefundenezeile(gefundenerwert,maxzeilenwert,gefunden)FI . registrieren:statauszaehlen(zeilennr,aktuellerbestand).END PROC tragevariablenwertein;INT PROC gefundenezeile(TEXT CONST vergleichswert,INT CONST oberegrenze,BOOL VAR gefunden):INT VAR i;FOR iFROM 1UPTO oberegrenze REP IF vergleichswert=zeilenwert(i)THEN gefunden:=TRUE ;LEAVE gefundenezeile WITH iFI PER ;gefunden:=FALSE ;maxzeilenwertEND PROC gefundenezeile;PROC holetagesdatum:TEXT CONST tagesdatum:=date;jahrdestagesdatums:=int(subtext( tagesdatum,beginnjahr));monatdestagesdatums:=int(subtext(tagesdatum, beginnmonat,endemonat));tagdestagesdatums:=int(subtext(tagesdatum,beginntag, endetag));END PROC holetagesdatum;INT PROC lebensalter(TEXT CONST geburtsdatum):INT VAR grundalter:=jahrdestagesdatums-int(subtext(geburtsdatum ,beginnjahr));IF spaeterermonatgeborenCOR (gleichermonatgeborenCAND spaeterertaggeboren)THEN einsjuengerFI ;grundalter.einsjuenger:grundalter DECR 1.spaeterermonatgeboren:INT CONST geburtsmonat:=int(subtext(geburtsdatum ,beginnmonat,endemonat));geburtsmonat>monatdestagesdatums. gleichermonatgeboren:geburtsmonat=monatdestagesdatums.spaeterertaggeboren:int (subtext(geburtsdatum,beginntag,endetag))>tagdestagesdatums.END PROC lebensalter;TEXT PROC aufberzweistellig(TEXT CONST jgst):IF length(jgst)=1 THEN null+jgstELSE jgstFI END PROC aufberzweistellig;TEXT PROC praefix(TEXT CONST t):subtext(t,1,laengezaehlfeld)END PROC praefix;PROC quicksort(INT CONST anfang,ende):IF anfang= pivotREP bereichsendeDECR 1PER .vertauscheamrand:vertauscheinzeilenwert( bereichsanfang,bereichsende).fuegepivotein:INT CONST pivotstelle:= bereichsende;vertauscheinzeilenwert(anfang,pivotstelle).END PROC quicksort; PROC vertauscheinzeilenwert(INT CONST i,j):TEXT VAR hilfselement:=zeilenwert( i);zeilenwert(i):=zeilenwert(j);zeilenwert(j):=hilfselement; statzeilevertauschen(i,j)END PROC vertauscheinzeilenwert;TEXT PROC jgstkonv( INT CONST jgst):TEXT CONST tjgst:=text(jgst);IF jgstmaxsek1)END PROC pruefungsek2;END PACKET statintern;