s n h m r u

Minimallogo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

s n h m r u
i

Übungen

Aufgabe 1 - Nichts als Fehler

Keines der folgenden Programm-Fragmente funktioniert so wie es soll. Beschreibe, was jeweils falsch ist und korrigiere die Fehler.

// Fehler 1
class Auto {
    var marke: String
    var ps: Int
}
// Fehler 2
class Auto(marke: String, ps: Int) {
}

fun main() {
    val a = Auto("BMW", 150)
    println(a.marke)
}
// Fehler 3
class Auto {
    var marke: String = ""
    var ps: Int = 0
}

fun main() {
    val a = Auto()
    a.marke = "BMW"
    a.ps = "150"
}
// Fehler 4
class Auto {
    var marke = ""
    var ps = 0
}

fun main() {
    val a = Auto()
    a.marke = "BMW"
    a.ps = "150"
}
// Fehler 5
class Auto {
    var marke = ""

    fun druckeMarke(): String {
        println(marke)
    }
}
// Fehler 6
class Auto {
    var marke = ""
}

fun druckeMarke(): String {
    println(marke)
}

Aufgabe 2 - Thermostat

Ein Thermostat ist ein Gerät, das die Temperatur in einem Raum misst und regelt, indem es die Heizung ein- oder ausschaltet. Im Klassendiagramm können wir die Klasse Thermostat folgendermaßen darstellen:

Klassendiagramm Thermostat

(a) Erläutere die Bestandteile des Klassendiagramms.

(b) Implementiere die Klasse Thermostat entsprechend dem Klassendiagramm. Die Implementierung von Methoden (also die Teile zwischen den geschweiften Klammern) kannst du - bis auf Dummy-Rückgabewerte - leer lassen. Entscheide dich bei den Attributen begründet zwischen val und var.

Aufgabe 3 - Würfel

Ein Würfel soll folgende Anforderungen erfüllen:

  • Beim Erstellen eines Würfels wird die minimale und maximale Augenzahl festgelegt. Es sollen also nicht nur Zahlen von 1 bis 6 möglich sein, sondern z.B. auch von 2 bis 5 oder von 0 bis 10.
  • Ein Würfel soll sich die aktuelle Augenzahl und den Wert des letzten Wurfs merken. Beim Erstellen eines Würfels sollen diese Werte auf -1 gesetzt werden, um anzuzeigen, dass der Würfel noch nicht geworfen wurde.
  • Ein Würfel soll eine Methode werfen() haben, die eine neue Augenzahl generiert. Diese Augenzahl soll zufällig zwischen der minimalen und maximalen Augenzahl liegen. Dabei soll die aktuelle Augenzahl aktualisiert und der Wert des letzten Wurfs gespeichert werden.
  • Schließlich soll es eine Methode wurdeBenutzt() geben, die zurückgibt, ob der Würfel bereits geworfen wurde. Dies kann man daran erkennen, dass die aktuelle Augenzahl gleich -1 ist oder nicht. Ob zwei Werte gleich sind, kannst du mit dem Operator == überprüfen.

(a) Erstelle ein Klassendiagramm für die Klasse Wuerfel.

(b) Implementiere die Klasse Wuerfel entsprechend deinem Klassendiagramm. Teste deine Implementierung, indem du ein Hauptprogramm schreibst, das einen Würfel erzeugt, ihn mehrmals wirft und die Ergebnisse ausgibt.

Aufgabe 4 - Türsteher

Ergänze das Codefragment so, dass es die folgenden Anforderungen erfüllt.

(a) Wenn das (zufällige) Alter unter 18 liegt, soll die Ausgabe "Du kommst hier nicht rein!" sein, ansonsten "Willkommen im Club!".

(b) Wenn das Alter über 40 liegt, soll zusätzlich die Ausgabe "Möchtest du dein Kind abholen?" erfolgen.

(c) Zusatzaufgabe: Man kann die Anforderungen mit Hilfe von zwei unabhängigen if-Anweisungen erfüllen oder mit einer verschachtelten if-Anweisung, also einer if-Anweisung innerhalb einer anderen if-Anweisung. Probiere beide Möglichkeiten aus und vergleiche die Vor- und Nachteile.

Hinweis zur Ausgabe: Falls du nicht verstehst was es mit dem $-Zeichen in der Ausgabe auf sich hat, kannst du in den Tipps zu Kotlin nachschauen.

fun main() {
    val alter = (0..60).random()
    println("Alter: $alter")

    // Hier soll die Ausgabe entsprechend den Anforderungen erfolgen
}

Aufgabe 5 - Notenauswertung

Ergänze das Codefragment so, dass folgende Ausgaben entsprechend der Punktzahl erfolgen:
  • 0 bis 3 → "Das reicht leider nicht."
  • 4 bis 6 → "Ausreichend"
  • 7 bis 9 → "Befriedigend"
  • 10 bis 12 → "Gut"
  • über 12 → "Sehr gut!"

Benutze dazu eine verschachtelte if-Anweisung. Schaue bei Bedarf auf der Seite Fachkonzept - Fallunterscheidungen nach.

fun main() {
    val punktzahl = (0..15).random()
    println("Punktzahl: $punktzahl")

    // Hier soll die Ausgabe entsprechend den Anforderungen erfolgen
}

Aufgabe 6 - Bruch

Ein Bruch hat einen Zähler und einen Nenner, die beide ganze Zahlen sind. Beim Erstellen eines Bruchs soll der Zähler und der Nenner angegeben werden. Es soll eine Methode erweitern geben, die den Bruch mit einem Faktor erweitert, also den Zähler und den Nenner mit diesem Faktor multipliziert. Es soll eine Methode kuerzen geben, die den Bruch kürzt, also den Zähler und den Nenner um den als Parameter angegebenen Faktor dividiert. Dies soll nur möglich sein, wenn der Zähler und der Nenner durch diesen Faktor teilbar sind, also keinen Rest bei der Division haben.

Ob eine Zahl durch einen Faktor teilbar ist, kannst du mit dem Modulo-Operator % überprüfen:

fun main() {
    val zaehler = (6..9).random()
    val faktor = 3

    val rest = zaehler % faktor
    println("$zaehler geteilt durch $faktor hat Rest: $rest")
}

(a) Erstelle ein Klassendiagramm für die Klasse Bruch.

(b) Implementiere die Klasse Bruch entsprechend deinem Klassendiagramm. Teste deine Implementierung, indem du ein Hauptprogramm schreibst, das einen Bruch erzeugt, ihn erweitert und kürzt und die Ergebnisse ausgibt.

Suche

v
100.123.2.5 Übungen
Kopieren durch Anklicken

Rückmeldung geben