Joachim Mohr Mathematik Musik
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 | -1 | 0 | 1 | 2 |
x (Übergabe an Funktion) | -2 | -1 | 0 | 1 | 2 |
p | -4 | -2 | 0 | 1/2 | 1 |
q | -8 | -6 | 0 | 0,75 | 1,5 |
f(x) | -12 | -6 | 0 | 0,75 | 1,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 | -2 | 0 | 2 | 4 |
b=2*i | -8 | -4 | 1 | 4 | - |
2a | -8 | -4 | 0 | 4 | |
3b | -24 | -12 | 0 | 12 | |
g(a,b) | 16 | 8 | 0 | 16 | |
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!