Übung
icon: bi-braces kind: uebung duration: 1 Doppelstunde languages: [ruby, python, javascript] idea: Werte bekommen, rechnen, ein Ergebnis zurückgeben curriculum: "Sek I: Algorithmisches Problemlösen (Variablenkonzept und Prozeduren)"

Katas: Erste Funktionen

Du schreibst kleine Funktionen direkt hier auf der Seite: Sie bekommen Zahlen oder Texte und geben ein Ergebnis zurück. Ohne Terminal und ohne Dateien, mit einem Knopf, der deinen Code ausführt und prüft.

1. Eine Funktion

Eine Funktion bekommt Werte, rechnet damit und gibt ein Ergebnis zurück. Diese hier bekommt eine Zahl und gibt ihr Dreifaches zurück:

def triple(n)
  3 * n
end

puts triple(14)

In Ruby ist das Ergebnis der Wert der letzten Zeile; return 3 * n schreibt es ausdrücklich hin. puts ruft die Funktion zum Ausprobieren auf und schreibt ihr Ergebnis, 42, ins Terminal.

def triple(n):
    return 3 * n

print(triple(14))

return gibt das Ergebnis zurück. print ruft die Funktion zum Ausprobieren auf und schreibt ihr Ergebnis, 42, ins Terminal.

function triple(n) {
  return 3 * n;
}

console.log(triple(14));

return gibt das Ergebnis zurück. console.log ruft die Funktion zum Ausprobieren auf und schreibt ihr Ergebnis, 42, in die Ausgabe. Namen aus mehreren Wörtern schreibt man in JavaScript zusammen, jedes weitere Wort groß: rectangleArea.

In jeder Karte unten schreibst du eine solche Funktion. Ausführen startet deinen Code einmal und zeigt, was er ausgibt; dann ruft es deine Funktion mit verschiedenen Werten auf und vergleicht, was herauskommt. Neben dem Titel steht, wie schwer eine Kata ist: Einstieg, Übung oder Knobelei. Du darfst springen.

2. Einstieg

Aufgabe 1Zwei Zahlen addierenEinstieg

Schreib eine Funktion add(a, b), die die Summe der beiden Zahlen zurückgibt: add(2, 3) ergibt 5.

Aufgabe 1Zwei Zahlen addierenEinstieg

Schreib eine Funktion add(a, b), die die Summe der beiden Zahlen zurückgibt: add(2, 3) ergibt 5.

Aufgabe 1Zwei Zahlen addierenEinstieg

Schreib eine Funktion add(a, b), die die Summe der beiden Zahlen zurückgibt: add(2, 3) ergibt 5.

Aufgabe 2VerdoppelnEinstieg

Schreib eine Funktion double(n), die das Doppelte einer Zahl zurückgibt: double(21) ergibt 42.

Aufgabe 2VerdoppelnEinstieg

Schreib eine Funktion double(n), die das Doppelte einer Zahl zurückgibt: double(21) ergibt 42.

Aufgabe 2VerdoppelnEinstieg

Schreib eine Funktion double(n), die das Doppelte einer Zahl zurückgibt: double(21) ergibt 42.

Aufgabe 3Eine BegrüßungEinstieg

Schreib eine Funktion greet(name), die eine Begrüßung zurückgibt: greet('Ada') ergibt 'Hallo, Ada!'.

Tipp

Zwei Texte hängst du mit + aneinander. Oder du setzt den Namen mit "Hallo, #{name}!" mitten in den Text.

Aufgabe 3Eine BegrüßungEinstieg

Schreib eine Funktion greet(name), die eine Begrüßung zurückgibt: greet('Ada') ergibt 'Hallo, Ada!'.

Tipp

Zwei Texte hängst du mit + aneinander. Oder du setzt den Namen mit f'Hallo, {name}!' mitten in den Text.

Aufgabe 3Eine BegrüßungEinstieg

Schreib eine Funktion greet(name), die eine Begrüßung zurückgibt: greet('Ada') ergibt 'Hallo, Ada!'.

