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 - for-Schleifen

(a) Gib mit einer for-Schleife in fünf Zeilen dein Lieblingsfach aus. Jede Zeile soll mit ihrer Nummer beginnen, also zum Beispiel:

1: Informatik ist toll
2: Informatik ist toll
3: Informatik ist toll
4: Informatik ist toll
5: Informatik ist toll
fun main() {

}

(b) Berechne mit einer for-Schleife die Summe aller Zahlen von 1 bis 100 und gib das Ergebnis aus. Vervollständige dazu die Vorlage:

fun main() {
    var summe
    for (zahl ..) {
        // Erhöhe summe in jedem Durchlauf um zahl
    }
    println("Die Summe ist $summe")
}

(c) Gib mit zwei verschachtelten for-Schleifen ein Dreieck aus Sternen aus:

*
**
***
****
*****

Tipp: print("*") gibt einen Stern aus, ohne danach in eine neue Zeile zu wechseln. Mit println() (ohne Text) wechselst du in die nächste Zeile.

fun main() {
    for (zeile in 1..5) {
        // Gib in der inneren Schleife so viele Sterne aus, wie der Wert von zeile angibt,

        // und wechsle danach in eine neue Zeile
    }
}

Aufgabe 2 - if und for verschachteln

(a) Gib die Zahlen von 1 bis 30 aus. Ersetze dabei

  • jede durch 3 teilbare Zahl durch das Wort "Drei",
  • jede durch 5 teilbare Zahl durch das Wort "Fünf",
  • jede durch 3 und 5 teilbare Zahl durch "DreiFünf".

Eine Zahl z ist durch 3 teilbar, wenn z % 3 == 0 gilt. Der Operator % liefert den Rest einer Division.

fun main() {

}

Gehe in einer Schleife alle Zahlen von 1 bis 30 durch.

Prüfe innerhalb der Schleife zuerst den Fall „durch 3 und 5 teilbar“, dann die Einzelfälle und zuletzt den Normalfall. Andernfalls wird die Zahl 15 schon durch den ersten passenden Fall abgefangen.

(b) Gib alle Primzahlen zwischen 2 und 30 aus. Eine Zahl ist eine Primzahl, wenn sie durch keine Zahl außer 1 und sich selbst teilbar ist. Hier brauchst du eine for-Schleife innerhalb einer for-Schleife: Die äußere Schleife geht alle Zahlen durch, die innere prüft mögliche Teiler.

Lege für jede Zahl eine lokale Variable istPrim an und setze sie zunächst auf true. Prüfe in der inneren Schleife für jeden möglichen Teiler, ob die Zahl ohne Rest teilbar ist, und setze istPrim in diesem Fall auf false. Gib die Zahl am Ende nur aus, wenn istPrim noch true ist.

fun main() {

}

Aufgabe 3 - Auch einfache Werte sind Objekte

Auch scheinbar einfache Werte wie Zeichenketten, Zahlen oder Wahrheitswerte sind in Kotlin Objekte. Sie können also Attribute und Methoden besitzen.

(a) Führe das folgende Programm aus und erkläre für jede Zeile, was die aufgerufene Methode bewirkt.

fun main() {
    val wort = "Informatik"
    println(wort.uppercase())
    println(wort.reversed())
    println(wort.length)
    println(wort.repeat(3))
    println(wort.take(3))
    println(wort)

    val zahl = 5
    println(zahl.toDouble())
    println(zahl.times(4))

    val kommazahl = 3.75
    println(kommazahl.toInt())
}

(b) Überlege welche Wirkung folgender Code hat und überprüfe deine Vermutung. Erkläre warum der Punkt-Operator mehrfach hintereinander verwendet werden kann.

fun main() {
    var text = "Informatik".take(3).reversed().repeat(3)
    println(text)
    text = "Informatik".reversed().repeat(3).take(3)
    println(text)
}

