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