summaryrefslogtreecommitdiff
path: root/app/schulis-mathematiksystem/1.0/src/mat.integrationsverfahren
blob: a8ae08d80cd0f0bf7d0ad76dc22ff56a3d2ba912 (plain)
1
2
3
4
5
6
7
PACKETintegrationsverfahrenDEFINESberechneintegral:LETweiter="w",naechste="q",menue="m",graphdefinieren="e",protokoll="p",escdrucken="d",drucken="D",info="?",abbruch="!",blank=" ",del="�",bell="�",esc="�",folgenvariable="n",folgentext=" a(n)",defaultfolge="n",varstellen=8,zahlstellen=12,maxiter=4048,rowlaenge=4049,rombergmaxspalten=13,anzahlnumerischeverfahren=4,anzahlverfahreninsgesamt=6,maxueberschriftlaenge=17,maxfehlermeldunglaenge=46,rechteckverfahren=1,trapezverfahren=2,simpsonverfahren=3,rombergverfahren=4;ROW4TEXT CONSTfehlermeldung:=ROW4TEXT:(anwendungstext(51),anwendungstext(52),"-","-");ROWanzahlnumerischeverfahrenTEXT CONSTueberschrift:=ROWanzahlnumerischeverfahrenTEXT:(anwendungstext(220),anwendungstext(221),anwendungstext(222),anwendungstext(223));ROW2TEXT CONSTunterstrich:=ROW2TEXT:("-----------------","---------------");ROWanzahlverfahreninsgesamtTEXT CONSTverfahrensname:=ROWanzahlverfahreninsgesamtTEXT:(anwendungstext(235),anwendungstext(236),anwendungstext(237),anwendungstext(238),anwendungstext(239),anwendungstext(240));ROW3TEXT CONSTrechteckstuetztext:=ROW3TEXT:(anwendungstext(89),anwendungstext(90),anwendungstext(91));ROWrombergmaxspaltenROWrombergmaxspaltenREAL VARmatrix;THESAURUS VARverfuegbareverfahren;INT VARzaehler,spaltenbreite,nrofinitializedpoints:=0;TEXT VARintegrationsfehler:="",tabellenname;BOUND ROWrowlaengeREAL VARstuetzpunkte;DATASPACE VARds;BOOL VARfirsttime:=TRUE;REAL VARschrittweite;TEXT CONSTloeschzeile:=23*" ";verfuegbareverfahren:=emptythesaurus;FORzaehlerFROM1UPTOanzahlverfahreninsgesamtREPinsert(verfuegbareverfahren,verfahrensname[zaehler])PER PROCinitstuetzpunkte(ABBILDUNG CONSTabb,REAL CONSTuntergrenze,obergrenze,INT CONSTanzahlstuetzpunkte,varnr,VECTOR CONSTparameter,BOOL VARfehler):INT VARi;TERM CONSTt:=AUSDRUCKlistenanfang(abbildungsterme(abb));schrittweite:=(obergrenze-untergrenze)/real(anzahlstuetzpunkte-1);VECTOR VARvec:=parameter;nrofinitializedpoints:=0;forget(ds);ds:=nilspace;stuetzpunkte:=ds;FORiFROM1UPTOanzahlstuetzpunkteREPreplace(vec,varnr,untergrenze+real(i-1)*schrittweite);stuetzpunkte[i]:=result(t,vec);IFiserrorTHENclearerror;fehler:=TRUE;integrationsfehler:=fehlermeldung[1];LEAVEinitstuetzpunkteEND IF END REP;nrofinitializedpoints:=anzahlstuetzpunkteEND PROCinitstuetzpunkte;BOOL PROCispoweroftwo(INT VARi):INT VARdoppel:=1,log:=0;REPEAT IFdoppel=iTHENi:=log;LEAVEispoweroftwoWITH TRUE END IF;doppelINCRdoppel;logINCR1UNTILdoppel>iCORiserrorPER;clearerror;FALSE END PROCispoweroftwo;REAL PROCtrapezintegration:INT VARi;REAL VARsumme:=0.5*(stuetzpunkte[1]+stuetzpunkte[nrofinitializedpoints]);FORiFROM2UPTOnrofinitializedpoints-1REPsumme:=summe+stuetzpunkte[i]END REPEAT;summe*schrittweiteEND PROCtrapezintegration;LETlinks=1,mitte=2,rechts=3;INT VARrechteckstuetze:=links;REAL PROCrechtecksintegration:REAL VARsumme;INT VARi;IFrechteckstuetze<rechtsTHENsumme:=stuetzpunkte[1]ELSEsumme:=stuetzpunkte[nrofinitializedpoints]END IF;FORiFROM2UPTOnrofinitializedpoints-1REPsumme:=summe+stuetzpunkte[i]END REPEAT;summe*schrittweiteEND PROCrechtecksintegration;REAL PROCsimpsonintegration:IF(nrofinitializedpointsAND1)=0THENintegrationsfehler:=fehlermeldung[4];LEAVEsimpsonintegrationWITH0.0END IF;REAL VARsumme:=stuetzpunkte[1]+stuetzpunkte[nrofinitializedpoints];INT VARi:=2;REP IFiMOD2=0THENsumme:=summe+4.0*stuetzpunkte[i]ELSEsumme:=summe+2.0*stuetzpunkte[i]END IF;iINCR1UNTILi>nrofinitializedpoints-1PER;summe*schrittweite/3.0END PROCsimpsonintegration;REAL PROCrombergintegration:INT VARintervallgroesse,anzahlschachtelungen,i,j;REAL VARnenner:=4.0;berechneanzahlderschachtelungen;berechneintegrale;erzeugerombergschema;ergebnis.berechneanzahlderschachtelungen:anzahlschachtelungen:=nrofinitializedpoints-1;IF NOTispoweroftwo(anzahlschachtelungen)THENintegrationsfehler:=fehlermeldung[3];LEAVErombergintegrationWITH0.0END IF.berechneintegrale:intervallgroesse:=1;FORiFROManzahlschachtelungenDOWNTO0REPmatrix[1][i+1]:=trapezintegralspezial;intervallgroesseINCRintervallgroesseEND REP.
trapezintegralspezial:REAL VARsumme:=(stuetzpunkte[1]+stuetzpunkte[nrofinitializedpoints])/2.0;j:=1+intervallgroesse;WHILEj<nrofinitializedpointsREPsumme:=summe+stuetzpunkte[j];jINCRintervallgroessePER;summe*schrittweite*real(intervallgroesse).erzeugerombergschema:FORjFROM1UPTOanzahlschachtelungenREP FORiFROM1UPTOanzahlschachtelungen-j+1REPmatrix[j+1][i]:=matrix[j][i+1]+(matrix[j][i+1]-matrix[j][i])/(nenner-1.0);PER;nenner:=nenner*4.0PER.ergebnis:matrix[anzahlschachtelungen+1][1]END PROCrombergintegration;PROCerzeugenaeherungsfolge(REAL CONSTuntergrenzefkt,obergrenzefkt,INT CONSTuntergrenzefolge,obergrenzefolge,ABBILDUNG CONSTfolge,funktion,INT CONSTvarnr,VECTOR CONSTparameter,ROWanzahlnumerischeverfahrenINT CONSTreihenfolge,INT VARerstersatz,erstespalte):BOOL VARfehler;INT VARntesfolgenglied,i,j;ROWanzahlnumerischeverfahrenTEXT VARnaeherungen;VECTOR VARfolgenvector:=nilvector;TERM VARfolgenterm:=AUSDRUCKlistenanfang(abbildungsterme(folge));BOOL VARmatrixzeigen:=nurrombergverfahrenausgewaehltCANDnureinfolgengliedCANDfolgengliedistzweierpotenz;FILE VARf:=sequentialfile(output,tabellenname);berechnespaltenbreite;schreibetabellenkopf;berechnewerteundschreibeindatei;setzekoordinaten.nurrombergverfahrenausgewaehlt:reihenfolge[1]=rombergverfahrenANDreihenfolge[2]=0.nureinfolgenglied:untergrenzefolge=obergrenzefolge.folgengliedistzweierpotenz:i:=untergrenzefolge;ermittlefolgenglied;INT VARschachtelungen:=ntesfolgenglied;ispoweroftwo(schachtelungen).berechnespaltenbreite:IF NOTmatrixzeigenTHENspaltenbreite:=max(gesamtstellen(ebene),maxueberschriftlaenge)+2;IFlaenge(abbildungsvariablen(funktion))<>1THENspaltenbreite:=max(spaltenbreite,varstellen+zahlstellen+2)END IF;ELSEspaltenbreite:=gesamtstellen(ebene)+1END IF.schreibetabellenkopf:TEXT VARkopfzeile,trennlinie;IFlength(parameter)<=10THENtrageparametereinEND IF;IFmatrixzeigenTHENkopfzeile:=ueberschrift[rombergverfahren]+"    "+folgenvariable+" = "+text(untergrenzefolge)+"    "+folgentext+" = "+text(ntesfolgenglied);trennlinie:=(schachtelungen+1)*spaltenbreite*waagerecht;maxlinelength(f,max(LENGTHtrennlinie+1,maxfehlermeldunglaenge+16))ELSEkopfzeile:="  "+folgenvariable+"  "+senkrecht;kopfzeileCATfolgentext;trennlinie:=5*waagerecht+kreuz+5*waagerecht;FORiFROM1UPTOanzahlnumerischeverfahrenREP IFreihenfolge[i]<>0THENkopfzeileCATsenkrecht+center(spaltenbreite,ueberschrift[reihenfolge[i]]);trennlinieCATkreuz+spaltenbreite*waagerechtEND IF PER;maxlinelength(f,max(LENGTHtrennlinie+1,maxfehlermeldunglaenge+16))END IF;write(f,kopfzeile);line(f);write(f,trennlinie);line(f).trageparameterein:FORiFROM1UPTO LENGTHparameterREP IFi<>varnrTHENwrite(f,text(NAMEauswahl(abbildungsvariablen(funktion),i),varstellen)+"="+(12-varstellen)*blank+wandle(parameterSUBi));line(f)END IF END REPEAT.berechnewerteundschreibeindatei:cursor(36,24);FORiFROMuntergrenzefolgeUPTOobergrenzefolgeREPcout(i);ermittlefolgenglied;IF NOTfehlerTHENinitstuetzpunkte(funktion,untergrenzefkt,obergrenzefkt,ntesfolgenglied+1,varnr,parameter,fehler);IFincharety=abbruchTHEN LEAVEberechnewerteundschreibeindateiELIFfehlerTHENschreibefehlermeldungindatei;LEAVEberechnewerteundschreibeindateiEND IF ELSEschreibefehlermeldungindatei;LEAVEberechnewerteundschreibeindateiEND IF;ermittlenaeherungenEND REP.ermittlefolgenglied:replace(folgenvector,1,real(i));ntesfolgenglied:=int(result(folgenterm,folgenvector));IFiserrorORntesfolgenglied<=0ORntesfolgenglied>maxiterTHENclearerror;fehler:=TRUE;integrationsfehler:=fehlermeldung[2]ELSEfehler:=FALSE END IF.ermittlenaeherungen:FORjFROM1UPTOanzahlnumerischeverfahrenREPnaeherungen[j]:=itesangekreuztesverfahrenPER;IFmatrixzeigenTHENschreiberombergmatrixELSEschreibeergebnisseindateiEND IF.itesangekreuztesverfahren:SELECTreihenfolge[j]OF CASErechteckverfahren:sonderbehandlungrechteckverfahrenCASEtrapezverfahren:berechneundueberpruefefehler(REAL PROCtrapezintegration)CASEsimpsonverfahren:berechneundueberpruefefehler(REAL PROCsimpsonintegration)CASErombergverfahren:berechneundueberpruefefehler(REAL PROC
rombergintegration)OTHERWISE""END SELECT.sonderbehandlungrechteckverfahren:IFrechteckstuetze<>mitteTHENberechneundueberpruefefehler(REAL PROCrechtecksintegration)ELSE DATASPACE VARstdstuetzpunkte:=ds;REAL VARhalbesintervall:=(obergrenzefkt-untergrenzefkt)/real(ntesfolgenglied)/2.0;TEXT VARzwischenergebnis;initstuetzpunkte(funktion,untergrenzefkt+halbesintervall,obergrenzefkt+halbesintervall,ntesfolgenglied+1,varnr,parameter,fehler);IFincharety=abbruchTHEN LEAVEermittlenaeherungenEND IF;IFfehlerTHENintegrationsfehlerELSEzwischenergebnis:=berechneundueberpruefefehler(REAL PROCrechtecksintegration);forget(ds);ds:=stdstuetzpunkte;forget(stdstuetzpunkte);zwischenergebnisEND IF END IF.schreibefehlermeldungindatei:put(f,text(i,4)+blank+senkrecht+text(ntesfolgenglied,4));write(f,senkrecht+blank+integrationsfehler);line(f);fehler:=FALSE.schreibeergebnisseindatei:put(f,text(i,4)+blank+senkrecht+text(ntesfolgenglied,4));FORjFROM1UPTOanzahlnumerischeverfahrenREP IFreihenfolge[j]<>0THENwrite(f,senkrecht+text(naeherungen[j],spaltenbreite))END IF PER;line(f).schreiberombergmatrix:INT VARzeile,spalte;FORzeileFROM1UPTOschachtelungen+1REP FORspalteFROM1UPTOzeileREPput(f,wandle(matrix[spalte][zeile+1-spalte]))PER;line(f)PER.setzekoordinaten:IFmatrixzeigenTHENerstespalte:=1ELSEerstespalte:=13;END IF;erstersatz:=2+LENGTHparameterEND PROCerzeugenaeherungsfolge;TEXT PROCberechneundueberpruefefehler(REAL PROCverfahren):REAL VARergebnis;TEXT VARzeile;integrationsfehler:="";ergebnis:=verfahren;IFintegrationsfehler=""THENzeile:=wandle(ergebnis)ELSEzeile:=center(spaltenbreite,integrationsfehler)END IF;zeileEND PROCberechneundueberpruefefehler;PROCberechneintegral(ABBILDUNG CONSTeingegebenefunktion):ABBILDUNG VARabb:=eingegebenefunktion,folge;VECTOR VARvec:=vector(laenge(abbildungsvariablen(abb)));TERM VARvarterm;TAG VARt:=formular(20);ROW100TEXT VARtexte;INT VARfeldnummer,varindex,lowerfolge,upperfolge,nrgraphverfahren,i,zeile,spalte;REAL VARlowerfkt,upperfkt;TEXT VARfolgenname,fehlermeldung;BOOL VARnumerisch;ROWanzahlnumerischeverfahrenINT VARreihenfolge;WINDOW VARw:=window(2,7,77,16);FORiFROM1UPTOlength(vec)REPreplace(vec,i,0.0)END REP;disablestop;setzedefaultgraph;firsttime:=TRUE;ueberpruefeeingangsfunktion;schreibearbeitsfunktion(eingegebenefunktion);setzedefaultwerteinmaske;REPfootnote(anwendungstext(115));bearbeiteeinefunktionUNTILausstiegszeichen=naechsteORausstiegszeichen=menueEND REPEAT;forget(ds);verfahrensende(ausstiegszeichen).ueberpruefeeingangsfunktion:IFlaenge(abbildungsterme(abb))<>1THENverfahrensende(naechste);gibmeldung(anwendungstext(155));LEAVEberechneintegralELIFkomplexefunktion(abb)THENabb:=aufloesung(abb)END IF.setzedefaultwerteinmaske:BOOL VARfeld2sperren:=ebene=1CORlaenge(abbildungsvariablen(abb))=1;INT VARersteseingabefeld;feldnummer:=2;IFfeld2sperrenTHENsetfieldinfos(t,2,TRUE,TRUE,FALSE);feldnummer:=3END IF;texte[2]:=NAMElistenanfang(abbildungsvariablen(abb));texte[3]:="0.0";texte[4]:="1.0";texte[5]:=defaultfolge;texte[6]:="1";texte[7]:="10";ersteseingabefeld:=feldnummer.bearbeiteeinefunktion:strich(6);show(t);REPergaenzeunterstriche;putget(t,texte,feldnummer,ausstiegszeichen);IFiserrorTHENgibmeldung(errormessage);clearerror;ausstiegszeichen:=naechsteEND IF UNTILpos(weiter+naechste+menue+info,ausstiegszeichen)>0END REPEAT;ueberpruefeverlasszeichen.ergaenzeunterstriche:FORiFROMersteseingabefeldUPTO7REPtexte[i]CAT((zahlstellen-length(texte[i]))*"_")PER.ueberpruefeverlasszeichen:IFausstiegszeichen=naechsteORausstiegszeichen=menueTHENverfahrensende(ausstiegszeichen);LEAVEberechneintegralELIFausstiegszeichen=infoTHEN IFfeld2sperrenTHENgibinfofensteraus(w,18)ELSEgibinfofensteraus(w,19)END IF ELSEueberpruefeargumente;lasseggfparametereingeben;lasseverfahrenauswaehlen;berechneundzeigeergebnis;loeschetemporaerevariablenEND IF.ueberpruefeargumente:FORiFROM2UPTO7REPchangeall(texte[i],"_","")PER;ueberpruefevariable;ueberpruefefunktionsgrenzen;ueberpruefefolge;ueberpruefefolgengrenzen.ueberpruefevariable:varterm:=listenposition(
abbildungsvariablen(abb),texte[2]);IFvarterm=nilTHENgibmeldung(anwendungstext(147)+compress(texte[2])+anwendungstext(148));feldnummer:=2;zurueckzumaskeELSEvarindex:=PLATZvartermEND IF.ueberpruefefunktionsgrenzen:lowerfkt:=realzahl(texte[3]);IFiserrorTHENclearerror;feldnummer:=3;gibmeldung(anwendungstext(149));zurueckzumaskeEND IF;upperfkt:=realzahl(texte[4]);IFiserrorTHENclearerror;feldnummer:=4;gibmeldung(anwendungstext(150));zurueckzumaskeEND IF;IFlowerfkt>upperfktTHENfeldnummer:=4;gibmeldung(anwendungstext(160));zurueckzumaskeEND IF.ueberpruefefolge:folgenname:=scratchfunctionname;folge:=neuefunktion(folgenname+":n->"+texte[5]);IFkomplexefunktion(folge)THEN ABBILDUNG VARzwischen:=folge;folge:=aufloesung(folge);loescheabbildung(zwischen)END IF;IFiserrorTHENclearerror;gibmeldung(errormessage);feldnummer:=5;zurueckzumaskeELIFlaenge(abbildungsvariablen(folge))<>1THENgibmeldung(anwendungstext(151));loescheabbildung(folge);feldnummer:=4;zurueckzumaskeELIFlaenge(abbildungsterme(folge))<>1THENgibmeldung(anwendungstext(162));loescheabbildung(folge);feldnummer:=4;zurueckzumaskeEND IF.ueberpruefefolgengrenzen:lowerfolge:=int(realzahl(texte[6]));IFiserrorTHENclearerror;loescheabbildung(folge);feldnummer:=6;gibmeldung(anwendungstext(149));zurueckzumaskeEND IF;upperfolge:=int(realzahl(texte[7]));IFiserrorTHENclearerror;loescheabbildung(folge);feldnummer:=7;gibmeldung(anwendungstext(150));zurueckzumaskeEND IF;IFlowerfolge>upperfolgeTHENfeldnummer:=6;gibmeldung(anwendungstext(161));loescheabbildung(folge);zurueckzumaskeEND IF.zurueckzumaske:ausstiegszeichen:=weiter;LEAVEbearbeiteeinefunktion.lasseggfparametereingeben:IF LENGTHvec<>1THENcursor(1,5);out(anwendungstext(74));REPcursor(12,5);belegeparameter(vec,varindex,abbildungsvariablen(abb),menue+weiter+naechste+info,ausstiegszeichen);IFausstiegszeichen=infoTHENgibinfofensteraus(w,8);strich(6);footnote(anwendungstext(115))ELIFausstiegszeichen=menueORausstiegszeichen=naechsteTHENverfahrensende(ausstiegszeichen);loescheabbildung(folge);LEAVEberechneintegralEND IF UNTILausstiegszeichen=weiterEND REPEAT;cursor(1,5);out(del)END IF.lasseverfahrenauswaehlen:THESAURUS VARth:=emptythesaurus;REPth:=some(24,7,56,15,verfuegbareverfahren,anwendungstext(173),anwendungstext(182));IFlsexitkey=menueTHENverfahrensende(menue);loescheabbildung(folge);LEAVEberechneintegralEND IF;IFauswahlgueltig(th,reihenfolge,nrgraphverfahren,fehlermeldung,numerisch)THEN LEAVElasseverfahrenauswaehlenEND IF;gibmeldung(fehlermeldung)END REP.berechneundzeigeergebnis:INT VARerstersatz,erstespalte;TEXT VARausstiegszeichen;IFrechteckverfahrenausgewaehltTHENsonderfunktionenrechteckverfahren;IFrechteckstuetze=0THENloescheabbildung(folge);verfahrensende(menue);LEAVEberechneintegralEND IF END IF;IFnumerischTHENfootnote(anwendungstext(117));tabellenname:=scratchdateiname;erzeugenaeherungsfolge(lowerfkt,upperfkt,lowerfolge,upperfolge,folge,abb,varindex,vec,reihenfolge,erstersatz,erstespalte);zeile:=erstersatz;spalte:=erstespalte;outframe(w);REPfootnote(anwendungstext(115));scroll(w,tabellenname,spalte,zeile,spaltenbreite+1,erstersatz,erstespalte,weiter+naechste+menue+info+escdrucken,ausstiegszeichen);IFausstiegszeichen=infoTHENgibinfoaus(9)ELIFausstiegszeichen=escdruckenTHENdruckedietabelleEND IF UNTILausstiegszeichen<>infoCANDausstiegszeichen<>escdruckenEND REPEAT;forget(tabellenname,quiet)ELSEgraphischeveranschaulichung(nrgraphverfahren,texte,eingegebenefunktion,abb,varindex,lowerfkt,upperfkt,vec,folge,lowerfolge,upperfolge,ausstiegszeichen)END IF.druckedietabelle:aufbereitetdrucken(tabellenname,funktionsstring(eingegebenefunktion),spalte,zeile,spaltenbreite+1);outframe(w).loeschetemporaerevariablen:loescheabbildung(folge);feldnummer:=ersteseingabefeld.rechteckverfahrenausgewaehlt:nrgraphverfahren=rechteckverfahrenOR(thCONTAINSverfahrensname[1])END PROCberechneintegral;PROCgibinfoaus(INT CONSTnr):show(formular(nr));warteEND PROCgibinfoaus;BOOL PROCauswahlgueltig(THESAURUS CONSTauswahl,ROWanzahlnumerischeverfahrenINT VARreihenfolge,INT
 VARnrgraphverfahren,TEXT VARevtlfehlertext,BOOL VARnumerisch):INT VARindex:=0,index2,naechstereintraginreihung:=1,numerischeverfahrenausgewaehlt:=0,graphischeverfahrenausgewaehlt:=0;TEXT VAReintrag;bildelisten;listensindkorrekt.bildelisten:nrgraphverfahren:=0;get(auswahl,eintrag,index);WHILEeintrag<>""REPindex2:=link(verfuegbareverfahren,eintrag);IFindex2=2CORindex2=4THENgraphischeverfahrenausgewaehltINCR1;nrgraphverfahren:=index2DIV2ELSEnumerischeverfahrenausgewaehltINCR1;reihenfolge[naechstereintraginreihung]:=(index2+2)DIV2;naechstereintraginreihungINCR1END IF;get(auswahl,eintrag,index)END REPEAT;FORindexFROMnaechstereintraginreihungUPTOanzahlnumerischeverfahrenREPreihenfolge[index]:=0END REPEAT.listensindkorrekt:numerisch:=numerischeverfahrenausgewaehlt<>0;IFnumerischTHEN IFgraphischeverfahrenausgewaehlt<>0THENevtlfehlertext:=anwendungstext(164);FALSE ELSE TRUE END IF ELSE IFgraphischeverfahrenausgewaehlt=1THEN TRUE ELSE IFgraphischeverfahrenausgewaehlt=0THENevtlfehlertext:=anwendungstext(167)ELSEevtlfehlertext:=anwendungstext(165)END IF;FALSE END IF END IF END PROCauswahlgueltig;PROCgraphischeveranschaulichung(INT CONSTnr,ROW100TEXT VARtexte,ABBILDUNG CONSToriginal,fkt,INT CONSTvarind,REAL CONSTlinkegrenze,rechtegrenze,VECTOR CONSTparameterwerte,ABBILDUNG CONSTfolge,INT CONSTfolgenanfang,folgenende,TEXT VARausstiegszeichen):TEXT VARmessage;BOOL VARzeichnungliegtvor:=FALSE;bereitegraphischeveranschaulichungvor;fuehregraphischeveranschaulichungdurch;beendegraphischeveranschaulichung.bereitegraphischeveranschaulichungvor:initkoordinatensystem;bauegraphbildschirmauf(original,"Integral");cursor(2,3);out(funktionszeile);cursor(2,4);out(folgenzeile);schreibebegleittext(nr).funktionszeile:"Variable "+texte[2]+"   von "+texte[3]+" bis "+texte[4].folgenzeile:"Anzahl der Intervalle a(n) = "+texte[5]+"   für n von "+texte[6]+" bis "+texte[7].fuehregraphischeveranschaulichungdurch:BOOL VARaufbauen;initialisierevariablen;REPaufbauen:=TRUE;gibdasbildderfunktionaus;berechnedasfolgenglied;berechnestuetzpunkte;gibinfos;zeichnevierecke;verarbeiteeingabezeichen;zeichnefusszeile("");IF NOTaufbauenTHENzeichnevierecke;deletelastpictureEND IF PER.initialisierevariablen:BOOL VARfehler:=FALSE;INT VARaktuellesfolgenglied:=folgenanfang,folgenresultat,offset1,offset2;VECTOR VARfolgenvector:=vector(1);TERM VARfolgenterm:=AUSDRUCKlistenanfang(abbildungsterme(folge));REAL VARrand:=0.1*(rechtegrenze-linkegrenze),linkerrand:=linkegrenze-rand,rechterrand:=rechtegrenze+rand;IFnr=2THENoffset1:=1;offset2:=2ELIFrechteckstuetze<rechtsTHENoffset1:=1;offset2:=1ELSEoffset1:=2;offset2:=2END IF.gibdasbildderfunktionaus:IFfirsttimeTHENberechnekoordinatensystem(fkt,linkerrand,rechterrand,parameterwerte,varind);firsttime:=FALSE END IF;IFzeichnungliegtvorTHENplotscreenmemoryELSEzeichnekoordinatensystem;normalgraphzeichnen(fkt,parameterwerte,varind);graphfenstereinstellen;pen(1,1,1,sekantenstift);newpicture(sekantenstift);zeichneasymptote(linkegrenze);zeichneasymptote(rechtegrenze);zeichnungliegtvor:=TRUE END IF.berechnedasfolgenglied:replace(folgenvector,1,real(aktuellesfolgenglied));folgenresultat:=int(round(result(folgenterm,folgenvector),0));IFiserrorCORfolgenresultat<=0CORfolgenresultat>maxiterTHENclearerror;fehler:=TRUE;message:=anwendungstext(212);LEAVEfuehregraphischeveranschaulichungdurchEND IF.berechnestuetzpunkte:IFnr=1CANDrechteckstuetze=mitteTHEN REAL VARhalbesintervall:=(rechtegrenze-linkegrenze)/real(folgenresultat*2);initstuetzpunkte(fkt,linkegrenze+halbesintervall,rechtegrenze+halbesintervall,folgenresultat+1,varind,parameterwerte,fehler)ELSEinitstuetzpunkte(fkt,linkegrenze,rechtegrenze,folgenresultat+1,varind,parameterwerte,fehler)END IF;IFfehlerTHENmessage:=anwendungstext(213);LEAVEfuehregraphischeveranschaulichungdurchEND IF.gibinfos:cursor(56,11);out(text(folgenresultat,4));cursor(56,14);out(text(compress(wandle(wert)),23)).wert:IFnr=1THENrechtecksintegrationELSEtrapezintegrationEND IF.zeichnevierecke:INT VARz;REAL VARxwert1:=linkegrenze,
