(*$B- Algorithmus 7.5*) PROGRAM runge; CONST nn=10; TYPE vektor = ARRAY[1..nn] of real; VAR x,x0,h,xend,xmax, xmin, ymin, ymax : real ; m,n,i,k,schritte, fall, xg, yg, xt, yt, oldx, oldy, farbe, keine: integer; zeich : boolean; y,y0,ys,z,k1,k2,k3,k4 : vektor; tf,aus:text; line : string[120]; (*$I plotproz *) PROCEDURE f(x:real; y:vektor; VAR ys:vektor); BEGIN CASE fall OF (*$I fdgl.pas*) END; END; BEGIN assign(tf,'fdgl.pas'); reset(tf); while not eof(tf) do begin readln(tf,line); writeln(line) end; writeln('Fall eingeben:'); read(fall); writeln('Anzahl Gleichungen ?'); read(n); write('Anfangsbedingungen eingeben x='); read(x0); FOR i := 1 TO n DO BEGIN write('y[',i,']='); read(y0[i]) END; writeln('bis wohin integrieren? xend='); read(xend); writeln('wieviele Integrationsschritte ?'); read(schritte); writeln('Wertetabelle (1) oder Zeichnung (2) ?'); readln(i); zeich := i=2; IF zeich THEN BEGIN writeln('welche Funktion plotten ?'); read(m); writeln('ymin, ymax eingeben'); readln( ymin, ymax); xmin:=x0; xmax :=xend; plotbegin( xg, yg, xt, yt, farbe, keine); achsen(xmin, xmax, ymin, ymax, xg, yg, xt, yt, farbe, keine); END ELSE BEGIN writeln('Filenamen fuer die Wertetabelle ?'); readln(line); assign(aus,line); rewrite(aus); END; h:=(xend-x0)/schritte; x:=x0; y:=y0; FOR k := 1 TO schritte DO BEGIN f(x,y,k1); FOR i:=1 TO n DO z[i]:=y[i]+h/2*k1[i]; f(x+h/2,z,k2); FOR i:=1 TO n DO z[i]:=y[i]+h/2*k2[i]; f(x+h/2,z,k3); FOR i:=1 TO n DO z[i]:=y[i]+h*k3[i]; f(x+h,z,k4); FOR i:=1 TO n DO y[i]:=y[i]+h/3*(0.5*k1[i]+k2[i]+k3[i]+0.5*k4[i]); x := x0+k*h; IF zeich THEN pl(x,y[m],farbe) ELSE BEGIN write(aus,x); FOR i:=1 TO n DO write(aus,y[i]); writeln(aus) END END; IF NOT zeich THEN close(aus) END.