StudierendeLehrende
  1. Universität
  2. Ludwig-Maximilians-Universität München
  3. Einführung in die Programmierung

klausur-1-februar-2013

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).

Abschnitt 3

Freitextaufgabe
3
Beweis durch vollständige Induktion
6 P

Zeigen Sie mit Hilfe der vollständigen Induktion, dass folgende Aussage für alle n = N gilt:
n2=∑i=1n(2⋅i−1)n^2 = \sum_{i=1}^n (2 \cdot i - 1)n2=∑i=1n​(2⋅i−1)

Deine Antwort:

Abschnitt 4

Freitextaufgabe
4
Objektorientierte Modellierung
8 P

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

  • @param x Die x-Koordinate des erzeugten Punktes
  • @param y Die y-Koordinate des erzeugten Punktes*/
    public Punkt2D (double x, double y) {
    this.x = x;
    this.y = y;
    }
    /**Verschiebt den Punkt entlang der Koordinatenachsen.
  • @param x Distanz, um die der Punkt entlang der
  • x-Koordinate verschoben werden soll
  • @param y Distanz, um die der Punkt entlang der
  • y-Koordinate verschoben werden soll*/
    public void verschiebe (double x, double y) {
    this.x += x;
    this.y += y;
    }
    /**Berechnet die euklidische Distanz zwischen
  • diesem Punkt und dem Punkt p. Die euklidische Distanz
  • d (p1, p2) ist definiert als d(pl,p2) = sqrt((pl.x-p2.x)^2+ (pl.y-p2.y) ^2).
  • @param p Punkt, zu dem die Distanz zu diesem
  • Punkt berechnet werden soll. /
    public double euklidische Distanz (Punkt2D p) {
    double dx = p.x-x;
    double dy = p.y-y;
    return Math.sqrt (dx
    dx+dy+dy);
    }
    /**Skaliert den Punkt um den Faktor fac. Durch die Skalierung
  • wird der Punkt näher zum Koordinatenursprung (falls -1 <fac < 1) hin
  • bzw weiter vom Ursprung weg bewegt (fac > 1 oder fac < -1). Bei fac
  • 1 verändert sich der Punkt nicht. Ist fac <0 wird der Punkt
  • am Koordinatenursprung gespiegelt. */
    public void skaliere (double fac) {
    this.x *= fac;
    this.y *= fac;
    }
    Implementieren Sie eine Klasse Kreis in Java, die einen Kreis über einen Mittelpunkt und einen nichtnegati-
    ven Radius modelliert. Zwischen der Klasse Kreis
    und Punkt2D soll eine Verwendungsbeziehung bestehen.
    keine isa-Beziehung. Die Klasse Kreis soll die folgenden Methoden zur Verfügung stellen:
    • Einen Konstruktor, der einen Punk2D als Mittelpunkt sowie eine Zahl vom Typ double als Radius
    erhält. Stellen Sie sicher, dass radius nur nichtnegative Werte annimmt. Sollte ein ungültiger Parameter
    radius übergeben werden, werfen Sie eine IllegalArgumentException (diese erbt von der
    Klasse RuntimeException).
    • Eine Methode void verschiebe (double x, double y), die den Kreis um den Wert x entlang
    der x-Achse sowie um den Wert y entlang der y-Achse verschiebt.
    • Eine Methode void skalieren (double fac), die den Kreis um den Faktor fac um den Ur-
    sprung skaliert. Durch die Skalierung wird der Kreis näher zum Koordinatenursprung (falls -1 < fac <
  1. bzw weiter vom Ursprung wegbewegt (fac > 1 oder fac < -1). Bei fac 1 verändert sich der
    Kreis nicht. Ist fac < 0, wird der Kreis am Mittelpunkt gespiegelt. Beachten Sie auch, dass die Größe
    des Kreises bei einer Skalierung angepasst werden muss.
    • Eine Methode boolean schneidet (Kreis k), die true zurückgibt wenn sich die beiden Kreise
    schneiden, wenn also die beiden Kreise mindestens einen Punkt gemeinsam haben.
Deine Antwort:

Abschnitt 6

Freitextaufgabe
6
Korrektheitsbeweis
8 P

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

Deine Antwort:

Abschnitt MAIN-bd4c8576-a975-4475-8b65-0b5e5291a4d7

Gemischt
Allgemeine Fragen
2 P

Allgemeine Fragen
Klausur
WS 2012/13


a
2 P

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.

Deine Antwort:

b
3 P

Gegeben sei die folgende Syntaxdefinition in Backus-Naur-Form für natürliche Zahlen in Binärdarstellung.
::= 0 |
::= 1 *
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

Deine Antwort:

c
3 P

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

Deine Antwort:

d
2 P

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).

Deine Antwort:

e
2 P

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?

Deine Antwort:

f
2 P

Nennen Sie die zwei Möglichkeiten zur Übersetzung von generischen Typen und erklären Sie diese.

Deine Antwort:

Abschnitt MAIN-3deabc28-ddfb-4f1d-be5f-84f34e9ccc6a

Gemischt
Algorithmen
12 P

Implementieren Sie die folgenden statischen Methoden in Java:


a
2 P

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.

Deine Antwort:

b
3 P

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.

Deine Antwort:

c
3 P

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.

Deine Antwort:

d
4 P

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.

Deine Antwort:

Abschnitt MAIN-736b613c-d130-4c65-a2de-4d8a839a78d6

Gemischt
UML und Java
7 P

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.


a
3 P

Implementieren Sie Druckauftrag.java anhand der aus dem Klassendia- gramm ersichtlichen Vorgaben. Beachten Sie auch eine sinnvolle Implementierung der Methoden!

Deine Antwort:

b
4 P

Implementieren Sie Comparable.java anhand der aus dem Klassendia- gramm ersichtlichen Vorgaben. Beachten Sie auch eine sinnvolle Implementierung der Methoden!

Deine Antwort:
iconlogo
Einloggen