(c) Schreibe selbst Ausdrücke und gib sie mit println(...) aus:

  • Gib das Wort "Informatik" rückwärts und in Großbuchstaben aus.
  • Prüfe, ob das Wort die Zeichenfolge "for" enthält (Du benötigst hier die Methode contains Diese erhält als Parameter einen String und gibt einen Boolean zurück).
  • Wandle die Kommazahl 9.99 in eine ganze Zahl um und gib sie aus.
fun main() {

}

Aufgabe 4 - Namen für Objekte

Gegeben ist die Klasse Figur. Eine Figur hat eine Rolle, einen Energiewert in Prozent und eine zurückgelegte Entfernung. Beim Laufen sinkt die Energie, die zurückgelegte Entfernung steigt.

(a) Sage voraus, welche Ausgabe das folgende Programm bewirkt. Führe das Programm anschließend aus und überprüfe deine Vorhersage.

class Figur(val rolle: String) {

    var energie: Int = 100
    var aktuelleEntfernung: Int = 0

    fun druckeStatus() {
        println("--------------------------------------------")
        println("Ich bin $rolle.")
        println("Energie: $energie %")
        println("Entfernung: $aktuelleEntfernung Einheiten")
    }

    fun laufen() {
        aktuelleEntfernung += 20
        energie -= 10
    }
}

fun main() {
    val a = Figur("Heldin")
    val b = Figur("Magierin")
    val c = a

    a.laufen()
    a.druckeStatus()

    b.laufen()
    b.druckeStatus()

    c.laufen()
    c.druckeStatus()

    a.druckeStatus()
}

(b) Beurteile die Aussage: Wenn ein Objekt mit val deklariert wird, dann kann es nicht verändert werden.

Unterscheide zwischen der Identität eines Objekts und dem Zustand eines Objekts.

Aufgabe 5 - Gültigkeitsbereich

(a) Das folgende Programm lässt sich nicht ausführen. Finde den Fehler, erkläre ihn und korrigiere das Programm so, dass es die Nachricht ausgibt.

fun main() {
    val zahl = 7
    if (zahl > 5) {
        val nachricht = "Die Zahl ist groß."
    }
    println(nachricht)
}

(b) Vertiefung (optional): Sage voraus, was das folgende Programm ausgibt, und führe es anschließend aus.

fun main() {
    val wert = 1
    if (5 > 3) {
        val wert = 2
        println(wert)
    }
    println(wert)
}

Aufgabe 6 - Umgang mit null

Eine Truhe kann einen Schatz enthalten – muss sie aber nicht. Deshalb hat ihr Inhalt den nullbaren Typ Schatz?.

(a) Das folgende Programm lässt sich nicht ausführen. Erkläre, warum der Aufruf s.druckeStatus() vom Compiler abgelehnt wird, und korrigiere das Programm mit einer if-Abfrage so, dass es in beiden Fällen (Truhe leer / Truhe gefüllt) eine sinnvolle Ausgabe macht. Probiere deine Lösung mit und ohne die Zeile truhe.hineinlegen(...) aus.

class Schatz(
    val bezeichnung: String,
    val wert: Int
) {
    fun druckeStatus() {
        println("Schatz $bezeichnung mit Wert $wert")
    }
}

class Truhe {
    var meinSchatz: Schatz? = null

    fun hineinlegen(s: Schatz) {
        meinSchatz = s
    }

    fun gibInhalt(): Schatz? {
        return meinSchatz
    }
}

fun main() {
    val truhe = Truhe()
    // truhe.hineinlegen(Schatz("Goldring", 10000))

    val s = truhe.gibInhalt()
    s.druckeStatus()
}

(b) Vertiefung (optional): Löse die Ausgabe ohne if-Abfrage. Verwende den sicheren Aufruf ?. zusammen mit dem Elvis-Operator ?:, sodass bei einer leeren Truhe die Meldung "Die Truhe ist leer" erscheint.

Suche

v
100.123.4.6 Übungen
Kopieren durch Anklicken

Rückmeldung geben