Tipp

Zwei Texte hängst du mit + aneinander. Oder du setzt den Namen mit `Hallo, ${name}!` mitten in den Text: zwischen Backticks.

Aufgabe 4Die Fläche eines RechtecksEinstieg

Schreib eine Funktion rectangle_area(width, height), die die Fläche eines Rechtecks zurückgibt: rectangle_area(3, 4) ergibt 12.

Aufgabe 4Die Fläche eines RechtecksEinstieg

Schreib eine Funktion rectangle_area(width, height), die die Fläche eines Rechtecks zurückgibt: rectangle_area(3, 4) ergibt 12.

Aufgabe 4Die Fläche eines RechtecksEinstieg

Schreib eine Funktion rectangleArea(width, height), die die Fläche eines Rechtecks zurückgibt: rectangleArea(3, 4) ergibt 12.

Ausprobieren: Ruf eine deiner Funktionen in der letzten Zeile mit anderen Werten auf, etwa mit einem Text statt einer Zahl, und drück Ausführen. Was meldet dein Programm?

3. Übung

Jetzt rechnen die Funktionen ein wenig mehr. Achte darauf, was zuerst gerechnet wird, und darauf, ob eine ganze Zahl oder eine Kommazahl herauskommt.

Aufgabe 5Celsius in FahrenheitÜbung

In den USA misst man die Temperatur in Grad Fahrenheit. Man rechnet um, indem man die Grad Celsius mit 1,8 multipliziert und 32 addiert. Schreib eine Funktion fahrenheit(celsius): fahrenheit(100) ergibt 212, fahrenheit(37.5) ergibt 99.5.

Tipp

Rechne fahrenheit(10) von Hand: 10 mal 1,8 ist 18, dazu 32 macht 50.

Nächster Tipp

Ein Komma schreibst du in Ruby als Punkt: 1.8.

Aufgabe 5Celsius in FahrenheitÜbung

In den USA misst man die Temperatur in Grad Fahrenheit. Man rechnet um, indem man die Grad Celsius mit 1,8 multipliziert und 32 addiert. Schreib eine Funktion fahrenheit(celsius): fahrenheit(100) ergibt 212, fahrenheit(37.5) ergibt 99.5.

Tipp

Rechne fahrenheit(10) von Hand: 10 mal 1,8 ist 18, dazu 32 macht 50.

Nächster Tipp

Ein Komma schreibst du in Python als Punkt: 1.8.

Aufgabe 5Celsius in FahrenheitÜbung

In den USA misst man die Temperatur in Grad Fahrenheit. Man rechnet um, indem man die Grad Celsius mit 1,8 multipliziert und 32 addiert. Schreib eine Funktion fahrenheit(celsius): fahrenheit(100) ergibt 212, fahrenheit(37.5) ergibt 99.5.

Tipp

Rechne fahrenheit(10) von Hand: 10 mal 1,8 ist 18, dazu 32 macht 50.

Nächster Tipp

Ein Komma schreibst du in JavaScript als Punkt: 1.8.

Aufgabe 6Sekunden als UhrzeitÜbung

Ein Video ist 125 Sekunden lang. Ein Player zeigt das als 2:05: zwei Minuten und fünf Sekunden. Schreib eine Funktion clock(seconds), die diesen Text zurückgibt; die Sekunden immer mit zwei Ziffern.

Tipp

Wie viele ganze Minuten stecken in 125 Sekunden, und wie viele Sekunden bleiben übrig?

Nächster Tipp

/ mit zwei ganzen Zahlen gibt die ganzen Minuten, % den Rest.

Nächster Tipp

Zwei Ziffern bekommst du mit format('%02d', zahl), oder mit zahl.to_s.rjust(2, '0').

Aufgabe 6Sekunden als UhrzeitÜbung

Ein Video ist 125 Sekunden lang. Ein Player zeigt das als 2:05: zwei Minuten und fünf Sekunden. Schreib eine Funktion clock(seconds), die diesen Text zurückgibt; die Sekunden immer mit zwei Ziffern.

