PACKETmodellbasisDEFINESmodelldatenraum,compilierbaregleichungen,MODELLDGL,modellname,modellbezeichnung,modellkurzbezeichnung,dimension,codimension,parameteranzahl,mitzusatzdarstellung,mitphasendiagramm,informationstext,variablenoberbegriff,variablenoberbegriffkurzform,variablenname,variablenkurzform,covariablenname,covariablenkurzform,parametername,parameterkurzform,darstellungsname,zustandunteregrenze,zustandoberegrenze,parameterunteregrenze,parameteroberegrenze,randoben,randunten,vorgabesystemzustand,vorgabeparameter,vorgabebeobachtungsdauer,vorgabeanfangszeitpunkt,vorgabekurve,vorgabevergleichssystemzustand,vorgabevergleichsparameter,vorgabevergleichsbeobachtungsdauer,vorgabevergleichsanfangszeitpunkt,vorgabevergleichskurve,demomuster,demoxindex,demoyindex,demoautomatik,minbeobachtungsdauer,maxbeobachtungsdauer,minanfangszeitpunkt,maxanfangszeitpunkt,anzahlbeobachtungspunkte,mitkombinationen,listekombinationen,indiceskombinationen,ergebnisganzzahlig,:=,VON,LOESUNG,STARTZEIT,DAUER,STARTWERT,PARAMETERSATZ,LOESUNGSABSCHNITT,KURVENDIMENSION,vergleichswerte,originalwerte,gleichungsprozeduren,setzemodelltyp,wirkungsdgr,kopplean:LETmaxdimension=20,maxparameter=20,typnrmodell=1077,maxvarlaenge=30,maxinfo=50,maxgleichungen=50,maxdarstellungszeilen=500,uebersetzbar=0,notuebersetzbar=1,initialisierungds="x",endezeichen="zZz",sp=" ",praefix="d ",modellcode=" code info ds",originalkurve=" originalkurve ds",vergleichskurve=" vergleichskurve ds",uebersetzungsfile="uebersetzungsdatei",darstellungskopf=" PROC darstellung 4 (LOESUNG VAR lsg, BOOL VAR in demo, TEXT VAR taste):",darstellungsende=" END PROC darstellung 4 ;";LETabbruchtaste="a",auskunftstaste="i",auskunftsloeschtaste1="z",auskunftsloeschtaste2="l",weitertaste="w",blaettertaste="b",speichertaste="s",zuruecktaste="z",simulationstaste="w",drucktaste="d",esc="�";LET ZEILE=STRUCT(TEXTgleichungsart,gleichung,variable,INTnummer);TYPE DEMOLAUF=STRUCT(VORGABEoriginal,vergleich,INTxindex,yindex,BOOLautomatisch,TEXTvariablenwahl);TYPE VORGABE=STRUCT(TEXTstartwert,parameter,REALanfangszeitpunkt,beobachtungsdauer,TEXTkurve);TYPE LOESUNG=STRUCT(ZUSTANDstartwert,PARAMETERparameter,REALanfangszeitpunkt,beobachtungsdauer,KURVEkurve);TYPE NAMEN=STRUCT(TEXTelan,ohneumlaute,kurz);TYPE ZUSTANDSDATEN=STRUCT(INTanzahl,TEXToberbegriff,oberbegriffkurzform,ROWmaxdimensionTEXTnamelang,namekurz,TEXTunteregrenze,oberegrenze,randoben,randunten);TYPE COVARIABLENDATEN=STRUCT(INTanzahl,ROWmaxdimensionTEXTnamelang,namekurz);TYPE KOMBINATION=STRUCT(TEXTname,INTxindex,yindex,BOOLautomatisch);TYPE KOMBINATIONSANGEBOT=STRUCT(BOOLmitkombinationen,INTanzahl,ROWmaxdimensionKOMBINATIONpaar);TYPE PARAMETERDATEN=STRUCT(INTanzahl,ROWmaxparameterTEXTnamelang,nameelan,TEXTunteregrenze,oberegrenze);TYPE DARSTELLUNGSDATEN=STRUCT(BOOLimmodell,TEXTname);TYPE BESCHRAENKUNG=STRUCT(REALminbeobachtungsdauer,maxbeobachtungsdauer,minanfangszeitpunkt,maxanfangszeitpunkt,INTanzahlbeobachtungspunkte);LET TEXTDATEN=BOUND STRUCT(ROWmaxinfoTEXTinfo,ROWmaxgleichungenTEXTgleichungen,cogleichungen,ROWmaxdarstellungszeilenTEXTdarstellungscode);TYPE MODELLDGL=STRUCT(NAMENname,ZUSTANDSDATENvariablen,COVARIABLENDATENcovariablen,PARAMETERDATENparameter,DARSTELLUNGSDATENdarstellung,BOOLmitphasendiagramm,BOOLganzzahlig,KOMBINATIONSANGEBOTkombinationen,TEXTcodeundinfo,BESCHRAENKUNGbeschraenkung,DEMOLAUFdemolauf,INTmodellzustand,BOOLgeschuetzt);MODELLDGL VARmodell;TEXTDATEN VARtextdaten;BOOL VARwd:=FALSE;OP:=(LOESUNG VARlinks,LOESUNG CONSTrechts):links.startwert:=rechts.startwert;links.parameter:=rechts.parameter;links.anfangszeitpunkt:=rechts.anfangszeitpunkt;links.beobachtungsdauer:=rechts.beobachtungsdauer;links.kurve:=rechts.kurve;END OP:=;OP VON(LOESUNG VARlinks,LOESUNG CONSTrechts):links.startwert:=rechts.startwert;links.parameter:=rechts.parameter;links.anfangszeitpunkt:=rechts.anfangszeitpunkt;links.beobachtungsdauer:=rechts.beobachtungsdauer;END OP VON;LOESUNG PROCvergleichswerte:LOESUNG VARlsg;lsg.startwert:=vorgabevergleichssystemzustand;
lsg.parameter:=vorgabevergleichsparameter;lsg.anfangszeitpunkt:=vorgabevergleichsanfangszeitpunkt;lsg.beobachtungsdauer:=vorgabevergleichsbeobachtungsdauer;lsg.kurve:=old(vorgabevergleichskurve);lsg.END PROCvergleichswerte;LOESUNG PROCoriginalwerte:LOESUNG VARlsg;lsg.startwert:=vorgabesystemzustand;lsg.parameter:=vorgabeparameter;lsg.anfangszeitpunkt:=vorgabeanfangszeitpunkt;lsg.beobachtungsdauer:=vorgabebeobachtungsdauer;IFexists(vorgabekurve)THENlsg.kurve:=old(vorgabekurve);FI;lsg.END PROCoriginalwerte;OP STARTZEIT(LOESUNG VARlsg,REAL CONSTstartzeit):lsg.anfangszeitpunkt:=startzeitEND OP STARTZEIT;REAL OP STARTZEIT(LOESUNG CONSTlsg):lsg.anfangszeitpunktEND OP STARTZEIT;OP DAUER(LOESUNG VARlsg,REAL CONSTdauer):lsg.beobachtungsdauer:=dauerEND OP DAUER;REAL OP DAUER(LOESUNG CONSTlsg):lsg.beobachtungsdauerEND OP DAUER;OP STARTWERT(LOESUNG VARlsg,ZUSTAND CONSTstartwert):lsg.startwert:=startwertEND OP STARTWERT;ZUSTAND OP STARTWERT(LOESUNG CONSTlsg):lsg.startwertEND OP STARTWERT;OP PARAMETERSATZ(LOESUNG VARlsg,PARAMETER CONSTparameter):lsg.parameter:=parameterEND OP PARAMETERSATZ;PARAMETER OP PARAMETERSATZ(LOESUNG CONSTlsg):lsg.parameterEND OP PARAMETERSATZ;OP LOESUNGSABSCHNITT(LOESUNG VARlsg,KURVE CONSTkurve):lsg.kurve:=kurveEND OP LOESUNGSABSCHNITT;KURVE OP LOESUNGSABSCHNITT(LOESUNG CONSTlsg):lsg.kurveEND OP LOESUNGSABSCHNITT;INT OP KURVENDIMENSION(KURVE CONSTkurve):dimension+codimension+1.END OP KURVENDIMENSION;TEXT PROCmodellbezeichnung:modell.name.ohneumlaute.END PROCmodellbezeichnung;TEXT PROCmodellkurzbezeichnung:modell.name.kurzEND PROCmodellkurzbezeichnung;TEXT PROCmodellname:modell.name.elanEND PROCmodellname;TEXT PROCmodelldatenraum:modell.codeundinfoEND PROCmodelldatenraum;BOOL PROCcompilierbaregleichungen:modell.modellzustand=uebersetzbarEND PROCcompilierbaregleichungen;INT PROCdimension:modell.variablen.anzahlEND PROCdimension;INT PROCcodimension:modell.covariablen.anzahlEND PROCcodimension;INT PROCparameteranzahl:modell.parameter.anzahlEND PROCparameteranzahl;BOOL PROCmitzusatzdarstellung:modell.darstellung.immodellEND PROCmitzusatzdarstellung;BOOL PROCmitphasendiagramm:modell.mitphasendiagrammEND PROCmitphasendiagramm;BOOL PROCergebnisganzzahlig:modell.ganzzahligEND PROCergebnisganzzahlig;FILE PROCinformationstext(TEXT CONSTdateiname):forget(dateiname,quiet);FILE VARtexte:=sequentialfile(output,dateiname);holeinformationstext;texte.holeinformationstext:TEXT VARsatz:="";INT VARi;IFmodell.geschuetztTHENputline(texte," "+modellbezeichnung);putline(texte," "+(areaxsize(grossesrahmenfenster)-2)*waagerecht);FI;FORiFROM1UPTOmaxinfoWHILEtextdaten.info(i)<>endezeichenREPsatz:=textdaten.info(i);putline(texte,satz);PER;.END PROCinformationstext;TEXT PROCvariablenoberbegriff:modell.variablen.oberbegriff.END PROCvariablenoberbegriff;TEXT PROCvariablenoberbegriffkurzform:modell.variablen.oberbegriffkurzform.END PROCvariablenoberbegriffkurzform;TEXT PROCvariablenname(INT CONSTi):TEXT CONSTt:=(modell.variablen.namelang(i));t+(maxvarlaenge-LENGTH(t))*" ".END PROCvariablenname;TEXT PROCvariablenkurzform(INT CONSTi):modell.variablen.namekurz(i).END PROCvariablenkurzform;TEXT PROCcovariablenname(INT CONSTi):TEXT CONSTt:=modell.covariablen.namelang(i);t+(maxvarlaenge-LENGTH(t))*" ".END PROCcovariablenname;TEXT PROCcovariablenkurzform(INT CONSTi):modell.covariablen.namekurz(i).END PROCcovariablenkurzform;TEXT PROCparametername(INT CONSTi):modell.parameter.namelang(i).END PROCparametername;TEXT PROCparameterkurzform(INT CONSTi):modell.parameter.nameelan(i).END PROCparameterkurzform;TEXT PROCdarstellungsname:modell.darstellung.name.END PROCdarstellungsname;PARAMETER PROCvorgabeparameter:parameter(modell.demolauf.original.parameter).END PROCvorgabeparameter;REAL PROCvorgabeanfangszeitpunkt:modell.demolauf.original.anfangszeitpunkt.END PROCvorgabeanfangszeitpunkt;ZUSTAND PROCvorgabevergleichssystemzustand:zustand(modell.demolauf.vergleich.startwert).END PROCvorgabevergleichssystemzustand;PARAMETER PROCvorgabevergleichsparameter:parameter(
modell.demolauf.vergleich.parameter).END PROCvorgabevergleichsparameter;ZUSTAND PROCzustandunteregrenze:zustand(modell.variablen.unteregrenze).END PROCzustandunteregrenze;ZUSTAND PROCzustandoberegrenze:zustand(modell.variablen.oberegrenze).END PROCzustandoberegrenze;PARAMETER PROCparameteroberegrenze:parameter(modell.parameter.oberegrenze).END PROCparameteroberegrenze;PARAMETER PROCparameterunteregrenze:parameter(modell.parameter.unteregrenze).END PROCparameterunteregrenze;ZUSTAND PROCrandoben:zustand(modell.variablen.randoben).END PROCrandoben;ZUSTAND PROCrandunten:zustand(modell.variablen.randunten).END PROCrandunten;REAL PROCminbeobachtungsdauer:modell.beschraenkung.minbeobachtungsdauer.END PROCminbeobachtungsdauer;REAL PROCmaxbeobachtungsdauer:modell.beschraenkung.maxbeobachtungsdauer.END PROCmaxbeobachtungsdauer;REAL PROCminanfangszeitpunkt:modell.beschraenkung.minanfangszeitpunkt.END PROCminanfangszeitpunkt;REAL PROCmaxanfangszeitpunkt:modell.beschraenkung.maxanfangszeitpunkt.END PROCmaxanfangszeitpunkt;INT PROCanzahlbeobachtungspunkte:modell.beschraenkung.anzahlbeobachtungspunkte.END PROCanzahlbeobachtungspunkte;BOOL PROCmitkombinationen:modell.kombinationen.mitkombinationen.END PROCmitkombinationen;PROClistekombinationen(ROWmaxdimensionTEXT VARnamen,INT VARanzahl):INT VARi;anzahl:=modell.kombinationen.anzahl;FORiFROM1UPTOanzahlREPnamen(i):=modell.kombinationen.paar(i).name;PER;END PROClistekombinationen;PROCindiceskombinationen(INT CONSTkombnr,INT VARxachse,yachse,BOOL VARvertauschbar):xachse:=modell.kombinationen.paar(kombnr).xindex;yachse:=modell.kombinationen.paar(kombnr).yindex;vertauschbar:=modell.kombinationen.paar(kombnr).automatisch;END PROCindiceskombinationen;ZUSTAND PROCvorgabesystemzustand:zustand(modell.demolauf.original.startwert).END PROCvorgabesystemzustand;REAL PROCvorgabebeobachtungsdauer:modell.demolauf.original.beobachtungsdauer.END PROCvorgabebeobachtungsdauer;TEXT PROCvorgabekurve:modell.demolauf.original.kurve.END PROCvorgabekurve;REAL PROCvorgabevergleichsanfangszeitpunkt:modell.demolauf.vergleich.anfangszeitpunkt.END PROCvorgabevergleichsanfangszeitpunkt;REAL PROCvorgabevergleichsbeobachtungsdauer:modell.demolauf.vergleich.beobachtungsdauer.END PROCvorgabevergleichsbeobachtungsdauer;TEXT PROCvorgabevergleichskurve:modell.demolauf.vergleich.kurve.END PROCvorgabevergleichskurve;ZUSTAND PROCdemomuster:zustand(modell.demolauf.variablenwahl).END PROCdemomuster;BOOL PROCdemoautomatik:modell.demolauf.automatisch.END PROCdemoautomatik;INT PROCdemoxindex:modell.demolauf.xindex.END PROCdemoxindex;INT PROCdemoyindex:modell.demolauf.yindex.END PROCdemoyindex;TEXT PROCgleichung(INT CONSTi):TEXT VARt:=textdaten.gleichungen(i);t.END PROCgleichung;TEXT PROCcogleichung(INT CONSTi):TEXT VARt:=textdaten.cogleichungen(i);t.END PROCcogleichung;TEXT PROCdarstellungszeile(INT CONSTi):TEXT VARt:=textdaten.darstellungscode(i);t.END PROCdarstellungszeile;PROCkopplean(MODELLDGL VARaktuellesmodell):modell:=aktuellesmodell;IFexists(modell.codeundinfo)THENtextdaten:=old(modell.codeundinfo);FI;END PROCkopplean;PROCgleichungsprozeduren(TEXT CONSTdateiname):forget(dateiname,quiet);FILE VARprog:=sequentialfile(output,dateiname);schreibegleichungsproz;schreibecogleichungsproz;schreibedarstellung4;.schreibegleichungsproz:putline(prog,"ZUSTAND PROC f (REAL CONST zeit, "+" ZUSTAND CONST alter zustand, "+" PARAMETER CONST alle parameter):");deklarationen;gleichungen;ergebnis;putline(prog,"END PROC f;");.schreibecogleichungsproz:putline(prog,"ZUSTAND PROC co f (REAL CONST zeit, "+" ZUSTAND CONST alter zustand, "+" PARAMETER CONST alle parameter):");deklarationenvoncof;cogleichungen;cofergebnis;putline(prog,"END PROC co f;");.gleichungen:FORiFROM1UPTOmaxgleichungenWHILEgleichung(i)<>endezeichenREPputline(prog,gleichung(i));PER;.cogleichungen:INT VARi;FORiFROM1UPTOmaxgleichungenWHILEcogleichung(i)<>endezeichenREPputline(prog,cogleichung(i));PER;.deklarationen:putline(prog,"ZUSTAND VAR dvektorxyx"+
" := neuer zustand (DSUB alter zustand);");IFdimension>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOdimensionREPput(prog,elan(variablenkurzform(i))+" :: ");IFi=dimensionTHENputline(prog,"alter zustand SUB "+text(i)+" ;");ELSEputline(prog,"alter zustand SUB "+text(i)+" ,");FI;PER;FI;IFparameteranzahl>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOparameteranzahlREPput(prog,elan(parameterkurzform(i))+" :: ");IFi=parameteranzahlTHENputline(prog,"alle parameter SUB "+text(i)+" ;");ELSEputline(prog,"alle parameter SUB "+text(i)+" ,");FI;PER;FI;IFdimension>0THENput(prog,"REAL VAR ");FORiFROM1UPTOdimensionREPput(prog,praefix+elan(variablenkurzform(i)));IFi=dimensionTHENputline(prog,";")ELSEputline(prog,",")FI;PER;FI;.ergebnis:putline(prog,"ergebnisxyx .");putline(prog,"ergebnisxyx : ");FORiFROM1UPTOdimensionREPputline(prog,"replace (dvektorxyx ,"+text(i)+","+praefix+elan(variablenkurzform(i))+" );");PER;putline(prog,"dvektorxyx.");.deklarationenvoncof:putline(prog,"ZUSTAND VAR dvektorxyx"+" := neuer zustand ( co dimension);");IFdimension>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOdimensionREPput(prog,elan(variablenkurzform(i))+" :: ");IFi=dimensionTHENputline(prog,"alter zustand SUB "+text(i)+" ;");ELSEputline(prog,"alter zustand SUB "+text(i)+" ,");FI;PER;FI;IFparameteranzahl>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOparameteranzahlREPput(prog,elan(parameterkurzform(i))+" :: ");IFi=parameteranzahlTHENputline(prog,"alle parameter SUB "+text(i)+" ;");ELSEputline(prog,"alle parameter SUB "+text(i)+" ,");FI;PER;FI;IFcodimension>0THENput(prog,"REAL VAR ");FORiFROM1UPTOcodimensionREPput(prog,elan(covariablenkurzform(i)));IFi=codimensionTHENputline(prog,";")ELSEputline(prog,",")FI;PER;FI;.cofergebnis:putline(prog,"ergebnisxyx .");putline(prog,"ergebnisxyx : ");FORiFROM1UPTOcodimensionREPputline(prog,"replace (dvektorxyx ,"+text(i)+","+elan(covariablenkurzform(i))+" );");PER;putline(prog,"dvektorxyx.");.schreibedarstellung4:IFmitzusatzdarstellungTHENschreibedarstellungscodeELSEschreibeleerenprozedurkopfFI;.schreibeleerenprozedurkopf:putline(prog,darstellungskopf);putline(prog,darstellungsende);.schreibedarstellungscode:FORiFROM1UPTOmaxdarstellungszeilenWHILEdarstellungszeile(i)<>endezeichenREPputline(prog,darstellungszeile(i));PER;.END PROCgleichungsprozeduren;
TEXT PROCelan(TEXT CONSTalt):INT VARi:=1;TEXT VARt:="";FORiFROM1UPTO(LENGTHalt)REP IF(tanderstellei>=97CANDtanderstellei<=122)COR(tanderstellei>216CANDtanderstellei<=219)COR(tanderstellei>=48CANDtanderstellei<=57)THENtCATsubtext(alt,i,i)ELIF(tanderstellei>=65CANDtanderstellei<=
90)THENtCATcode(tanderstellei+32)ELIF(tanderstellei>=214CANDtanderstellei<=216)THENtCATcode(tanderstellei+3)ELSEtCAT" "FI PER;t.tanderstellei:code(subtext(alt,i,i))END PROCelan;
;OP:=(MODELLDGL VARmod,MODELLDGL CONSTm):CONCR(mod.name):=CONCR(m.name);CONCR(mod.variablen):=CONCR(m.variablen);CONCR(mod.covariablen):=CONCR(m.covariablen);CONCR(mod.parameter):=CONCR(m.parameter);CONCR(mod.darstellung):=CONCR(m.darstellung);mod.mitphasendiagramm:=m.mitphasendiagramm;mod.ganzzahlig:=m.ganzzahlig;mod.kombinationen.mitkombinationen:=m.kombinationen.mitkombinationen;mod.kombinationen.anzahl:=m.kombinationen.anzahl;INT VARi;FORiFROM1UPTOmaxdimensionREP CONCR(mod.kombinationen.paar(i)):=CONCR(m.kombinationen.paar(i))PER;mod.codeundinfo:=m.codeundinfo;CONCR(mod.beschraenkung):=CONCR(m.beschraenkung);CONCR(mod.demolauf.original):=CONCR(m.demolauf.original);CONCR(mod.demolauf.vergleich):=CONCR(m.demolauf.vergleich);mod.demolauf.xindex:=m.demolauf.xindex;mod.demolauf.yindex:=m.demolauf.yindex;mod.demolauf.automatisch:=m.demolauf.automatisch;mod.demolauf.variablenwahl:=m.demolauf.variablenwahl;mod.modellzustand:=m.modellzustand;mod.geschuetzt:=m.geschuetztEND OP:=;PROCwarteaufesc:TEXT VAReingabe;REPeingabe:=incharetyUNTILeingabe=escPER.END PROCwarteaufesc;PROCtasteeinlesen(TEXT VAReinlesetaste):REPeinlesetaste:=incharetyUNTIL
einlesetaste<>""PER END PROCtasteeinlesen;TEXT PROCkomprimiere(TEXT CONSTt):TEXT VARergebnis,z;INT VARi,l;suchevonvorne;suchevonhinten;ersetzekern;ergebnis.suchevonvorne:l:=LENGTHt;FORiFROM1UPTOlREPz:=(tSUBi)UNTIL NOT(z=" "CORz="_")PER;IFi>lTHENergebnis:=""ELSEergebnis:=subtext(t,i,l);FI.suchevonhinten:l:=LENGTHergebnis;FORiFROMlDOWNTO1REPz:=(ergebnisSUBi)UNTIL NOT(z=" "CORz="_")PER;IFi<1THENergebnis:=""ELSEergebnis:=subtext(ergebnis,1,i);FI.ersetzekern:changeall(ergebnis,"_"," ").END PROCkomprimiere;BOOL PROCnichtuebersetzbar(TEXT CONSTtext):BOOL VARergebnis;disablestop;do(text);ergebnis:=iserror;IFiserrorTHENclearerrorFI;enablestop;ergebnisEND PROCnichtuebersetzbar;PROCsetzemodelltyp(BOOL CONSTwirkungsdiagramm):wd:=wirkungsdiagramm;END PROCsetzemodelltyp;BOOL PROCwirkungsdgr:wdEND PROCwirkungsdgr;END PACKETmodellbasis;