Gegeben sei folgender Programmrumpf:
MODULE QuadrGl; IMPORT InOut; IMPORT RealInOut; FROM MathLib IMPORT sqrt; PROCEDURE parabel(x,a,b,c: REAL): REAL; BEGIN RETURN (a*x*x+b*x+c); END parabel; CONST eps = 1.0E-3; (*Genauigkeit*) (* zu ergaenzen *) END QuadrGl.Die Prozedur parabel definiert eine quadratische reellwertige Funktion, wie Sie aus dem Ausdruck nach RETURN leicht entnehmen können.
(a) | 5 Punkte
Ihr Programm soll zunächst die reellwertigen Koeffizienten a,b,c von der Standardeingabe einlesen und bestimmen, ob die dadurch definierte Funktion keine, eine oder zwei Nullstellen besitzt. |
(b) | 10 Punkte
Falls die Funktion zwei Nullstellen x1, x2 mit x1 < x2 besitzt, soll als nächstes die von der Kurve und der x-Achse eingeschlossene Fläche näherungsweise nach folgendem Verfahren bestimmt werden: Das Intervall [x1,x2] wird in n Teilintervalle der Länge h=(x2-x1)/n eingeteilt. Die Fläche kann nun wie folgt approximiert werden: R(n) := 0; FOR i:=1 TO n DO R(n) := R(n) + h*parabel(x1+(i-1)*h,a,b,c) END; |
Danach wird n verdoppelt und nach dem gleichen Verfahren R(2*n)
berechnet.
Falls sich zwei so gebildete aufeinanderfolgende
Rechteckssummen um weniger als die Konstante eps
unterscheiden, wird die letzte berechnete Summe als Fläche ausgegeben.
Startwert für n sei 2.
Hinweis: Lesen Sie zu den Modulen RealInOut und MathLib im Modula-2 Referenzmanual unter hhtp://www.mathematik.uni-ulm.de/modula/ nach!
Viel Erfolg!