diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2019-02-04 13:09:03 +0100 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2019-02-04 13:09:03 +0100 |
commit | 04e68443040c7abad84d66477e98f93bed701760 (patch) | |
tree | 2b6202afae659e773bf6916157d23e83edfa44e3 /app/schulis/2.2.1/src/1.stat grundfunktionen | |
download | eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.gz eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.bz2 eumel-src-04e68443040c7abad84d66477e98f93bed701760.zip |
Initial import
Diffstat (limited to 'app/schulis/2.2.1/src/1.stat grundfunktionen')
-rw-r--r-- | app/schulis/2.2.1/src/1.stat grundfunktionen | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/1.stat grundfunktionen b/app/schulis/2.2.1/src/1.stat grundfunktionen new file mode 100644 index 0000000..8ef332a --- /dev/null +++ b/app/schulis/2.2.1/src/1.stat grundfunktionen @@ -0,0 +1,70 @@ +PACKET statgrundfunktionenDEFINES statleseschleife,statauszaehlen,statinit, +statausgeben,statspalteausgeben,statzeilevertauschen,rechtstext,loeschespalte +:LET matrixanfang=6,zeilenlaenge=8,zeilensummentitel=93,spaltensummenbasis=12 +,matrixspaltenzahl=6,matrixzeilenzahl=11,laengezaehlfeld=5,laengewertefeld=8; +LET mv=100,nv=20,summentitel="Summe",maxfeld=100,niltext=" ";BOOL VAR +maskierung;INT VAR zeilenzahl,spaltenzahl;INT VAR aktuellestartzeile;INT VAR +aktuelleendzeile;INT VAR gesamtsumme:=0;ROW mvROW nvINT VAR statzaehler;ROW +mvINT VAR zeilenzeiger;INT PROC zaehler(INT CONST i,j):IF maskierungTHEN +statzaehler(zeilenzeiger(i))(j)ELSE statzaehler(i)(j)FI END PROC zaehler; +PROC statzeilevertauschen(INT CONST i,j):INT VAR k:=zeilenzeiger(j); +zeilenzeiger(j):=zeilenzeiger(i);zeilenzeiger(i):=k;maskierung:=TRUE END +PROC statzeilevertauschen;PROC statleseschleife(INT CONST indexnummer,TEXT +CONST startschluessel1,startschluessel2,INT CONST feldnr1,feldnr2,PROC (BOOL +VAR )stataktion):vorbereitungen;leseschleife.vorbereitungen:LET maxleseanzahl +=10;BOOL VAR vorzeitigesende:=FALSE ;#INT CONST maxblock:=maxfeldDIV +zahlderfelder;#INT VAR anzahltupel;#INT CONST maxanzahl:=(maxintDIV maxblock) +*maxblock#.leseschleife:putwert(feldnr1,startschluessel1);putwert(feldnr2, +startschluessel2);search(indexnummer);IF dbstatus=0THEN einleseschleifeFI . +einleseschleife:zaehlen;WHILE NOT schlussREP anzahltupel:=maxleseanzahl; +multisucc(indexnummer,anzahltupel);stackdurchlaufPER ;.stackdurchlauf:IF +anzahltupel=0THEN dbstatus(1)ELSE WHILE anzahltupel<>0REP lesen;zaehlen;IF +vorzeitigesendeTHEN dbstatus(1);anzahltupel:=0FI ;PER FI .schluss:dbstatus<>0 +.zaehlen:stataktion(vorzeitigesende).lesen:multisucc;anzahltupelDECR 1;.END +PROC statleseschleife;PROC statauszaehlen(INT CONST zeile,spalte):statzaehler +(zeile)(spalte)INCR 1;gesamtsummeINCR 1END PROC statauszaehlen;PROC +statauszaehlen(INT CONST zeile,spalte,anzahl):statzaehler(zeile)(spalte):= +anzahl;gesamtsummeINCR anzahlEND PROC statauszaehlen;PROC statinit(INT CONST +zeilen,spalten):#INT VAR i,j;#gesamtsumme:=0;spaltenzahl:=spalten; +aktuellestartzeile:=1;zeilenzahl:=0;maskierung:=FALSE ;statinit(zeilen)END +PROC statinit;PROC statinit(INT CONST zeilen):INT VAR i,j;FOR iFROM +zeilenzahl+1UPTO zeilenREP zeilenzeiger(i):=i;FOR jFROM 1UPTO spaltenzahlREP +statzaehler(i)(j):=0PER PER ;zeilenzahl:=zeilen;aktuelleendzeile:=min( +zeilenzahl,matrixzeilenzahl)END PROC statinit;PROC statausgeben(INT CONST +startzeile,startspalte):initialisieren;spaltenausgeben; +restlichespaltenloeschen;summenberechnen.initialisieren:INT VAR spalte; +aktuellestartzeile:=startzeile;BOOL VAR gesamtsummeausgeben:=TRUE ;INT CONST +endzeile:=min(zeilenzahl,startzeile+matrixzeilenzahl-1);aktuelleendzeile:= +endzeile;INT CONST endspalte:=min(spaltenzahl,startspalte+matrixspaltenzahl-1 +);INT VAR spaltennr:=1;.spaltenausgeben:FOR spalteFROM startspalteUPTO +endspalteREP statspalteausgeben(spalte,spaltennr);spaltennrINCR 1PER ;. +summenberechnen:IF zeilensummedarstellbarTHEN statzeilensummeELSE +gesamtsummeausgeben:=FALSE ;FI ;IF spaltensummedarstellbarTHEN +statspaltensumme(startspalte,endspalte);ELSE gesamtsummeausgeben:=FALSE ;FI ; +IF gesamtsummeausgebenTHEN statgesamtsummeFI .spaltensummedarstellbar:( +endzeile=zeilenzahl).zeilensummedarstellbar:(endspalte=spaltenzahl). +restlichespaltenloeschen:INT VAR i,basis:=matrixanfang+spaltennr-1;FOR iFROM +spaltennrUPTO matrixspaltenzahl+1REP loeschespalte(basis);basisINCR 1PER . +END PROC statausgeben;PROC loeschespalte(INT CONST basis):INT VAR feldnr:= +basis;WHILE feldnr<=maxfeldREP niltextIN feldnr;feldnrINCR zeilenlaengePER +END PROC loeschespalte;PROC statspalteausgeben(INT CONST spalte,spaltennr): +INT VAR i,basis:=matrixanfang+spaltennr-1;FOR iFROM aktuellestartzeileUPTO +aktuelleendzeileREP text(zaehler(i,spalte),laengezaehlfeld)IN basis;basis +INCR zeilenlaengePER ;WHILE basis<=maxfeldREP (niltextIN basis);basisINCR +zeilenlaengePER END PROC statspalteausgeben;PROC statzeilensumme:INT VAR i, +basis:=spaltensummenbasis;FOR iFROM aktuellestartzeileUPTO aktuelleendzeile +REP text(zeilensumme(i),laengezaehlfeld)IN basis;basisINCR zeilenlaengePER +END PROC statzeilensumme;PROC statgesamtsumme:INT VAR basis:= +zeilensummentitel+zeilenlaenge-1;text(gesamtsumme,laengezaehlfeld)IN basis +END PROC statgesamtsumme;PROC statspaltensumme(INT CONST startspalte, +endspalte):titel;einzelsummen.titel:rechtstext(summentitel,laengewertefeld) +IN zeilensummentitel.einzelsummen:INT VAR j,basis:=zeilensummentitel+1;FOR j +FROM startspalteUPTO endspalteREP text(spaltensumme(j),laengezaehlfeld)IN +basis;basisINCR 1;PER .END PROC statspaltensumme;INT PROC zeilensumme(INT +CONST zeilennr):INT VAR summe:=0;INT VAR j;FOR jFROM 1UPTO spaltenzahlREP +summeINCR zaehler(zeilennr,j)PER ;summeEND PROC zeilensumme;INT PROC +spaltensumme(INT CONST spaltennr):INT VAR summe:=0;INT VAR i;FOR iFROM 1UPTO +zeilenzahlREP summeINCR zaehler(i,spaltennr)PER ;summeEND PROC spaltensumme; +TEXT PROC rechtstext(TEXT CONST t,INT CONST laenge):((laenge-length(t))*" ")+ +tEND PROC rechtstext;END PACKET statgrundfunktionen + |