Joachim Mohr Mathematik Musik Delphi
Aufgaben mit Lösungen
1. Aufgabe
Was wird bei folgendem Programm ausgedruckt? (Buchstabengenau!)
procedure TForm1.Button1Click(Sender: TObject);
var a, b, c: integer;
begin
a := 1; b := 2; c := 3;
memo1.Lines.Add('1. a) ' + inttostr(a) + ' ' + inttostr(b)+ ' ' + inttostr(c));
a := a + 1; b := b + 2; c := c + 3;
memo1.Lines.Add('1. b) ' + inttostr(a) + ' ' + inttostr(b)+ ' ' + inttostr(c));
a := b + c; b := a + c; c := a + b;
memo1.Lines.Add('1. c) ' + inttostr(a) + ' ' + inttostr(b)+ ' ' + inttostr(c));
a := 2; a := a*a; a := a*a; a := a*a;
memo1.Lines.Add('1. a) ' + inttostr(a))
end;
|
Lsg.: a) 1 2 2
b) 2 4 6
c) 10 16 26
d) 256
2. Aufgabe Schreibe eine Wertetafel für f(x) = (1/4)x
4 - (1/2)x
2:
a) Mit einer "for"-schleife und für x= 0, 1, 2, ..., 8, 9, 10
b) Mit "repeat ... until"-Schleife und für x = 0; 0,1; 0,2; ... ; 3,9; 4
c) Mit "while"-Schleife und für x = 0; 2; 4; 6; ... ; 20
Lösung:
a) procedure TForm1.Button1Click(Sender: TObject);
var x: integer;
y: real;
begin
memo1.lines.clear;
for x := 0 to 10 do Begin
y := 1/4*x*x*x*x - 1/2*x*x;
memo1.Lines.Add(IntTostr(x) + ' ' + floattostr(y));
End;
end;
b) procedure TForm1.Button1Click(Sender: TObject);
var x, y: real;
begin
memo1.lines.clear;
x := 0;
repeat
y := 1/4*x*x*x*x - 1/2*x*x;
memo1.Lines.Add(FloatTostr(x) + ' ' + floattostr(y));
x := x + 0.1;
until x > 4.001;
end;
c) procedure TForm1.Button1Click(Sender: TObject);
var x, y: real;
begin
memo1.lines.clear;
x := 0;
while x < 20 do Begin
y := 1/4*x*x*x*x - 1/2*x*x;
memo1.Lines.Add(FloatTostr(x) + ' ' + floattostr(y));
x := x + 2;
End;
end;
3. Aufgabe
Was wird bei folgendem Programm berechnet (Rechenausdruck genügt)
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; r: real;
begin
r := 0;
for i := 1 to 100 do r := r + i/(i+1);
memo1.lines.Add('2 a) ' + FloatToStr(r));
r := 1;
for i := 1 to 100 do r := r * i/(i+1);
memo1.lines.Add('2 b) ' + FloatToStr(r));
end;
|
Lösung:
a) 1/2+2/3+3/4+...+100/101
b) 1/2*2/3*3/4*...*100/101 [Nebenbei bemerkt = 1/101]
4. Aufgabe
Schreibe ein Programm, das folgendes berechnet:
a) s = 1 + 1/4 + 1/9 + ... + 1/100
2
b) p = 1*4*9*...*n
2 (n soll in einem Editfeld eingegeben werden.)
c) s= 1 - 1/2 + 1/3 - 1/4 + ... - 1/10000.
Hinweis zum Vorzeichen: Verwende eine Variable vz = 1 und ändere sie laufend mit
vz := -vz!
Lsg.:a) procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
s: real;
begin
s := 0;
for i := 1 to 100 do s := s + 1/(i*i);
showmessage(floattostr(s)); //1,63498390018489
end;
b) procedure TForm1.Button1Click(Sender: TObject);
var i, n: integer;
p: real;
begin
p := 1;
n := strtoint(edit1.text);
for i := 1 to n do p := p * i*i;
showmessage(floattostr(p)); //für n=5 z.B. 14000
end;
c) procedure TForm1.Button1Click(Sender: TObject);
var i, vz: integer;
s: real;
begin
s := 0;
vz := 1;
for i := 1 to 10000 do Begin
s:= s + vz/i;
vz := -vz;
End;
showmessage(floattostr(s)); //0,693097183059959 ungefähr ln2
end;
5. Aufgabe
Betrachte folgendes Programm?
procedure TForm1.Button1Click(Sender: TObject);
var a,b,x: integer;
begin
a := StrToInt(edit1.text);
b := StrToInt(edit2.text);
if a > b then Begin
x := a;
a := b;
b := x;
End;
showmessage('Die beiden Zahlen sind ' +
inttostr(a) + ' und ' + inttostr(b));
end;
|
a) Was ist die Ausgabe, wenn in edit1 die Zahl 5 und in edit2 die Zahl 10 steht?
b) Was ist die Ausgabe, wenn in edit1 die Zahl 10 und in edit2 die Zahl 5 steht?
c) Erläutere den "Witz" des Programms.
d) Was ändert sich, wenn das Programm folgendermaßen lautet:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,x: integer;
begin
a := StrToInt(edit1.text);
b := StrToInt(edit2.text);
if a > b then Begin
a := b;
b := a;
End;
showmessage('Die beiden Zahlen sind ' +
inttostr(a) + ' und ' + inttostr(b));
end;
|
a) 5 10
b) 50 10
c) Zuerst wird die kleinere Zahl, dann die größere Zahl gezeigt,
unabhängig von der Eingabe.
d) Das Tauschen funktioniert nicht. Ist a > b, z.b. a=10 b= 5,
dann wird zweimal b ausgegeben, z.B. 5 und 5.