groovy-lecture/aufgaben/yase_aufgaben.md

144 lines
4.3 KiB
Markdown

# Aufgaben
## Aufgabe 1: Römer und ihre Zahlen
Die Römer hatten ihre eigene Art, Zahlen zu schreiben, und sie waren ziemlich stolz darauf! Deine Aufgabe ist es, eine Klasse zu erstellen, die eine Dezimalzahl in eine römische Zahl umwandelt.
## Lösung
```
class Roman {
static def romanNumerals = [
1000: "M", 900: "CM", 500: "D", 400: "CD",
100: "C", 90: "XC", 50: "L", 40: "XL",
10: "X", 9: "IX", 5: "V", 4: "IV",
1: "I"
]
static def toRoman(int number) {
def result = ""
for (entry in romanNumerals.entrySet()) {
while (number >= entry.key) {
result += entry.value
number -= entry.key
}
}
return result
}
static void main (String[] args) {
def decimalNumber = 2000
println("Die Dezimalzahl $decimalNumber wird in römischen Zahlen geschrieben als: ${toRoman(decimalNumber)}")
}
}
```
## Aufgabe 2: String-Filter
Schreibe ein Programm, das eine Zeichenkette von der Tastatur einliest und in drei Teile aufteilt:
- Eine Zeile mit nur den Vokalen der Zeichenkette.
- Eine Zeile mit nur den Konsonanten der Zeichenkette.
- Eine Zeile mit nur den Sonderzeichen der Zeichenkette (alles außer Vokale und Konsonanten).
### Beispielausgabe:
Für den Eingabestring "Hallo, Welt! 2024" sollte das Programm folgende Ausgaben erzeugen:
```
a o e
H l l W l t
, ! 2 0 2 4
```
## Lösung
```
class StringFilter {
static void filterString(String input) {
def vowels = "aeiouAEIOU"
def consonants = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"
def vowelString = ""
def consonantString = ""
def specialCharString = ""
for (c in input) {
if (vowels.contains(c.toString())) {
vowelString += c + " "
} else if (consonants.contains(c.toString())) {
consonantString += c + " "
} else {
specialCharString += c + " "
}
}
println "Vokale: $vowelString"
println "Konsonanten: $consonantString"
println "Sonderzeichen: $specialCharString"
}
static void main(String[] args) {
print "Bitte gib einen String ein: "
def input = System.console().readLine()
filterString(input)
}
}
```
## Aufgabe 3: Zahlenraten!
Der mächtige Groovy-Zauberer hat sich in seiner geheimen Kammer eine Zahl zwischen 1 und 100 ausgedacht. Deine Aufgabe, tapferer Abenteurer, ist es, diese magische Zahl zu erraten.
Jedes Mal, wenn du eine Zahl eingibst, wird der Groovy-Zauberer dir mitteilen, ob deine Schätzung zu hoch oder zu niedrig war. Deine Herausforderung besteht darin, die richtige Zahl zu finden, indem du so lange rätst, bis du die magische Zahl des Zauberers gefunden hast.
Schreibe ein Programm, das folgende Anforderungen erfüllt:
Das Programm generiert eine zufällige Zahl zwischen 1 und 100.
Der Benutzer wird aufgefordert, eine Zahl einzugeben.
Das Programm gibt eine Rückmeldung, ob die eingegebene Zahl zu hoch oder zu niedrig ist.
Der Benutzer rät so lange, bis er die richtige Zahl gefunden hat.
Wenn die Zahl erraten wurde, gibt das Programm eine Erfolgsmeldung aus.
Viel Spaß beim Raten, und möge der Groovy-Zauber mit dir sein!
## Lösung
```
import java.util.Random
import java.util.Scanner
class GuessingGame {
private int targetNumber
private Random random = new Random()
GuessingGame() {
targetNumber = random.nextInt(100) + 1
}
boolean checkGuess(int guess) {
if (guess > targetNumber) {
println("Zu hoch! Versuch es nochmal.")
return false
} else if (guess < targetNumber) {
println("Zu niedrig! Versuch es nochmal.")
return false
} else {
println("Herzlichen Glückwunsch! Du hast die Zahl $targetNumber erraten!")
return true
}
}
static void main(String[] args) {
Scanner scanner = new Scanner(System.in)
GuessingGame game = new GuessingGame()
boolean correctGuess = false
println("Willkommen beim ultimativen Ratespiel! Ich habe mir eine Zahl zwischen 1 und 100 ausgedacht. Kannst du sie erraten?")
while (!correctGuess) {
print("Gib deine Zahl ein: ")
int guess = scanner.nextInt()
correctGuess = game.checkGuess(guess)
}
}
}
```