Zahlen, Bedingungen, Schleifen, Arrays
Definitiv viel.
Einige Uebungsaufgaben
Mit Schleifen und if kann man schon so ziemlich jedes Problem loesen.
Die folgenden Uebungsaufgaben sind keine Voraussetzung um Eprog zu schaffen,
einige sind sehr schwer:
- Zaehlen von Woertern in einem Text
- Zaehlen von Buchstaben in einem Text
- (Schwer aber interessant)
Relative Haeufigkeit von Buchstaben in einem Text (kann i.B. bei
laengeren Texten benutzt werden um automatisch die Sprache zu erkennen -
auch eine nette Aufgabe)
- (aehnlich wie vorige Aufgabe) Erkennen von
Palinodromen, Anagrammen, ...
- Fakultaet bestimmen
- Maximum/Minimum/Varianz/Standardabweichung einer Zahlenfolge bestimmen
- Primzahlentest
- Zahlen faktorisieren
- Naeherungsverfahren fuer Pi, E, Wurzeln [z.B. Heron-Verfahren] (so
etwas wird sicher bei einem Test vorkommen).
- (Schwer, werden wir in einer spaeteren Runde als Testvorbereitung machen)
Sortieren von Folgen
- Alte Eprog-Uebungsaufgaben finden sich auf
Eprog bei SF.
Vorsicht: Frueher lief in Eprog einiges anders, daher beruecksichtigen,
dass viele Loesungen heute nicht mehr funktionieren (z.B. gibt
es eprog.io nicht mehr und Java unterstuetzt seit Version 1.5
Generizitaet und Autoboxing).
Man kann auch Arrays von Arrays erstellen:
double[][] matrix = new double[3][3]; erstellt eine
3x3-Matrix.
Und bei Matrizen gibt es einen nahezu unerschoepflichen Fundus an
Uebungsbeispielen (sind aber schwer und aufwendig):
- Multiplizieren von Matrizen
- Determinanten bestimmen (muss man ohnehin bei Mathematik 1 machen)
Zune-Bug
Und eine praxisrelevante Aufgabe: Am 31. Dezember 2008 liessen sich die Zune-MP3-Player
von MS nicht starten. Der Grund war folgender Programmcode, der die aktuelle
Jahreszahl ermitteln soll und der beim Start des Zunes ausgefuehrt wird. Aufgabe:
Warum liessen die Zunes nicht starten? An welchen weiteren Tagen tritt das Problem noch
auf? Wie laesst sich der Fehler korrigieren?
boolean isLeapYear(int year) {
// Gibt true zurueck, wenn year ein Schaltjahr ist, ansonsten false.
}
// ...
year = 1980
// days = Tage vergangen seit dem 1.1. 1980
while (days > 365) {
if (isLeapYear(year)) {
if (days > 366) {
days -= 366;
year += 1;
}
} else {
days -= 365;
year += 1;
}
}
Quelle: Zune bug explained in detail