Joachim Mohr   Mathematik Musik Delphi
Lektionen       Die Aufgaben

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)x4 - (1/2)x2:

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/1002

b) p = 1*4*9*...*n2   (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.