Joachim Mohr   Mathematik Musik Delphi
Lektionen       Die Aufgaben

Funktionen
Weitere Aufgaben mit Lösungen



1. Aufgabe: Was wird bei folgendem Programm ins Memo geschrieben?
function trapez(grundseite1, grundseite2, hoehe: real): real;
  var mittelparallele: real;
begin
  mittelparallele := (grundseite1 + grundseite2)/2;
  result := mittelparallele*hoehe;
end;

procedure TForm1.Button1Click(Sender: TObject);
  var a, b, h, i: real;
begin
  a := 10;
  b := 20;
  h := 4;
  i := trapez(a,b,h);
  memo1.lines.add('Inhalt1 = '+ floattostr(i));
  memo1.lines.add('Inhalt2 = '+ floattostr(trapez(20,40,8)));
  i := trapez(3*a,3*b,3*h);
  memo1.lines.add('Inhalt3 = '+ floattostr(i));
end;
2. Aufgabe : Die Heron'sche Dreiecksformel.

Die Fläche eines Dreiecks mit den Seiten a, b, c kann mit folgender Formel berechnet werden:
                                       a + b + c
A = sqrt(s(s-a)·(s-b)·(s-c)) wobei s = ————————— (Beweis siehe Homepage von J.M.)
                                           2
Schreibe eine Funktion "function heron(a,b,c ..." , die die Fläche eines Dreiecks aus seinen Seitenlängen a, b und c berechnet.

Die Eingabe soll durch 3 Editfenster geschehen, die Ausgabe soll in ein viertes Editfenster geschrieben werden.

Schreibe dazu noch ein Programm "Procedure.button1click...".

3. Aufgabe :Was wird bei folgendem Programm ins Memo geschrieben?
a) function f(x: real): real;
     var p, q: real;
   begin
     if x < 0 then Begiin
       p := 2*x;
       q := 4*x;
     End else Begin
        p := x/2;
        q := x/4;
     End;
     result := p + q;
   end;

   procedure TForm1.Button1Click(Sender: TObject);
     var i: integer;
   begin
     for i := - 2 to 2 do
       memo1.lines.add(IntToStr(i)+ '    '+ floatToStr(f(i)));
   end;

b) function g(a,b: real): real;
   begin
     if a < b then  result := 2*a + 3*b
       else result := 2*a - 3*b;
   end;

   procedure TForm1.Button1Click(Sender: TObject);
     var i:integer;
   begin
     i := -4;
     repeat
       memo1.lines.add(IntToStr(i)+ '    '+ floatToStr(g(i,2*i)));
       i := i+2;
     until i = 4;
   end;
4. Aufgabe: Schreibe ein Programm das eine Wertetafel für für x = 1;2;3 ... n ausgibt.

 a)

                  1    1    1       1
      f(x) = 1 + —— + —— + —— + ... ——
                  3    3    3        3
                 2    3    4        x

 b)

             1 3 5    2x-1
      g(x) = -·-·-·...————
             2 4 6     2x

 n (zum Beispiel n=100) soll in einem Editfeld eingegeben werden können.

5. Aufgabe:Was wird in folgendem Programm berechnet?
Rechenausdruck in der Form wie zum Beispiel:
f(1.5) = 1 + 1/2 + 1/4 + 1/8 + ... + 1/2^n (1/2^n < 0.000000001) notwendig!

function fak(n:integer):real;  //fak(n) = n! =1*2*...*n
  var k: integer;
      p: integer;
begin
  p := 1;
  for k := 1 to n do p := p*k;
  result := p;
end;

function hoch(x: real; n: integer):real; //hoch(x,n) = x^n (x hoch n)
  var i: integer;
begin
  result := 1;
  for i := 1 to n do result := result*x;
end;

function f(x: real): real; //f(x) = 1 + x/1! ...
                            //Rest wird nicht verraten!
  var i: integer;
      p,s: real;