streifenbreite:=(rechtegrenze-linkegrenze)/real(folgenresultat);IFaufbauenTHENpen(1,1,1,lotstift)ELSEpen(0,0,0,1)END IF;newpicture(lotstift);FORzFROM0UPTOfolgenresultat-1REPmatmove(xwert1,0.0);matdraw(xwert1,stuetzpunkte[z+offset1]);xwert1:=linkegrenze+real(z+1)*streifenbreite;matdraw(xwert1,stuetzpunkte[z+offset2]);matdraw(xwert1,0.0)END REP;IF NOTaufbauenTHENdeletelastpictureEND IF.verarbeiteeingabezeichen:TEXT VARch;zeichnefusszeile(anwendungstext(206));REPclearbuffer;inchar(ch);IFch=escTHENinchar(ausstiegszeichen);SELECTpos(graphdefinieren+weiter+naechste+menue,ausstiegszeichen)OF CASE1:definierebereich;LEAVEverarbeiteeingabezeichenCASE2,3,4:LEAVEfuehregraphischeveranschaulichungdurchOTHERWISEout(bell)END SELECT ELIFmehrerefolgengliederCANDch="+"CANDaktuellesfolgenglied<folgenendeTHENaktuellesfolgengliedINCR1;aufbauen:=FALSE;LEAVEverarbeiteeingabezeichenELIFmehrerefolgengliederCANDch="-"CANDaktuellesfolgenglied>folgenanfangTHENaktuellesfolgengliedDECR1;aufbauen:=FALSE;LEAVEverarbeiteeingabezeichenELIFch=druckenTHENdruckegraphELIFch=protokollTHENzeigeprotokolldesgraphenELSEout(bell)END IF END REP.zeigeprotokolldesgraphen:gibprotokollaus(anwendungstext(99),"dwqm",ausstiegszeichen);IFausstiegszeichen=weiterTHENschreibebegleittext(nr);gibinfos;zeichnefusszeile(anwendungstext(206))ELSE LEAVEfuehregraphischeveranschaulichungdurchEND IF.mehrerefolgenglieder:folgenanfang<>folgenende.definierebereich:cursor(56,19);out(loeschzeile);cursor(56,18);out(loeschzeile);cursor(56,17);out(loeschzeile);cursor(56,16);out(loeschzeile);cursor(56,14);out(loeschzeile);cursor(56,13);out(loeschzeile);graphfenstereinstellen;loeschezeichnung;definitionsmenu(TRUE,ausstiegszeichen);IFausstiegszeichen<>weiterTHEN LEAVEfuehregraphischeveranschaulichungdurchEND IF;initkoordinatensystem;zeichnungliegtvor:=FALSE;firsttime:=TRUE;linkerrand:=koordinatensystemxmin;rechterrand:=koordinatensystemxmax;schreibebegleittext(nr).beendegraphischeveranschaulichung:IFfehlerTHENgibgraphicmeldung(message);fehler:=FALSE END IF;beendegraphikarbeit;endplot;plotend;IFausstiegszeichen=weiterTHENschreibestatuszeile("Integral");schreibearbeitsfunktion(original);IFfehlerTHENgibmeldung(message)END IF END IF END PROCgraphischeveranschaulichung;PROCschreibebegleittext(INT CONSTnr):cursor(56,7);out(ueberschrift[nr]);cursor(56,8);out(unterstrich[nr]);cursor(56,10);out(anwendungstext(241));cursor(56,13);out(anwendungstext(242));cursor(56,16);out(anwendungstext(243));cursor(56,17);out(anwendungstext(244));cursor(56,18);out(anwendungstext(245));cursor(56,19);out(anwendungstext(246))END PROCschreibebegleittext;PROCsonderfunktionenrechteckverfahren:THESAURUS VARth:=emptythesaurus;INT VARi;FORiFROM1UPTO3REPinsert(th,rechteckstuetztext[i])PER;rechteckstuetze:=0;REPrechteckstuetze:=link(th,one(24,7,56,15,th,anwendungstext(79),anwendungstext(80)));IFrechteckstuetze=0ANDlsexitkey<>menueTHENgibmeldung(anwendungstext(167))END IF UNTILrechteckstuetze<>0ORlsexitkey=menuePER END PROCsonderfunktionenrechteckverfahren;END PACKETintegrationsverfahren;