Bearbeite klausur-1-februar-2013 und vergleiche deine Lösungen. Aus dem Kurs Einführung in die Programmierung an der Ludwig-Maximilians-Universität München (LMU).
Zeigen Sie mit Hilfe der vollständigen Induktion, dass folgende Aussage für alle n = N gilt:
n2=∑i=1n(2⋅i−1)
Gegeben sei die folgende Klasse Punkt2D, die einen zweidimensionalen Punkt modelliert. Die Klasse stellt
die Funktion void verschiebe (double x, double y), die Funktion void skaliere (double
fac) und eine Funktion double euklidische Distanz (Punkt2D p2) zur Berechnung der euklidi-
schen Distanz zwischen zwei Punkten zur Verfügung.
/**Die Klasse Punkt2D dient zur Modellierung von
Punkten im zweidimensionalen kartesischen Raum/
public class Punkt2D {
private double x;
private double y;
/**Erzeugt einen zweidimensionalen Punkt
Beweisen Sie mit den Mitteln des Hoare-Kalkuls die partielle Korrektheit des folgenden Programmstücks. Dabei seien x, k, result Variablen vom Typ int.
// Vorbedingung: x >= 1
result = 1;
k = x;
while (k < x) {
result = result+k;
k = k+1;
}
// Nachbedingung: result = x+Σi=1k-1 i
Hinweis: Ein Teil der Invariante lautet: result = x+Σi=1k-1 i
Allgemeine Fragen
Klausur
WS 2012/13
Wandeln Sie die Zahl 13245 in 5-adischer Zahlendarstellung in Dezimaldarstellung um. Bei dieser Aufgabe muss der Lösungsweg erkenntlich seine. Ein Ergebnis ohne Lösungsweg gibt keine Punkte.
Gegeben sei die folgende Syntaxdefinition in Backus-Naur-Form für natürliche Zahlen in Binärdarstellung.
Welche der folgenden Zeichenreihen sind mit obiger Syntaxdefinition herleitbar? Begründen Sie Ihre
Aussage, indem Sie entweder eine korrekte Herleitung angeben (und dabei keine Schritte überspringen)
oder indem Sie begründen warum die Zeichenreihe nicht herleitbar ist.
• 1010
• 200
• 0111
Gegeben seien drei (sechsseitige) Würfel. Aufgabe ist es, diese Würfel so auf einem Tisch anzuordnen,
dass alle Würfel die selbe Augenzahl zeigen. Dafür werde folgender Algorithmus vorgeschlagen.
(1) Wirf alle drei Würfel auf den Tisch
(2) Falls nicht alle Würfel die selbe Augenzahl zeigen,
nimm die Würfel auf und beginne bei (1)
Entscheiden Sie, welche der folgenden Eigenschaften dieser Algorithmus erfüllt. Begründen Sie Ihre
Entscheidung kurz.
• Terminierend
• Deterministisch
• Korrekt
• Partiell korrekt
Gegeben ist folgender Programmcode:
int i = 1; int j = 5;
System.out.println( ++i ); // Ausgabe:
System.out.println( j-- ); // Ausgabe:
System.out.println( i ); // Ausgabe:
System.out.println( j ); // Ausgabe:
Ergänzen Sie die zu erwartenden Ausgabewerte (Eine Begründung ist nicht nötig).
Gegeben sei der folgende Java-Code:
public static void swap (int ( ) a, int () b) {
int () tmp = a;
a = b;
b = tmp;
b[0] = 42;
}
der Code wird folgendermaßen aufgerufen:
public static void main(String[] args) {
}
int ( ) ✗ = new int ( ) {0,1};
int[] Y = new int ( ) {2,3};
swap (x, y);
//)
Was ist der Inhalt der Variablen x und y nach Ausführung des Codes swap(a, b) an Position //) der
main-Methode? Warum?
Nennen Sie die zwei Möglichkeiten zur Übersetzung von generischen Typen und erklären Sie diese.
Implementieren Sie die folgenden statischen Methoden in Java:
boolean isQuadratzahl (int zahl)
Die Methode soll den Wahrheitswert true zurückgeben, falls zahl eine Quadratzahl ist. Die Funktion überprüft also das mathematische Prädikat i ЄN: i*i = zahl. Sie können annehmen, dass zahl positiv ist.
void invertieren (int [] werte)
Die Methode erhält ein Integer-Array als Argument und invertiert dieses. Aus dem Array [0,1,2,3] soll also das Array [3, 2, 1,0] werden. Beachten Sie, dass die Methode kein Array zurückgeben soll. Sie können davon ausgehen, dass das Array eine Länge von mindestens 1 hat.
boolean ispalindrom (int [] werte)
Die Methode erhält ein Integer-Array als Argument und gibt true zurück, wenn es sich bei diesem Array um ein Palindrom handelt. Ansonsten soll false zurückgegeben werden. Sie können davon ausgehen, dass das Array eine Länge von mindestens 1 hat.
Bemerkung: Ein Palindrom ist normalerweise eine Zeichenkette, die von vorn und von hinten gelesen gleich bleibt. In unserem Kontext sind die Zeichen die Integer-Werte des Eingabe-Arrays. So ist zum Beispiel das Array [2, 3, 1, 3, 2] und auch das Array [1, 4, 4, 1] ein Palindrom, das Array [1, 6, 3, 4, 2] und das Array [1, 2, 3, 1] nicht.
int [] interleave (int [] wertel, int [] werte2)
Die Methode erhält zwei Integer-Arrays wertel und werte2 mit der gleichen Länge und sortiert diese in einem neu erstellten Array so ein, dass abwechselnd je ein Wert aus wertel und werte2 ins Ergebnisarray einsortiert wird. Fangen Sie den Fall unerlaubter Argumente, also zweier Arrays unterschiedlicher Länge, mit den in der Vorlesung gelernten Techniken ab. Sie können davon ausgehen, dass beide Arrays eine Länge von mindestens 1 haben.
Beispielsweise werden die Arrays [1, 2, 3, 4] und [5, 6, 7, 8] zu dem Array [1, 5, 2, 6, 3, 7, 4, 8] zusammengefügt, das dann als Ergebnisarray zurückgegeben wird.
In dieser Aufgabe soll ein Drucker zum drucken von Strings modelliert werden. Ein Drucker enthält () bis n Druckaufträge, die er anhand ihrer Priorität sortiert und in der entsprechenden Reihenfolge druckt. Druckaufträge enthalten neben der entsprechenden Priorität auch den zu druckenden Text in Form eines Strings. Die Zusammenhänge wurden im folgenden UML-Klassendiagramm zusammengefasst.
Drucker
+drucke (auftrag: Druckauftrag): void
-prioritaet: int
Druckauftrag
-text: String
+Druckauftrag (text: String, prioritaet: int)
+setPrioritaet (prioritaet: int): void
+getPrioritaet(): int
+setText (text: String): void
+getText(): String
D:Object!
<
Comparable
+compareTo (other: D): int
compareTo(other: D) gibt -1 zurück, falls other eine geringere Priorität hat als das Objekt, auf dem compareTo() aufgerufen wird. Gibt 0 zurück, falls beide Prioritäten gleich sind. Ansonsten wird 1 zurückgegeben.
Implementieren Sie Druckauftrag.java anhand der aus dem Klassendia- gramm ersichtlichen Vorgaben. Beachten Sie auch eine sinnvolle Implementierung der Methoden!
Implementieren Sie Comparable.java anhand der aus dem Klassendia- gramm ersichtlichen Vorgaben. Beachten Sie auch eine sinnvolle Implementierung der Methoden!