Prof. Heike Wehrheim und Mitarbeiter Paderborn, den 5.11.2008 Beispielaufgaben zur Vorbereitung auf die Zwischenklausur Veranstaltung Grundlagen der Programmierung 1 WS 2008/09 AUFGABE 1: a) Sind die folgenden Zuweisungen korrekt und typverträglich oder führen sie zu einem Compiler-Fehler? Sie müssen ihre Antwort nicht begründen. i) int i = 17.0 ii) double d = 47.11F iii) long v[i] = 47; iv) boolean b = (5.0 * 5.0 == 25.0); b) Geben Sie jeweils an, welchen Typ die folgenden Ausdrücke haben. Sie müssen ihre Antwort nicht begründen. i) (short) (byte) 17 ii) 0x1a2b3c4d iii) 3141592E-6 c) Betrachten Sie das folgende Java-Quelltextfragment. int a = 42; int b = 17; if ( a > 50) System.out.println("Axel"); if ( b > 10 ) if ( a+b < 100 ) if ( a > b ) System.out.println("Britta"); else System.out.println("Carsten"); else System.out.println("Doris"); System.out.println("Erik"); Was gibt das obige Programmfragment auf der Standardausgabe aus? AUFGABE 2: a) Im folgenden Programmfragment soll vor dem Ziehen einer Wurzel geprüft werden, ob die Zahl zwischen 0 und 400 liegt. Ist sie kleiner als 0, soll sie auf 0 gesetzt werden; ist sie größer als 400, soll sie auf 400 gesetzt werden. Welche der Lösungen sind richtig, welche falsch? i) if ( zahl < 0 ) zahl = 0; if ( zahl > 400 ) zahl = 400; ii) if ( zahl < 0 ) zahl = 0; else if ( zahl > 400 ) zahl = 400; iii) if ( zahl >= 0 ) if ( zahl > 400 ) zahl = 400; else zahl = 0; iv) if ( zahl >= 0 ) if ( zahl <= 400 ) else zahl = 400; else zahl = 0; b) Gegeben sei das folgende Java Programm. Welchen Output generiert das Programm? public class Rek{ public static void main( String[] args ){ rek( 4 ); } public static void rek( int z ){ z--; System.out.println( z ); if ( z!=0 ) rek( z ); System.out.println( z ); } } AUFGABE 3: Schreiben Sie eine Methode boolean diffTest( int a, int b, int c ), welche testet, ob für drei ganze, positive Zahlen a, b und c gilt, dass eine der drei Zahlen die Differenz der beiden anderen ist. Ist dies der Fall, soll die Methode den boolean-Wert true zurückgeben, false sonst. Die folgende Tabelle zeigt einige Beispielergebnisse: t1 t2 t3 diffTest( a, b, c ) 5 7 9 false 15 25 40 true 15 15 15 false 2 3 1 true AUFGABE 4: Gegeben sei folgende Methode: static void iterationWhile ( int i ) { int j = 0; while ( j < i ) { System.out.print ( j + " " ); j++; } System.out.println(); } Ersetzen Sie die while-Schleife durch eine for-Schleife! Das Verhalten des Programmes darf sich dabei nicht ändern! AUFGABE 5: Vervollständigen Sie das unten stehende Programm, so dass es zwei boolsche Arrays a und b mit der Länge 10 mit Zufallswerten auffüllt. Schreiben Sie auch die Methode int sindGleich( boolean a[], boolean b[] ). Diese berechnet die Anzahl der Positionen, an denen a und b denselben Wert haben. Z. B. wäre sindGleich bei a: true false false false true true false true true false b: false false false true true false false true true true gleich 6. Hinweis: Klasse Math aus Package java.lang: Method Summary public static void main ( String [] args ){ //Erzeugen Sie die boolschen Arrays a und b und füllen //Sie diese mit Zufallswerten. Rufen sie anschließend //die Methode sindGleich mit den Arrays a und b auf! } static int sindGleich( boolean a[], boolean b[] ){ //Ergänzen Sie hier den Rumpf der Methode sindGleich(...)! } AUFGABE 6: Schreiben Sie eine Java-Methode boolean alleVerschieden( int[] a ), die prüft, ob die Zahlen in einem als Parameter übergebenen int-Array alle paarweise voneinander verschieden sind. Die Methode gibt einen boolean-Wert zurück: true, wenn alle Zahlen paarweise voneinander verschieden sind; false sonst. AUFGABE 7: Eine Methode teiler berechne für nichtnegative Zahlen n und Primzahlen p, wie oft sich n ohne Rest durch p teilen lässt. Es ergeben sich beispielsweise die folgenden Werte: teiler(18,3) = 2 (18:3=6 und 6:3=2) teiler(27,5) = 0 (27:5 ergibt keine ganze Zahl) teiler(16,2) = 4 (16:2=8, 8:2=4, 4:2=2, 2:2=1) Schreiben Sie eine rekursive Methode int teilerRekursiv( int n, int p ) und eine iterative Methode int teilerIterativ( int n, int p ), welche die obige Vorschrift berechnen. Sie können davon ausgehen, dass der Parameter p der Methode eine Primzahl ist. AUFGABE 8: Schreiben Sie eine rekursive Methode int exponentRek( int x, int k ) und eine iterative Methode int exponentIter( int x, int k ), die den Wert von xk berechnet. Sie können davon ausgehen, dass k ≥ 0 ist. AUFGABE 9: Schreiben Sie eine Funktion celsiusToFahrenheit, die Celsiuswerte in Fahrenheitwerte umrechnet. Die Umrechnung soll nach dem Schema f ahrenheit = ((celsius ∗ 9)/5) + 32 erfolgen. Fahrenheit und Celsius werden dabei als Gleitkommazahlen angegeben. Schreiben Sie ferner eine main-Methode, welche eine Umrechnungstabelle von Celsius nach Fahrenheit im Bereich von -10 bis +30 ◦ C in Schritten von 2 ◦ C ausgibt, verwenden Sie dazu die vorher erstellte Funktion celsiusToFahrenheit. Benutzen Sie den folgenden Programmrahmen und ergänzen Sie die Funktionsdefinition: public class Fahrenheit { public static void main(String[] args) { //hier Quellcode einfuegen } public static __________ celsiusToFahrenheit(______________) { //hier Quellcode einfuegen } }