Tipp

Wie viele ganze Minuten stecken in 125 Sekunden, und wie viele Sekunden bleiben übrig?

Nächster Tipp

// gibt die ganzen Minuten, % den Rest.

Nächster Tipp

Zwei Ziffern bekommst du mit f'{zahl:02d}'.

Aufgabe 6Sekunden als UhrzeitÜbung

Ein Video ist 125 Sekunden lang. Ein Player zeigt das als 2:05: zwei Minuten und fünf Sekunden. Schreib eine Funktion clock(seconds), die diesen Text zurückgibt; die Sekunden immer mit zwei Ziffern.

Tipp

Wie viele ganze Minuten stecken in 125 Sekunden, und wie viele Sekunden bleiben übrig?

Nächster Tipp

Math.floor(seconds / 60) gibt die ganzen Minuten, % den Rest.

Nächster Tipp

Zwei Ziffern bekommst du mit String(zahl).padStart(2, '0').

Aufgabe 7Der DurchschnittÜbung

Schreib eine Funktion average(a, b, c), die den Durchschnitt dreier Zahlen zurückgibt: average(1, 2, 3) ergibt 2, average(1, 2, 4) ergibt etwa 2.333.

Tipp

Der Durchschnitt ist die Summe geteilt durch die Anzahl.

Nächster Tipp

Achte darauf, was zuerst gerechnet wird, und darauf, was / mit ganzen Zahlen macht.

Aufgabe 7Der DurchschnittÜbung

Schreib eine Funktion average(a, b, c), die den Durchschnitt dreier Zahlen zurückgibt: average(1, 2, 3) ergibt 2, average(1, 2, 4) ergibt etwa 2.333.

Tipp

Der Durchschnitt ist die Summe geteilt durch die Anzahl.

Nächster Tipp

Achte darauf, was zuerst gerechnet wird.

Aufgabe 7Der DurchschnittÜbung

Schreib eine Funktion average(a, b, c), die den Durchschnitt dreier Zahlen zurückgibt: average(1, 2, 3) ergibt 2, average(1, 2, 4) ergibt etwa 2.333.

Tipp

Der Durchschnitt ist die Summe geteilt durch die Anzahl.

Nächster Tipp

Achte darauf, was zuerst gerechnet wird.

Aufgabe 8Der Preis mit RabattÜbung

Im Schulkiosk kostet ein Brötchen unit_price Euro. Wer mehrere kauft, bekommt discount Prozent Rabatt auf alles. Schreib eine Funktion price(count, unit_price, discount): price(3, 2.5, 10) ergibt 6.75, denn 3 Brötchen kosten 7,50 Euro, und 10 Prozent davon sind 75 Cent.

Tipp

Rechne das Beispiel Schritt für Schritt: erst der Preis ohne Rabatt, dann der Rabatt in Euro, dann der Unterschied.

Nächster Tipp

Der Rabatt in Euro ist Preis mal discount durch 100. Denk an die Division in Ruby.

Aufgabe 8Der Preis mit RabattÜbung

Im Schulkiosk kostet ein Brötchen unit_price Euro. Wer mehrere kauft, bekommt discount Prozent Rabatt auf alles. Schreib eine Funktion price(count, unit_price, discount): price(3, 2.5, 10) ergibt 6.75, denn 3 Brötchen kosten 7,50 Euro, und 10 Prozent davon sind 75 Cent.

Tipp

Rechne das Beispiel Schritt für Schritt: erst der Preis ohne Rabatt, dann der Rabatt in Euro, dann der Unterschied.

Nächster Tipp

Der Rabatt in Euro ist Preis mal discount durch 100.

Aufgabe 8Der Preis mit RabattÜbung

Im Schulkiosk kostet ein Brötchen unitPrice Euro. Wer mehrere kauft, bekommt discount Prozent Rabatt auf alles. Schreib eine Funktion price(count, unitPrice, discount): price(3, 2.5, 10) ergibt 6.75, denn 3 Brötchen kosten 7,50 Euro, und 10 Prozent davon sind 75 Cent.

