home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Pascal / MAXONPASCAL3.DMS / in.adf / DEMOS-OS1.3 / integra.p < prev    next >
Encoding:
Text File  |  1994-07-23  |  2.4 KB  |  80 lines

  1. Program Integration(input,output);
  2.  
  3. {  Himpelsoft 08.03.89                                             }
  4. {                                                                  }
  5. {  Demonstriert Prozedur- und Funktionsparameter sowie Stringtypen }
  6. {                                                                  }
  7. {  Es werden die Quadratfunktion nach dem Trapezsummen- und die    }
  8. {  Sinusfunktion nach dem Simpsonverfahren in wählbaren Grenzen    }
  9. {  integriert.                                                     }
  10.  
  11. { MaxonPascal 3-Anpassung / Test:  Falk Zühlsdorff (PackMAN) 1994  }
  12.  
  13. Type string20=array[1..20] of char;
  14.  
  15. Function g(x:real):real;
  16.   { "Sqr" kann nicht direkt als Parameter übergeben werden.
  17.     Grund: Der Ergebnistyp ist nicht definiert, sondern hängt vom
  18.     Parametertyp ab (integer oder real). Dies gilt auch z. B. für
  19.     "succ" und "pred". Solche speziallen Funktionen sind nicht als
  20.     aktuelle Parameter erlaubt.                                    }
  21.  
  22.   Begin
  23.     g:=sqr(x)
  24.   End;
  25.  
  26. Procedure trap(Function f(x:real):real; a,b:real; n:integer; Var erg:real);
  27.   Var s,h:real; i:integer;
  28.   Begin
  29.     h:=(b-a)/n;
  30.     s:=0;
  31.     For i:=1 to n-1 do
  32.       s:=s+f(a+i*h);
  33.     erg:=(0.5*(f(a)+f(b))+s)/n
  34.   End;
  35.  
  36. Procedure simp(Function f(x:real):real; a,b:real; n:integer; Var erg:real);
  37.   Var t1,t2:real;
  38.   Begin
  39.     trap(f,a,b,n,  t1); { Beachte: eine Function, die "simp" als Parameter }
  40.     trap(f,a,b,2*n,t2); { übergeben wurde, wird hier an "trap" weitergereicht. }
  41.     erg:=(4*t2-t1)/3
  42.   End;
  43.  
  44. Procedure Tabelle
  45.    ( funk, verf:          string20;
  46.      Function f(y:real):  real;
  47.      Procedure int
  48.        ( function f(y:real): real;
  49.          x1,x2:              real;
  50.          a:                  integer;
  51.          Var                 r:real
  52.        )
  53.    );
  54.  
  55.   { Man beachte die tolle Schachtelung: Der Prozedurparameter "int" hat
  56.     selbst wieder einen Funktionsparameter! }
  57.  
  58.   Var lo,hi,e:real; i,max:1..100;
  59.  
  60.   Begin
  61.     writeln("Integral der Funktion f(x)=",funk);
  62.     writeln;
  63.     write('Grenzen: ');readln(lo,hi);
  64.     write('Anzahl:  ');readln(max);
  65.     page;
  66.     writeln('Integration von f(x)=',funk,' durch ',verf,'verfahren');
  67.     writeln;
  68.     For i:=1 to max do
  69.       Begin
  70.         int(f,lo,hi,i,e);
  71.         writeln(i:8,'   ',e)
  72.       End;
  73.     writeln
  74.   End;
  75.  
  76. Begin  { Hauptprogramm }
  77.   Tabelle('x^2',   'Trapez' ,g,   trap);
  78.   Tabelle("sin(x)","Simpson", sin,simp)
  79. End.
  80.