begin
  p := 1;
  i := 0;
  repeat
    i := i + 1;
    s := hoch(x,i)/fak(i);
    p := p + s;
  until s < 0.000000001; //auf ca. 9 Dezimalen genau
  result := p;
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
  showmessage(floattostr(f(1.5)));
end;


Lösungen

Lösung der 1. Aufgabe

Im Memofeld steht:                 Rechnug

                                   10+20
Inhalt1 = 60                       —————·4 = 60
                                     2

                                   20+40
Inhalt2 = 240                      —————·8 = 240
                                     2

                                   30+60
Inhalt3 = 540                      —————·2 = 540
                                     2
Lösung der 2. Aufgabe
function heron(a,b,c: real): real;
   //Berechnet die Fläche eines Dreiecks aus den Seitenlängen
  var s, I: real;
begin
  s := (a+b+c)/2;
  result := sqrt(s*(s-a)*(s-b)*(s-c));
  {Besser:
  I := s*(s-a)*(s-b)*(s-c);
  if I >=0 then result := sqrt(I)
    else raise EMathError.CreateFmt('%g, %g, %g sind keine Dreieckslängen',
      [a, b, c]);}
end;

procedure TForm1.BAufgabe2Click(Sender: TObject);
  var a,b,c: real;
begin
  a := strToFloat(edit1.text);
  b := strToFloat(edit2.text);
  c := strToFloat(edit3.text);
  edit4.text := floatToStr(heron(a,b,c));
end;
Bei negativer Wurzel wird das Programm mit einer Fehlermeldung abgebrochen. {Hier wird noch gezeigt, wie man mit dem Befehl "raise" die Fehlermeldung selbst formulieren kann.}

Lösung der Aufgabe 3a:

Im folgenden Verlaufsprotokoll wird angezeigt, welche Werte p,q f(x) die Funktion bei der Übergabe des Wertes i für x berechnet.
i-2-1012
x (Übergabe an Funktion)-2-1012
p-4-201/21
q-8-600,751,5
f(x) -12 -600,751,5


Im Memofeld steht also:
-2   -12
-1   -6
0    0
1    0,75
2    1,5


Lösung der Aufgabe 3b:

Verlaufsprotokoll mit Übergabe von i in die Funktion:
a=i-4-2024
b=2*i-8-414-
2a-8-404 
3b-24-12012 
g(a,b)168016 


Im Memofeld steht also:
-4   16
-2    8
0     0
2    16


Lösung der 4. Aufgabe:
function f(x: integer): real;
   var i: integer;
begin
  result := 0;
  for i := 1 to x do result := result + 1/(i*i*i);
end;

function g(x: integer): real;
  var i: integer;
begin
  result := 1;
  for i := 1 to x do result := result*(2*i-1)/(2*i)
end;

procedure TForm1.BAufgabe4aClick(Sender: TObject);
  var x, n: integer;
begin
  memo1.lines.clear;
  n := strToInt(e_n.text);
  for x := 1 to n do
    memo1.Lines.Add(inttostr(x) + '   ' + formatfloat('0.

',f(x))); end; procedure TForm1.BAufgabe4bClick(Sender: TObject); var x, n: integer; begin memo1.lines.clear; n := strToInt(e_n.text); for x := 1 to n do memo1.Lines.Add(inttostr(x) + ' ' + formatfloat('0.

',g(x))); end;
Hinweis: Mit "formatfloat" kann man bestimmen, wieviel Nachkommastellen ausgedruckt werden sollen. Die Standardausgabe wäre "flostToStr".

Lösung der 5. Aufgabe:
                2    3                     i
           x   x    x                     x      -9
f(x) = 1 + - + —— + —— + ... (solange bis —— < 10
           1   2!   3!                    i!

                  x
So wird übrigend e  für e=2,718281728... berechnet.

                                2      3
                       1,5   1,5    1,5
Hier wird f(1,5) = 1 + ——— + ———  + ——— + ... berechnet,
                        1     2!     3!