Tipp

Rechne das Beispiel Schritt für Schritt: erst der Preis ohne Rabatt, dann der Rabatt in Euro, dann der Unterschied.

Nächster Tipp

Der Rabatt in Euro ist Preis mal discount durch 100.

4. Knobelei

Hier brauchst du einen Plan, bevor du schreibst. Rechne ein Beispiel von Hand, und schreib dir auf, welche Schritte du dabei gemacht hast.

Aufgabe 9Die Uhr nach n MinutenKnobelei

Es ist 23:50 Uhr. Wie spät ist es 25 Minuten später? Schreib eine Funktion clock_after(hour, minute, minutes), die die Uhrzeit nach minutes Minuten als Text mit zwei Ziffern für Stunden und Minuten zurückgibt: clock_after(23, 50, 25) ergibt '00:15'.

Tipp

Zähl alles in Minuten seit Mitternacht: 23:50 Uhr sind 23 · 60 + 50 = 1430 Minuten.

Nächster Tipp

Ein Tag hat 1440 Minuten. Was liefert % 1440, wenn die Summe darüber liegt?

Nächster Tipp

Aus den Minuten seit Mitternacht werden mit / 60 und % 60 wieder Stunden und Minuten; format('%02d:%02d', …) schreibt sie mit zwei Ziffern.

Aufgabe 9Die Uhr nach n MinutenKnobelei

Es ist 23:50 Uhr. Wie spät ist es 25 Minuten später? Schreib eine Funktion clock_after(hour, minute, minutes), die die Uhrzeit nach minutes Minuten als Text mit zwei Ziffern für Stunden und Minuten zurückgibt: clock_after(23, 50, 25) ergibt '00:15'.

Tipp

Zähl alles in Minuten seit Mitternacht: 23:50 Uhr sind 23 · 60 + 50 = 1430 Minuten.

Nächster Tipp

Ein Tag hat 1440 Minuten. Was liefert % 1440, wenn die Summe darüber liegt?

Nächster Tipp

Aus den Minuten seit Mitternacht werden mit // 60 und % 60 wieder Stunden und Minuten; f'{zahl:02d}' schreibt sie mit zwei Ziffern.

Aufgabe 9Die Uhr nach n MinutenKnobelei

Es ist 23:50 Uhr. Wie spät ist es 25 Minuten später? Schreib eine Funktion clockAfter(hour, minute, minutes), die die Uhrzeit nach minutes Minuten als Text mit zwei Ziffern für Stunden und Minuten zurückgibt: clockAfter(23, 50, 25) ergibt '00:15'.

Tipp

Zähl alles in Minuten seit Mitternacht: 23:50 Uhr sind 23 · 60 + 50 = 1430 Minuten.

Nächster Tipp

Ein Tag hat 1440 Minuten. Was liefert % 1440, wenn die Summe darüber liegt?

Nächster Tipp

Aus den Minuten seit Mitternacht werden mit Math.floor(… / 60) und % 60 wieder Stunden und Minuten; String(zahl).padStart(2, '0') schreibt sie mit zwei Ziffern.

Aufgabe 10Die letzte ZifferKnobelei

Schreib eine Funktion last_digit(n), die die letzte Ziffer einer ganzen Zahl zurückgibt, auch bei negativen Zahlen: last_digit(1234) ergibt 4, last_digit(-57) ergibt 7. Ohne die Zahl in einen Text zu verwandeln.

Tipp

Was bleibt übrig, wenn du 1234 durch 10 teilst?

Nächster Tipp

Bei negativen Zahlen hilft der Betrag: n.abs.

Aufgabe 10Die letzte ZifferKnobelei

Schreib eine Funktion last_digit(n), die die letzte Ziffer einer ganzen Zahl zurückgibt, auch bei negativen Zahlen: last_digit(1234) ergibt 4, last_digit(-57) ergibt 7. Ohne die Zahl in einen Text zu verwandeln.

Tipp

Was bleibt übrig, wenn du 1234 durch 10 teilst?

