Informatik Aufgabenblatt 5 Aufgabe 1 Aufgabe 2

Werbung
Prof. Dr. Th. Letschert
FB MNI
TH Mittelhessen
StudiumPlus
Informatik
Aufgabenblatt 5
Aufgabe 1
1. Zeichnen Sie Programmablaufpläne / Flussdiagramme zu folgenden Anweisungen:
(a) if (a>b) { if (c>d) x = y; else u = v; }
(b) if (a>b) { if (c>d) x = y; } else u = v;
(c) if (a>b) if (c>d) x = y; u = v;
(d) while (a>b) if (c>d) x = y; u = v;
(e) for (int i = 0; i>x; i++) if (c>i) x = x*i;
2. Die Anweisung
if (a>b) if (c>d) x = y; else u = v;
scheint nicht eindeutig definiert zu sein – zu welchen if gehört das else ? Tatsächlich ist sie
eindeutig definiert. Finden Sie heraus ob der Compiler sie als
• if (a>b) { if (c>d) x = y; else u = v; } oder als
• if (a>b) { if (c>d) x = y; } else u = v;
auffasst. Entwerfen Sie ein Experiment (in Form eines Programms) mit dem diese Frage entschieden werden kann.
Aufgabe 2
1. Was ist falsch an: if (a>b) if (c>d) x = y; s = t; else u = v;
und was ist falsch an: if (a>b) if (c>d) { x = y; else u = v; } ?
Wir nehem an, dass alle Variablen korrekt definiert sind.
2. Kann die zweiarmige Verzweigung durch eine (oder mehrere) einarmige ersetzt werden? Wenn ja
wie?
3. Vereinfachen Sie so weit wie möglich:
(a) b = (x == y); if ( b == true ) x = x + y; else x = y + x;
(b) if (x >= y) x = x; else x = 2*x;
(c) if ((x >= x) == true) x = x; else x = 2*x;
(d) if (((x >= x) == true) == false) x = x; x = 2*x;
Aufgabe 3
a habe den Wert 3 und b den Wert 4. Welche Werte haben die Variablen a und b jeweils nach den
folgenden Anweisungen:
1. if (a==b) a = 5; b = 6;
2. if (a!=b) a = 5; b = 6;
3. if (a==b) a = 5; else b = 6;
4. if (a==b) { a = 5; b = 6;}
5. if (a>=b) a = 5; if (b >= a) a = 6;
6. if (a>=b) a = 5; else if (b >= a) a = 6;
7. if (a>=b) a = 5; else a = 6;
Aufgabe 4
1. Welchen Wert haben a und b nach dem Durchlaufen folgender Schleifen, wenn vorher gilt a = 3,
b = 0.
(a) while (a>=b) if (b==0) a--; // a--; entspricht a = a-1;
(b) while (a>=b) { a=a+(b-1); b=b+a; }
(c) while (a>=b) { a=a-b; if (b==0) b++; }
Prüfen Sie Ihre Vermutungen mit geeigneten Testprogrammen.
2. Manche Schleifen terminieren (enden) nie, andere enden nach einigen Durchläufen und wieder
andere werden nicht ein einziges Mal durchlaufen. Die Zahl der Schleifendurchläufe hängt i.A.
natürlich von der Belegung der Variablen zu Beginn der Schleife ab.
Bei welchen Variablenbelegungen terminieren folgende Schleifen, bei welchen nicht:
(a) while (a>=5) { a=a-1; do { a = a-1; } while (a>=5); }
(b) do { a=a-1; while (a<=5) a = a-1; } while (a>=5);
Prüfen Sie Ihre Vermutungen eventuell mit geeigneten Testprogrammen.
3. Schreiben Sie eine while Schleife, die jeweils die ersten n–Zahlen aufsummiert.
Aufgabe 5
Entwickeln Sie aus einer Wertverlaufstabelle eine Schleife mit der an berechnet werden kann:
a0 = 0
ai = ai−1 ∗ 2 + 1
Der Wert n soll eingelesen werden.
Gehen Sie systematisch vor: Definieren Sie eine Wertfolge die – ausgehend von a0 – zum gesuchten Wert
an führt. Wie kann kontrolliert werden, ob das Ziel erreicht ist? Ordnen Sie die Folge(n) in einer Tabelle
an. Was ist die erste Zeile? Wie kommt man von einer Zeile zur nächsten? Wann ist das Ziel erreicht?
Formulieren Sie eine entsprechende Schleife.
Setzen Sie Ihre Lösung in Programmcode um! Testen Sie!
2
Herunterladen