RHEINISCH- WESTFÄLISCHE TECHNISCHE HOCHSCHULE AACHEN LEHR- UND FORSCHUNGSGEBIET INFORMATIK II RWTH Aachen D-52056 Aachen GERMANY http://programmierung.informatik.rwth-aachen.de LuFG Informatik II Prof. Dr. Jürgen Giesl Peter Schneider-Kamp, René Thiemann, Thomas Weiler Übung Informatik I - Programmierung - Blatt 2 (Lösungsvorschlag) Aufgabe 1 a) Bestimmen Sie, falls möglich, den Typ und das Ergebnis der folgenden Java Ausdrücke. Dabei seien die Variable x, y und z wie folgt deklariert: int x = 1; int y = 2; int z = 3. 1. Ausdruck nicht typkorrekt. x < y vom Typ boolean kann nicht mit z vom Typ int verglichen werden. 2. Typ: int Ergebnis: 42 3. Typ: boolean Ergebnis: true 4. Typ: float Ergebnis: 6.0 5. Typ: float Ergebnis: 6.333333333333333 6. Typ: String Ergebnis: "x23" b) In welcher Reihenfolge werden die folgenden Ausdrücke jeweils ausgewertet? Geben sie eine vollständige Klammerung der Ausdrücke an. 1. (x + (y * z)) 2. ((x <= y) (((x + y) >= z) && (y!= z)))
Aufgabe 2 /* Dieses Programm potenziert eine ganze Zahl mit einer * natürlichen Zahl. Dabei wird zur Effizienzsteigerung * das Verfahren des wiederholten Quadrierens angendet. * Autor: Peter Schneider-Kamp * Erstellt: 22.10.2003 * Letzte Änderung: 28.10.2003, 19:12 */ public class Potenz { public static void main(string[] argv) { System.out.print("Bitte Basis eingeben: "); int basis = IO.readInt(); System.out.print("Bitte Exponent eingeben: "); int exponent = IO.readInt(); // fange ungültige Eingaben ab if (exponent < 0) { System.out.println("Exponent muß >= 0 sein!"); // Basisfall exponent = 0 int ergebnis = 1; while (exponent > 0) { // Niedrigstes Bit von exponent gesetzt? if (exponent % 2 == 1) { ergebnis = ergebnis * basis; basis = basis * basis; exponent = exponent / 2; System.out.println(ergebnis);
Aufgabe 3 /* Dieses Programm zeigt Weihnachtsbäume einer * gewünschten Höhe an. * Autor: Peter Schneider-Kamp * Erstellt: 22.10.2003 * Letzte Änderung: 28.10.2003, 19:19 */ public class Christbaum { public static void main(string[] argv) { System.out.print("Bitte Höhe eingeben: "); int hoehe = IO.readInt(); if (hoehe < 3) { System.out.println("Höhe muss mindestens 3 betragen!"); else if (hoehe % 3!= 0) { System.out.println("Höhe muss ein Vielfaches von 3 sein!"); // berechne Breite der untersten Christbaumzeile int maxbreite = hoehe / 3 * 4 + 3; for (int zeile = 0; zeile < hoehe; zeile++) { // berechne Breite in aktueller Zeile int breite = zeile / 3 * 4; switch (zeile % 3) { case 0: breite += 1; case 1: breite += 3; case 2: breite += 7;
// berechne Anzahl der Leerstellen int leer = maxbreite / 2 - breite / 2; for (int j = 0; j < leer; j++) { System.out.print(" "); // gib aktuelle Zeile aus for (int j = 0; j < breite; j++) { if (j % 2 == 0) { if (zeile % 3 == 2 && (j == 0 j == breite-1)) { System.out.print("i"); System.out.print("X"); System.out.print("o"); System.out.println(); // gib Stamm aus for (int j = 0; j < maxbreite / 2; j++) { System.out.print(" "); System.out.println("M"); Aufgabe 4 a) Geben Sie alle Darstellungen der folgenden ganzen Zahlen im 8-Bit-Einerkomplement sowie im 8-Bit-Zweierkomplement an:
Zahl 8-Bit-Einerkomplement 8-Bit-Zweierkomplement 0 00000000 und 11111111 00000000 1 00000001 00000001-1 11111110 11111111 16 00010000 00010000-16 11101111 11110000 128 es gibt keine es gibt keine -128 es gibt keine 10000000 b) /* Dieses Programm wandelt eine Darstellung im * n-bit-zweierkomplement in die entsprechende * ganze Zahl um. * Autor: Peter Schneider-Kamp * Erstellt: 23.10.2003 * Letzte Änderung: 28.10.2003, 19:17 */ public class Bin2Int { public static void main(string[] argv) { System.out.print("Bitte Zahl im Zweierkomplement "+ "einschließlich führender Nullen eingeben: "); String komplement = IO.readLine(); // bestimme Anzahl der Bits aus Länge der Eingabe int numbits = komplement.length(); // ist die Zahl negativ? boolean negativ = komplement.charat(0) == 1 ; // wandle Rest in natürliche Zahl um int ergebnis = 0; int stellenwert = 1; boolean eingabeok = true; for (int i = numbits-1; i > 0; i--) { char zeichen_i = komplement.charat(i); if ((zeichen_i!= 0 ) && (zeichen_i!= 1 )) { System.out.println("Eingabe darf kein \""+ zeichen_i+"\" enthalten!");
eingabeok = false; boolean bit_i = zeichen_i == 1 ; // berücksichtige bitweise Negation bei negativen Zahlen if (negativ!= bit_i) { ergebnis = ergebnis + stellenwert; stellenwert = stellenwert * 2; if (eingabeok) { if (negativ) { ergebnis = -1 - ergebnis; System.out.println(ergebnis);