Nächster Tipp

Bei negativen Zahlen hilft der Betrag: abs(n).

Aufgabe 10Die letzte ZifferKnobelei

Schreib eine Funktion lastDigit(n), die die letzte Ziffer einer ganzen Zahl zurückgibt, auch bei negativen Zahlen: lastDigit(1234) ergibt 4, lastDigit(-57) ergibt 7. Ohne die Zahl in einen Text zu verwandeln.

Tipp

Was bleibt übrig, wenn du 1234 durch 10 teilst?

Nächster Tipp

Bei negativen Zahlen hilft der Betrag: Math.abs(n).

5. Extras Extra

Ein Extra für Schnelle: Die Seite ist ohne dieses Kapitel vollständig.

Für alle, die schon fertig sind: zwei Katas, die nicht mitzählen.

Aufgabe 11Ziffern rückwärtsExtra

Schreib eine Funktion reverse_digits(n), die die Ziffern einer höchstens dreistelligen Zahl umdreht: reverse_digits(123) ergibt 321, reverse_digits(45) ergibt 54. Nur mit Rechnen, ohne Texte und ohne Schleife.

Tipp

Die Einer bekommst du mit % 10. Wie bekommst du die Zehner und die Hunderter?

Nächster Tipp

Bei zweistelligen Zahlen sind die Hunderter 0. Schreib die Zahl erst so, als hätte sie immer drei Ziffern, und lass dann die Nullen weg, die vorne stehen würden.

Aufgabe 11Ziffern rückwärtsExtra

Schreib eine Funktion reverse_digits(n), die die Ziffern einer höchstens dreistelligen Zahl umdreht: reverse_digits(123) ergibt 321, reverse_digits(45) ergibt 54. Nur mit Rechnen, ohne Texte und ohne Schleife.

Tipp

Die Einer bekommst du mit % 10. Wie bekommst du die Zehner und die Hunderter?

Nächster Tipp

Bei zweistelligen Zahlen sind die Hunderter 0. Schreib die Zahl erst so, als hätte sie immer drei Ziffern, und lass dann die Nullen weg, die vorne stehen würden.

Aufgabe 11Ziffern rückwärtsExtra

Schreib eine Funktion reverseDigits(n), die die Ziffern einer höchstens dreistelligen Zahl umdreht: reverseDigits(123) ergibt 321, reverseDigits(45) ergibt 54. Nur mit Rechnen, ohne Texte und ohne Schleife.

Tipp

Die Einer bekommst du mit % 10. Wie bekommst du die Zehner und die Hunderter?

Nächster Tipp

Bei zweistelligen Zahlen sind die Hunderter 0. Schreib die Zahl erst so, als hätte sie immer drei Ziffern, und lass dann die Nullen weg, die vorne stehen würden.

Aufgabe 12Stunden, Minuten, SekundenExtra

Ein Film dauert 7385 Sekunden. Schreib eine Funktion duration(seconds), die daraus '2:03:05' macht: Stunden, dann Minuten und Sekunden mit je zwei Ziffern.

Tipp

Wie viele ganze Stunden stecken in 7385 Sekunden? Was bleibt danach übrig?

Aufgabe 12Stunden, Minuten, SekundenExtra

Ein Film dauert 7385 Sekunden. Schreib eine Funktion duration(seconds), die daraus '2:03:05' macht: Stunden, dann Minuten und Sekunden mit je zwei Ziffern.

Tipp

Wie viele ganze Stunden stecken in 7385 Sekunden? Was bleibt danach übrig?

Aufgabe 12Stunden, Minuten, SekundenExtra

Ein Film dauert 7385 Sekunden. Schreib eine Funktion duration(seconds), die daraus '2:03:05' macht: Stunden, dann Minuten und Sekunden mit je zwei Ziffern.

Tipp

Wie viele ganze Stunden stecken in 7385 Sekunden? Was bleibt danach übrig?

Weiter geht es mit Entscheidungen: Funktionen, die je nach Wert etwas anderes tun.