summaryrefslogtreecommitdiff
path: root/app/schulis-mathematiksystem/1.0/src/mat.referenzobjekte
blob: 1a12aed10d79d7eb251b2db2bb78fadaca7752fc (plain)
1
2
3
4
5
6
7
8
PACKETreferenzobjekteDEFINES TERM,LISTE,=,<>,:=,nil,lowlevel,highlevel,ebene,initialisieren,neueliste,anhaengen,nachfolger,listenanfang,listenende,laenge,auswahl,standardfunktionen,eigenefunktionen,temporaerefunktionen,listenposition,termanzahl,variablenanzahl,anhaengenaneigenefunktionen,anhaengenantemporaerefunktionen,entfernenauseigenenfunktionen,entfernenaustemporaerenfunktionen,alphasort,variablenidentitaet,standardfunktion,eigenefunktion,temporaerefunktion,funktionsdefinition,variablenliste,variable,termliste,ausdruck,dyadisch,monadisch,funktionsauswertung,abbildungsdyade,abbildungsmonade,ableitungsoperation,konstante,selektion,logischedyade,vergleich,neweigenefunktion,newtemporaerefunktion,newfunktionsdefinition,newvariablenliste,newvariable,newtermliste,newterm,newdyade,newmonade,newfunktionsauswertung,newabbildungsdyade,newabbildungsmonade,newableitungsoperation,newkonstante,newselektion,newlogischedyade,newvergleich,LOESCHE,IS,LINKS,RECHTS,OPERAND,WERT,OPERATION,NAME,ARGUMENTE,DEFINITION,TERME,VARIABLEN,PLATZ,LISTENANFANG,LISTENENDE,LAENGE,ELEMENT,ABBILDUNGSAUSDRUCK,KOMPONENTE,INDEX,AUSDRUCK,BEDINGUNG,AKTION,ALTERNATIVE:LETtabellengroesse=16000,OBJEKTTABELLE=STRUCT(TERMzeigerauffreientabellenplatz,LISTElistederstandardfunktionen,listeeigenerfunktionen,listetemporaererfunktionen,dummyROWtabellengroesseTEXTzeile);TYPE TERM=INT,LISTE=STRUCT(TERManfang,ende,INTlaenge),ART=INT;TERM CONSTwurzel:=TERM:(tabellengroesse),nil:=TERM:(0);ART CONSTstandardfunktion:=ART:(1),eigenefunktion:=ART:(2),temporaerefunktion:=ART:(3),funktionsdefinition:=ART:(4),variablenliste:=ART:(5),variable:=ART:(6),termliste:=ART:(7),ausdruck:=ART:(8),dyadisch:=ART:(9),monadisch:=ART:(10),funktionsauswertung:=ART:(11),abbildungsdyade:=ART:(12),abbildungsmonade:=ART:(13),ableitungsoperation:=ART:(14),konstante:=ART:(15),selektion:=ART:(16),logischedyade:=ART:(17),vergleich:=ART:(18);BOUND OBJEKTTABELLE VARtabelle;TEXT VARdatenraumname:="mathematikobjekte 1";TEXT CONSTtextvonnil:=textvon(nil);OP:=(TERM VARlinks,TERM CONSTrechts):CONCR(links):=CONCR(rechts)END OP:=;BOOL OP=(TERM CONSTlinks,rechts):CONCR(links)=CONCR(rechts)END OP=;BOOL OP<>(TERM CONSTlinks,rechts):CONCR(links)<>CONCR(rechts)END OP<>;OP:=(LISTE VARlinks,LISTE CONSTrechts):links.anfang:=rechts.anfang;links.ende:=rechts.ende;links.laenge:=rechts.laengeEND OP:=;TERM PROClistenanfang(LISTE CONSTliste):liste.anfangEND PROClistenanfang;TERM PROClistenende(LISTE CONSTliste):liste.endeEND PROClistenende;INT PROClaenge(LISTE CONSTliste):liste.laengeEND PROClaenge;LISTE PROCneueliste(TERM CONSTanfang,ende):LISTE VARliste;initialisierediezeiger;bestimmelistenlaenge;liste.initialisierediezeiger:liste.anfang:=anfang;liste.ende:=ende.bestimmelistenlaenge:TERM VARzeiger:=liste.anfang;liste.laenge:=0;WHILEzeiger<>nilREPliste.laengeINCR1;zeiger:=nachfolger(zeiger)END REP END PROCneueliste;PROCanhaengen(LISTE VARliste,TERM CONSTneueselement):IFneueselement=nilTHENerrorstop(anwendungstext(1))END IF;IFleerelisteTHENliste.anfang:=neueselementELSEliste.endeZEIGTAUFneueselementEND IF;liste.ende:=neueselement;neueselementZEIGTAUFnil;liste.laengeINCR1.leereliste:liste.laenge=0END PROCanhaengen;PROCentfernen(LISTE VARliste,TERM CONSTloeschelement):IF(loeschelement=nil)CORleerelisteTHENerrorstop(anwendungstext(1))ELIFloeschelement=liste.anfangTHENliste.anfang:=nachfolger(liste.anfang);IFliste.laenge=1THENliste.ende:=nilEND IF ELIFloeschelement=listenende(liste)THENliste.ende:=vorgaenger(liste,loeschelement);vorgaenger(liste,loeschelement)ZEIGTAUFnilELSEvorgaenger(liste,loeschelement)ZEIGTAUFnachfolger(loeschelement)END IF;loeschelementZEIGTAUFnil;liste.laengeDECR1.leereliste:liste.laenge=0END PROCentfernen;TERM PROCnachfolger(TERM CONSTp):TERM VARnaechster;IF(p=nil)COR(tabelle.zeile(CONCR(p))="")THENerrorstop(anwendungstext(1))END IF;CONCR(naechster):=subtext(tabelle.zeile(CONCR(p)),2)ISUB1;naechsterEND PROCnachfolger;TERM PROCvorgaenger(LISTE CONSTliste,TERM CONSTzeiger):TERM VARlaufterm,merker;IF(zeiger=liste.
anfang)COR(liste.laenge<=1)THENerrorstop(anwendungstext(4))END IF;laufterm:=liste.anfang;WHILE(laufterm<>zeiger)CAND(laufterm<>nil)REP IFlaufterm<>zeigerTHENmerker:=laufterm;laufterm:=nachfolger(laufterm)END IF END REP;IFlaufterm=nilTHENerrorstop(anwendungstext(4))END IF;merkerEND PROCvorgaenger;OP ZEIGTAUF(TERM CONSTlinks,rechts):IFlinks=nilTHENerrorstop(anwendungstext(1))END IF;replace(tabelle.zeile(CONCR(links)),2,textvon(rechts))END OP ZEIGTAUF;TERM PROCauswahl(LISTE CONSTliste,INT CONSTgewuenschteselement):TERM VARsuchzeiger:=listenanfang(liste);INT VARi;IFlaenge(liste)<gewuenschteselementCORgewuenschteselement<1THENerrorstop(anwendungstext(4))END IF;FORiFROM2UPTOgewuenschteselementREPsuchzeiger:=nachfolger(suchzeiger)END REP;suchzeigerEND PROCauswahl;TERM PROClistenposition(LISTE CONSTobjektliste,TEXT CONSTname):TERM VARsuchzeiger:=listenanfang(objektliste);TEXT VARnameohneblanks:=name;changeall(nameohneblanks," ","");WHILE(suchzeiger<>nil)REP IFnameohneblanks=NAMEsuchzeigerTHEN LEAVElistenpositionWITHsuchzeigerELSEsuchzeiger:=nachfolger(suchzeiger)END IF END REP;suchzeigerEND PROClistenposition;INT PROCtermanzahl(TERM CONSTabbildungszeiger):IFabbildungszeigerISstandardfunktionTHEN1ELIF(abbildungszeigerISeigenefunktion)COR(abbildungszeigerIStemporaerefunktion)THEN LAENGE TERME DEFINITIONabbildungszeigerELSEerrorstop(anwendungstext(5));1END IF END PROCtermanzahl;INT PROCvariablenanzahl(TERM CONSTabbildungszeiger):IFabbildungszeigerISstandardfunktionTHEN1ELIF(abbildungszeigerISeigenefunktion)COR(abbildungszeigerIStemporaerefunktion)THEN LAENGE VARIABLEN DEFINITIONabbildungszeigerELSEerrorstop(anwendungstext(6));1END IF END PROCvariablenanzahl;LISTE PROCstandardfunktionen:tabelle.listederstandardfunktionenEND PROCstandardfunktionen;LISTE PROCeigenefunktionen:tabelle.listeeigenerfunktionenEND PROCeigenefunktionen;LISTE PROCtemporaerefunktionen:tabelle.listetemporaererfunktionenEND PROCtemporaerefunktionen;PROCanhaengenanstandardfunktionen(TERM CONSTneueselement):anhaengen(tabelle.listederstandardfunktionen,neueselement)END PROCanhaengenanstandardfunktionen;PROCanhaengenaneigenefunktionen(TERM CONSTneueselement):anhaengen(tabelle.listeeigenerfunktionen,neueselement)END PROCanhaengenaneigenefunktionen;PROCanhaengenantemporaerefunktionen(TERM CONSTneueselement):anhaengen(tabelle.listetemporaererfunktionen,neueselement)END PROCanhaengenantemporaerefunktionen;PROCentfernenauseigenenfunktionen(TERM CONSTzeiger):entfernen(tabelle.listeeigenerfunktionen,zeiger)END PROCentfernenauseigenenfunktionen;PROCentfernenaustemporaerenfunktionen(TERM CONSTzeiger):entfernen(tabelle.listetemporaererfunktionen,zeiger)END PROCentfernenaustemporaerenfunktionen;TERM PROCalphasort(LISTE VARliste,TEXT CONSTvariablenname):testeparameter;sortiereein.testeparameter:IF NOT((liste.anfang<>nil)CAND(liste.anfangISvariable))THENerrorstop(anwendungstext(1))END IF.sortiereein:TERM VARvorgaenger:=liste.anfang,lauf:=nachfolger(vorgaenger),neuerterm;INT VARanzahl:=2;WHILE(lauf<>nil)CAND(NAMElauf)<variablennameREPanzahlINCR1;vorgaenger:=lauf;lauf:=nachfolger(lauf)END REP;neuerterm:=newvariable(anzahl,variablenname);neuertermZEIGTAUFlauf;vorgaengerZEIGTAUFneuerterm;IFlauf=nilTHENliste.ende:=neuertermELSE WHILElauf<>nilREPanzahlINCR1;replace(tabelle.zeile(CONCR(lauf)),4,textvon(anzahl));lauf:=nachfolger(lauf)END REP END IF;liste.laenge:=anzahl;neuertermEND PROCalphasort;BOOL PROCvariablenidentitaet(LISTE CONSTlinks,rechts):laenge(links)=laenge(rechts)CANDidentischenamen.identischenamen:TERM VARlauf1:=listenanfang(links),lauf2:=listenanfang(rechts)WHILElauf2<>nilREP IF(NAMElauf1<>NAMElauf2)THEN LEAVEvariablenidentitaetWITH FALSE END IF;lauf1:=nachfolger(lauf1);lauf2:=nachfolger(lauf2)END REP;TRUE END PROCvariablenidentitaet;TERM PROCnewstandardfunktion(TEXT CONSTname):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATname;neuertermEND PROCnewstandardfunktion;TERM PROC
neweigenefunktion(TERM CONSTdefinition,TEXT CONSTname):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(definition);tabelle.zeile(CONCR(neuerterm))CATname;neuertermEND PROCneweigenefunktion;TERM PROCnewtemporaerefunktion(TERM CONSTdefinition):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(definition);neuertermEND PROCnewtemporaerefunktion;TERM PROCnewfunktionsdefinition(TERM CONSTvariablenliste,termliste):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(variablenliste);tabelle.zeile(CONCR(neuerterm))CATtextvon(termliste);neuertermEND PROCnewfunktionsdefinition;TERM PROCnewvariablenliste(TERM CONSTerstevariable,letztevariable,INT CONSTlaenge):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(erstevariable);tabelle.zeile(CONCR(neuerterm))CATtextvon(letztevariable);tabelle.zeile(CONCR(neuerterm))CATtextvon(laenge);neuertermEND PROCnewvariablenliste;TERM PROCnewvariable(INT CONSTposition,TEXT CONSTname):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(position);tabelle.zeile(CONCR(neuerterm))CATname;neuertermEND PROCnewvariable;TERM PROCnewtermliste(TERM CONSTersterterm,letzterterm,INT CONSTlaenge):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(ersterterm);tabelle.zeile(CONCR(neuerterm))CATtextvon(letzterterm);tabelle.zeile(CONCR(neuerterm))CATtextvon(laenge);neuertermEND PROCnewtermliste;TERM PROCnewterm(TERM CONSTarithmetischerausdruck):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(arithmetischerausdruck);neuertermEND PROCnewterm;TERM PROCnewdyade(TERM CONSTlinks,rechts,TEXT CONSToperator):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(links);tabelle.zeile(CONCR(neuerterm))CATtextvon(rechts);tabelle.zeile(CONCR(neuerterm))CAToperator;neuertermEND PROCnewdyade;TERM PROCnewmonade(TERM CONSToperand,TEXT CONSToperator):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="
";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(operand);tabelle.zeile(CONCR(neuerterm))CAToperator;neuertermEND PROCnewmonade;TERM PROCnewfunktionsauswertung(TERM CONSTabbildungsausdruck,argumentliste,INT CONSTkomponente):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(abbildungsausdruck);tabelle.zeile(CONCR(neuerterm))CATtextvon(argumentliste);tabelle.zeile(CONCR(neuerterm))CATtextvon(komponente);neuertermEND PROCnewfunktionsauswertung;TERM PROCnewabbildungsdyade(TERM CONSTlinks,rechts,TEXT CONSToperator):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(links);tabelle.zeile(CONCR(neuerterm))CATtextvon(rechts);tabelle.zeile(CONCR(neuerterm))CAToperator;neuertermEND PROCnewabbildungsdyade;TERM PROCnewabbildungsmonade(TERM CONSToperand,TEXT CONSToperator):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="
";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(operand);tabelle.zeile(CONCR(neuerterm))CAToperator;neuertermEND PROCnewabbildungsmonade;TERM PROCnewableitungsoperation(TERM CONST
abbildungsausdruck,INT CONSTvariable,komponente,TEXT CONSToperator):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(abbildungsausdruck);tabelle.zeile(CONCR(neuerterm))CATtextvon(variable);tabelle.zeile(CONCR(neuerterm))CATtextvon(komponente);tabelle.zeile(CONCR(neuerterm))CAToperator;neuertermEND PROCnewableitungsoperation;TERM PROCnewkonstante(REAL CONSTwert,TEXT CONSTname):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(wert);tabelle.zeile(CONCR(neuerterm))CATname;neuertermEND PROCnewkonstante;TERM PROCnewselektion(TERM CONSTbedingung,ausdruck,naechsteselektion):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(bedingung);tabelle.zeile(CONCR(neuerterm))CATtextvon(ausdruck);tabelle.zeile(CONCR(neuerterm))CATtextvon(naechsteselektion);neuertermEND PROCnewselektion;TERM PROCnewlogischedyade(TERM CONSTlinks,rechts,TEXT CONSToperator):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(links);tabelle.zeile(CONCR(neuerterm))CATtextvon(rechts);tabelle.zeile(CONCR(neuerterm))CAToperator;neuertermEND PROCnewlogischedyade;TERM PROCnewvergleich(TERM CONSTlinks,rechts,TEXT CONSToperator):TERM VARneuerterm:=allokiereterm;tabelle.zeile(CONCR(neuerterm)):="�";tabelle.zeile(CONCR(neuerterm))CATtextvonnil;tabelle.zeile(CONCR(neuerterm))CATtextvon(links);tabelle.zeile(CONCR(neuerterm))CATtextvon(rechts);tabelle.zeile(CONCR(neuerterm))CAToperator;neuerterm.END PROCnewvergleich;TERM PROCallokiereterm:TERM VARfreierterm;bestimmedenallokiertenzeiger;tabelle.zeigerauffreientabellenplatz:=naechsterfreierplatz;freierterm.bestimmedenallokiertenzeiger:IFtabelle.zeigerauffreientabellenplatz=nilTHENerrorstop(anwendungstext(2))END IF;freierterm:=tabelle.zeigerauffreientabellenplatz.naechsterfreierplatz:TERM VARsucher:=freierterm;REP CONCR(sucher)DECR1;IFsucher=nilTHEN CONCR(sucher):=tabellengroesse+1ELIFsucher=freiertermTHEN LEAVEnaechsterfreierplatzWITHnilELIFtabelle.zeile(CONCR(sucher))=""THEN LEAVEnaechsterfreierplatzWITHsucherEND IF END REP;sucherEND PROCallokiereterm;TEXT PROCtextvon(REAL CONSTwert):TEXT VARachtbyte:="        ";replace(achtbyte,1,wert);achtbyteEND PROCtextvon;TEXT PROCtextvon(INT CONSTwert):TEXT VARzweibyte:="  ";replace(zweibyte,1,wert);zweibyteEND PROCtextvon;TEXT PROCtextvon(TERM CONSTzeiger):textvon(CONCR(zeiger))END PROCtextvon;TEXT OP NAME(TERM CONSTterm):IFtermISstandardfunktionTHENsubtext(tabelle.zeile(CONCR(term)),4)ELIF(termISvariable)COR(termISeigenefunktion)THENsubtext(tabelle.zeile(CONCR(term)),6)ELIFtermISkonstanteTHENsubtext(tabelle.zeile(CONCR(term)),12)ELSEerrorstop(anwendungstext(12));""END IF END OP NAME;TERM OP DEFINITION(TERM CONSTterm):TERM VARdefinition;IF(termISeigenefunktion)COR(termIStemporaerefunktion)THEN CONCR(definition):=subtext(tabelle.zeile(CONCR(term)),4)ISUB1ELSEerrorstop(anwendungstext(16))END IF;definitionEND OP DEFINITION;TERM OP VARIABLEN(TERM CONSTterm):TERM VARvariablen;IFtermISfunktionsdefinitionTHEN CONCR(variablen):=subtext(tabelle.zeile(CONCR(term)),4)ISUB1ELSEerrorstop(anwendungstext(19))END IF;variablenEND OP VARIABLEN;TERM OP TERME(TERM CONSTterm):TERM VARterme;IF(termISfunktionsdefinition)THEN CONCR(terme):=subtext(tabelle.zeile(CONCR(term)),6)ISUB1ELSEerrorstop(anwendungstext(17))END IF;termeEND OP TERME;TERM OP LISTENANFANG(TERM CONSTterm):TERM VARanfang;IF(termISvariablenliste)COR(termIStermliste)THEN CONCR(anfang):=subtext(tabelle.zeile(CONCR(term)),4)ISUB1ELSEerrorstop(anwendungstext(21))END IF;anfangEND OP LISTENANFANG;TERM OP LISTENENDE(TERM CONSTterm):TERM VARende;IF(termISvariablenliste)COR(termIStermliste)THEN CONCR(ende):=subtext(tabelle.zeile(CONCR(
term)),6)ISUB1ELSEerrorstop(anwendungstext(22))END IF;endeEND OP LISTENENDE;INT OP LAENGE(TERM CONSTterm):IF NOT((termISvariablenliste)COR(termIStermliste))THENerrorstop(anwendungstext(20))END IF;subtext(tabelle.zeile(CONCR(term)),8)ISUB1END OP LAENGE;TERM OP ELEMENT(TERM CONSTlistenzeiger,INT CONSTnteselement):IF NOT((listenzeigerIStermliste)XOR(listenzeigerISvariablenliste))THENerrorstop(anwendungstext(18))END IF;auswahl(neueliste(LISTENANFANGlistenzeiger,LISTENENDElistenzeiger),nteselement)END OP ELEMENT;INT OP PLATZ(TERM CONSTterm):IF NOT(termISvariable)THENerrorstop(anwendungstext(25))END IF;subtext(tabelle.zeile(CONCR(term)),4)ISUB1END OP PLATZ;TERM OP AUSDRUCK(TERM CONSTterm):TERM VARformel;IF(termISausdruck)THEN CONCR(formel):=subtext(tabelle.zeile(CONCR(term)),4)ISUB1ELSEerrorstop(anwendungstext(27))END IF;formelEND OP AUSDRUCK;TERM OP LINKS(TERM CONSTterm):TERM VARlinks;IF(termISdyadisch)COR(termISabbildungsdyade)COR(termISlogischedyade)COR(termISvergleich)THEN CONCR(links):=subtext(tabelle.zeile(CONCR(term)),4)ISUB1ELSEerrorstop(anwendungstext(7))END IF;linksEND OP LINKS;TERM OP RECHTS(TERM CONSTterm):TERM VARrechts;IF(termISdyadisch)COR(termISabbildungsdyade)COR(termISlogischedyade)COR(termISvergleich)THEN CONCR(rechts):=subtext(tabelle.zeile(CONCR(term)),6)ISUB1ELSEerrorstop(anwendungstext(8))END IF;rechtsEND OP RECHTS;TEXT OP OPERATION(TERM CONSTterm):TEXT VARop;IF(termISdyadisch)COR(termISabbildungsdyade)COR(termISlogischedyade)COR(termISvergleich)THENop:=subtext(tabelle.zeile(CONCR(term)),8)ELIF(termISmonadisch)COR(termISabbildungsmonade)THENop:=subtext(tabelle.zeile(CONCR(term)),6)ELIFtermISableitungsoperationTHENop:=subtext(tabelle.zeile(CONCR(term)),10)ELSEerrorstop(anwendungstext(10))END IF;opEND OP OPERATION;TERM OP OPERAND(TERM CONSTterm):TERM VARoperand;IF(termISmonadisch)COR(termISabbildungsmonade)THEN CONCR(operand):=subtext(tabelle.zeile(CONCR(term)),4)ISUB1ELSEerrorstop(anwendungstext(9))END IF;operandEND OP OPERAND;TERM OP ABBILDUNGSAUSDRUCK(TERM CONSTterm):TERM VARfunktionsterm;IF(termISfunktionsauswertung)COR(termISableitungsoperation)THEN CONCR(funktionsterm):=subtext(tabelle.zeile(CONCR(term)),4)ISUB1ELSEerrorstop(anwendungstext(23))END IF;funktionstermEND OP ABBILDUNGSAUSDRUCK;TERM OP ARGUMENTE(TERM CONSTterm):TERM VARargumente;IF(termISfunktionsauswertung)THEN CONCR(argumente):=subtext(tabelle.zeile(CONCR(term)),6)ISUB1ELSEerrorstop(anwendungstext(13))END IF;argumenteEND OP ARGUMENTE;INT OP KOMPONENTE(TERM CONSTterm):IF NOT((termISfunktionsauswertung)COR(termISableitungsoperation))THENerrorstop(anwendungstext(24))END IF;subtext(tabelle.zeile(CONCR(term)),8)ISUB1END OP KOMPONENTE;INT OP INDEX(TERM CONSTterm):IF NOT(termISableitungsoperation)THENerrorstop(anwendungstext(26))END IF;subtext(tabelle.zeile(CONCR(term)),6)ISUB1END OP INDEX;REAL OP WERT(TERM CONSTterm):IF NOT(termISkonstante)THENerrorstop(anwendungstext(11))END IF;subtext(tabelle.zeile(CONCR(term)),4)RSUB1END OP WERT;TERM OP BEDINGUNG(TERM CONSTterm):TERM VARbedingung;IFtermISselektionTHEN CONCR(bedingung):=subtext(tabelle.zeile(CONCR(term)),4)ISUB1ELSEerrorstop(anwendungstext(28))END IF;bedingungEND OP BEDINGUNG;TERM OP AKTION(TERM CONSTterm):TERM VARaktion;IFtermISselektionTHEN CONCR(aktion):=subtext(tabelle.zeile(CONCR(term)),6)ISUB1ELSEerrorstop(anwendungstext(29))END IF;aktionEND OP AKTION;TERM OP ALTERNATIVE(TERM CONSTterm):TERM VARalternative;IFtermISselektionTHEN CONCR(alternative):=subtext(tabelle.zeile(CONCR(term)),8)ISUB1ELSEerrorstop(anwendungstext(30))END IF;alternativeEND OP ALTERNATIVE;PROClowlevel:datenraumname:="mathematikobjekte 1";ankoppelnEND PROClowlevel;PROChighlevel:datenraumname:="mathematikobjekte 2";ankoppelnEND PROChighlevel;INT PROCebene:int(datenraumnameSUB19)END PROCebene;PROCankoppeln:IFexists(datenraumname)THENtabelle:=old(datenraumname);IFdatenraumstrukturokCAND NOTiserrorTHENenablestop;LEAVEankoppelnEND IF;IFiserrorTHENclearerror;enablestopEND IF END IF;initialisieren.datenraumstrukturok:disablestop;(
listenanfang(standardfunktionen)ISstandardfunktion)AND NAMEnachfolger(listenanfang(standardfunktionen))="cos"END PROCankoppeln;PROCinitialisieren:LETanzahlelementarerfunktionen=19;INT VARi;ROWanzahlelementarerfunktionenTEXT CONSTname:=ROWanzahlelementarerfunktionenTEXT:("sin","cos","tan","cot","arcsin","arccos","arctan","arccot","ln","log2","log10","exp","sign","abs","wurzel","gauss","rund","ganz","frak");disablestop;footnote(anwendungstext(61));koppleeinendatenrauman;initialisieredieobjekttabelle;initialisieredielisten;tragedieelementarenabbildungenein;enablestop.koppleeinendatenrauman:forget(datenraumname,quiet);tabelle:=new(datenraumname).initialisieredieobjekttabelle:FORiFROMtabellengroesseDOWNTO1REPtabelle.zeile(i):=""END REP.initialisieredielisten:tabelle.zeigerauffreientabellenplatz:=wurzel;tabelle.listederstandardfunktionen:=neueliste(nil,nil);tabelle.listeeigenerfunktionen:=neueliste(nil,nil);tabelle.listetemporaererfunktionen:=neueliste(nil,nil);tabelle.dummy:=neueliste(nil,nil).tragedieelementarenabbildungenein:FORiFROM1UPTOanzahlelementarerfunktionenREPanhaengenanstandardfunktionen(newstandardfunktion(name(i)))END REP.END PROCinitialisieren;OP LOESCHE(TERM CONSTp):tabelle.zeile(CONCR(p)):="";IFtabellevoelliggefuelltTHENtabelle.zeigerauffreientabellenplatz:=pEND IF.tabellevoelliggefuellt:tabelle.zeigerauffreientabellenplatz=nil.END OP LOESCHE;BOOL OP IS(TERM CONSTt,ART CONSTtyp):(t<>nil)CAND(tabelle.zeile(CONCR(t))<>"")CANDcode(tabelle.zeile(CONCR(t))SUB1)=CONCR(typ)END OP IS;OP:=(ART VARlinks,ART CONSTrechts):CONCR(links):=CONCR(rechts)END OP:=;END PACKETreferenzobjekte;