Zum Inhalt
wannacode

Aufgaben

Hier sind alle Aufgaben des Kurses an einem Ort. Zuerst 50 eigenständige Aufgaben von „Hallo, Welt“ bis zum kürzesten Weg in einem Raster, jede mit einem Beispiel und einer Lösung in C#, geprüft mit einem echten Compiler. Danach die Aufgaben aus den Lektionen, nach Modulen: Jede führt zu der Lektion, die erklärt, was du brauchst.

50 Aufgaben zum Üben

  1. 1. Hello World

    Gib den Text Hello, World! auf der Konsole aus. Das Programm hat keine Eingabe.

    Keine Eingabe.

    Ausgabe
    Hello, World!

    Was du brauchst, steht in der Lektion: Dein erstes Programm

    Lösung
    class Program
    {
    static void Main()
    {
    Console.WriteLine("Hello, World!");
    }
    }
  2. 2. Begrüße den Benutzer

    Lies einen Namen aus einer Zeile und begrüße die Person mit ihrem Namen in der Form „Hallo, <Name>!“.

    Eingabe
    Maria
    Ausgabe
    Hallo, Maria!

    Was du brauchst, steht in der Lektion: Eingabe und Ausgabe

    Lösung
    class Program
    {
    static void Main()
    {
    string name = Console.ReadLine();
    Console.WriteLine("Hallo, " + name + "!");
    }
    }
  3. 3. Das Alter ausgeben

    Lies das Alter des Benutzers (eine ganze Zahl), speichere es in einer Variablen und gib es in einem Satz aus.

    Eingabe
    17
    Ausgabe
    Du bist 17 Jahre alt.

    Was du brauchst, steht in der Lektion: Variablen und Typen

    Lösung
    class Program
    {
    static void Main()
    {
    int age = int.Parse(Console.ReadLine());
    Console.WriteLine("Du bist " + age + " Jahre alt.");
    }
    }
  4. 4. Einheitenumrechner

    Lies eine Länge in Zoll (sie kann eine Dezimalzahl sein) und rechne sie in Zentimeter um: 1 Zoll = 2,54 cm. Gib das Ergebnis mit 2 Nachkommastellen aus.

    Eingabe
    12.5
    Ausgabe
    31.75 cm

    Was du brauchst, steht in der Lektion: Operatoren und Arithmetik

    Lösung
    using System.Globalization;
    class Program
    {
    static void Main()
    {
    double inches = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);
    Console.WriteLine((inches * 2.54).ToString("F2", CultureInfo.InvariantCulture) + " cm");
    }
    }
  5. 5. Gerade oder ungerade

    Lies eine ganze Zahl und gib aus, ob sie gerade oder ungerade ist.

    Eingabe
    7
    Ausgabe
    7 ist ungerade.

    Was du brauchst, steht in der Lektion: Bedingungen

    Lösung
    class Program
    {
    static void Main()
    {
    int number = int.Parse(Console.ReadLine());
    if (number % 2 == 0)
    {
    Console.WriteLine(number + " ist gerade.");
    }
    else
    {
    Console.WriteLine(number + " ist ungerade.");
    }
    }
    }
  6. 6. Summe zweier Zahlen

    Lies zwei ganze Zahlen, jede in einer eigenen Zeile, und gib ihre Summe aus.

    Eingabe
    12
    30
    Ausgabe
    Die Summe ist 42.

    Was du brauchst, steht in der Lektion: Operatoren und Arithmetik

    Lösung
    class Program
    {
    static void Main()
    {
    int first = int.Parse(Console.ReadLine());
    int second = int.Parse(Console.ReadLine());
    Console.WriteLine("Die Summe ist " + (first + second) + ".");
    }
    }
  7. 7. Fläche eines Quadrats

    Lies die Seitenlänge eines Quadrats (eine ganze Zahl) und gib seinen Flächeninhalt aus.

    Eingabe
    5
    Ausgabe
    Der Flächeninhalt ist 25.

    Was du brauchst, steht in der Lektion: Operatoren und Arithmetik

    Lösung
    class Program
    {
    static void Main()
    {
    int side = int.Parse(Console.ReadLine());
    Console.WriteLine("Der Flächeninhalt ist " + side * side + ".");
    }
    }
  8. 8. Volumen einer Kugel

    Lies den Radius r (er kann eine Dezimalzahl sein) und gib das Volumen der Kugel V = 4/3 · π · r³ mit 2 Nachkommastellen aus.

    Eingabe
    3
    Ausgabe
    Das Volumen ist 113.10.

    Was du brauchst, steht in der Lektion: Operatoren und Arithmetik

    Lösung
    using System.Globalization;
    class Program
    {
    static void Main()
    {
    double r = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);
    double volume = 4.0 / 3 * Math.PI * r * r * r;
    Console.WriteLine("Das Volumen ist " + volume.ToString("F2", CultureInfo.InvariantCulture) + ".");
    }
    }
  9. 9. Zwei Zahlen vergleichen

    Lies zwei ganze Zahlen, jede in einer eigenen Zeile, und gib die größere aus (wenn sie gleich sind, egal welche).

    Eingabe
    8
    15
    Ausgabe
    Die größere Zahl ist 15.

    Was du brauchst, steht in der Lektion: Bedingungen

    Lösung
    class Program
    {
    static void Main()
    {
    int a = int.Parse(Console.ReadLine());
    int b = int.Parse(Console.ReadLine());
    if (a > b)
    {
    Console.WriteLine("Die größere Zahl ist " + a + ".");
    }
    else
    {
    Console.WriteLine("Die größere Zahl ist " + b + ".");
    }
    }
    }
  10. 10. Dreiecksprüfung

    Lies drei ganze Zahlen, jede in einer eigenen Zeile, und prüfe, ob sie die Seiten eines Dreiecks sein können: Die Summe von je zwei muss größer sein als die dritte.

    Eingabe
    3
    4
    5
    Ausgabe
    Sie können ein Dreieck bilden.

    Was du brauchst, steht in der Lektion: Bedingungen

    Lösung
    class Program
    {
    static void Main()
    {
    int a = int.Parse(Console.ReadLine());
    int b = int.Parse(Console.ReadLine());
    int c = int.Parse(Console.ReadLine());
    if (a + b > c && a + c > b && b + c > a)
    {
    Console.WriteLine("Sie können ein Dreieck bilden.");
    }
    else
    {
    Console.WriteLine("Sie können kein Dreieck bilden.");
    }
    }
    }
  11. 11. Note in Worten

    Lies eine Note von 2 bis 6 (6 ist die beste; die Note kann eine Dezimalzahl sein) und gib sie in Worten aus: ab 5,50 Ausgezeichnet, ab 4,50 Sehr gut, ab 3,50 Gut, ab 3,00 Ausreichend, unter 3,00 Ungenügend.

    Eingabe
    4.75
    Ausgabe
    Sehr gut

    Was du brauchst, steht in der Lektion: Bedingungen

    Lösung
    using System.Globalization;
    class Program
    {
    static void Main()
    {
    double grade = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);
    if (grade >= 5.5)
    {
    Console.WriteLine("Ausgezeichnet");
    }
    else if (grade >= 4.5)
    {
    Console.WriteLine("Sehr gut");
    }
    else if (grade >= 3.5)
    {
    Console.WriteLine("Gut");
    }
    else if (grade >= 3)
    {
    Console.WriteLine("Ausreichend");
    }
    else
    {
    Console.WriteLine("Ungenügend");
    }
    }
    }
  12. 12. Stunden in Sekunden

    Lies eine Anzahl Stunden (eine ganze Zahl) und gib aus, wie viele Sekunden das sind.

    Eingabe
    2
    Ausgabe
    7200 Sekunden

    Was du brauchst, steht in der Lektion: Operatoren und Arithmetik

    Lösung
    class Program
    {
    static void Main()
    {
    int hours = int.Parse(Console.ReadLine());
    Console.WriteLine(hours * 3600 + " Sekunden");
    }
    }
  13. 13. Zählen bis N

    Lies eine ganze Zahl N und gib die Zahlen von 1 bis N aus, jede in einer neuen Zeile.

    Eingabe
    5
    Ausgabe
    1
    2
    3
    4
    5

    Was du brauchst, steht in der Lektion: Schleifen

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    for (int i = 1; i <= n; i++)
    {
    Console.WriteLine(i);
    }
    }
    }
  14. 14. ASCII-Wert

    Lies ein Zeichen (das erste Zeichen der Zeile) und gib seinen ASCII-Code aus, also die Zahl, als die der Computer es speichert.

    Eingabe
    A
    Ausgabe
    Der Code von A ist 65.

    Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten

    Lösung
    class Program
    {
    static void Main()
    {
    char symbol = Console.ReadLine()[0];
    Console.WriteLine("Der Code von " + symbol + " ist " + (int)symbol + ".");
    }
    }
  15. 15. Quadratische Gleichung

    Lies a, b und c, jeweils in einer eigenen Zeile, und löse die Gleichung ax² + bx + c = 0. Bei zwei Lösungen gib „x1 = …, x2 = …“ aus (x1 ist die mit +√D), bei einer „x = …“, jeweils mit 2 Nachkommastellen; wenn es keine reellen Lösungen gibt oder a gleich 0 ist, sag es.

    Eingabe
    1
    -3
    2
    Ausgabe
    x1 = 2.00, x2 = 1.00

    Was du brauchst, steht in der Lektion: Bedingungen

    Lösung
    using System.Globalization;
    class Program
    {
    static void Main()
    {
    double a = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);
    double b = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);
    double c = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);
    if (a == 0)
    {
    Console.WriteLine("Das ist keine quadratische Gleichung");
    }
    else
    {
    double d = b * b - 4 * a * c;
    if (d > 0)
    {
    double x1 = (-b + Math.Sqrt(d)) / (2 * a);
    double x2 = (-b - Math.Sqrt(d)) / (2 * a);
    Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "x1 = {0:F2}, x2 = {1:F2}", x1, x2));
    }
    else if (d == 0)
    {
    Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "x = {0:F2}", -b / (2 * a)));
    }
    else
    {
    Console.WriteLine("Keine reellen Lösungen");
    }
    }
    }
    }
  16. 16. Positiv oder negativ

    Lies eine ganze Zahl und gib aus, ob sie positiv, negativ oder null ist.

    Eingabe
    -4
    Ausgabe
    Negativ

    Was du brauchst, steht in der Lektion: Bedingungen

    Lösung
    class Program
    {
    static void Main()
    {
    int number = int.Parse(Console.ReadLine());
    if (number > 0)
    {
    Console.WriteLine("Positiv");
    }
    else if (number < 0)
    {
    Console.WriteLine("Negativ");
    }
    else
    {
    Console.WriteLine("Null");
    }
    }
    }
  17. 17. Jahreszeiten

    Lies die Nummer eines Monats (1–12) und gib die Jahreszeit aus: 12, 1, 2 Winter, 3–5 Frühling, 6–8 Sommer, 9–11 Herbst. Bei jeder anderen Zahl gib „Ungültiger Monat“ aus.

    Eingabe
    4
    Ausgabe
    Frühling

    Was du brauchst, steht in der Lektion: Bedingungen

    Lösung
    class Program
    {
    static void Main()
    {
    int month = int.Parse(Console.ReadLine());
    if (month < 1 || month > 12)
    {
    Console.WriteLine("Ungültiger Monat");
    }
    else if (month == 12 || month <= 2)
    {
    Console.WriteLine("Winter");
    }
    else if (month <= 5)
    {
    Console.WriteLine("Frühling");
    }
    else if (month <= 8)
    {
    Console.WriteLine("Sommer");
    }
    else
    {
    Console.WriteLine("Herbst");
    }
    }
    }
  18. 18. Zahl umdrehen

    Lies eine positive ganze Zahl und gib die Zahl mit ihren Ziffern in umgekehrter Reihenfolge aus: Aus 123 wird 321. Nullen, die dabei nach vorne kommen, verschwinden (aus 1200 wird 21). Nimm die letzte Ziffer mit % 10 und entferne sie, indem du durch 10 teilst.

    Eingabe
    9071
    Ausgabe
    1709

    Was du brauchst, steht in der Lektion: Schleifen

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    int reversed = 0;
    while (n > 0)
    {
    reversed = reversed * 10 + n % 10;
    n /= 10;
    }
    Console.WriteLine(reversed);
    }
    }
  19. 19. Temperaturumrechner

    Lies eine Temperatur in Grad Celsius (sie kann eine Dezimalzahl mit Punkt sein) und gib sie in Fahrenheit mit zwei Nachkommastellen aus. Die Formel ist F = C * 9 / 5 + 32.

    Eingabe
    36.6
    Ausgabe
    97.88 °F

    Was du brauchst, steht in der Lektion: Operatoren und Arithmetik

    Lösung
    using System.Globalization;
    class Program
    {
    static void Main()
    {
    double celsius = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);
    double fahrenheit = celsius * 9 / 5 + 32;
    Console.WriteLine(fahrenheit.ToString("F2", CultureInfo.InvariantCulture) + " °F");
    }
    }
  20. 20. Längster Name

    In der ersten Zeile steht die Anzahl der Namen n, in den nächsten n Zeilen je ein Name. Gib den Namen mit den meisten Buchstaben und deren Anzahl in Klammern aus; sind zwei Namen gleich lang, gib den ersten davon aus.

    Eingabe
    4
    Mia
    Alexandra
    Jonas
    Charlotte
    Ausgabe
    Alexandra (9 Buchstaben)

    Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    string longest = "";
    for (int i = 0; i < n; i++)
    {
    string name = Console.ReadLine();
    if (name.Length > longest.Length)
    {
    longest = name;
    }
    }
    Console.WriteLine($"{longest} ({longest.Length} Buchstaben)");
    }
    }
  21. 21. Wörter zählen

    Lies eine Zeile Text und gib aus, wie viele Wörter sie hat. Die Wörter sind durch ein oder mehrere Leerzeichen getrennt, die leeren Stücke zwischen zwei Leerzeichen sind also keine Wörter.

    Eingabe
    Ich schreibe jeden Tag Code und werde besser
    Ausgabe
    8

    Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten

    Lösung
    class Program
    {
    static void Main()
    {
    string line = Console.ReadLine();
    string[] words = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);
    Console.WriteLine(words.Length);
    }
    }
  22. 22. Primzahl

    Lies eine ganze Zahl n und prüfe, ob sie eine Primzahl ist: größer als 1 und nur durch 1 und sich selbst teilbar. Es reicht, die Teiler i zu probieren, für die i * i <= n gilt.

    Eingabe
    91
    Ausgabe
    91 ist keine Primzahl

    Was du brauchst, steht in der Lektion: Schleifen

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    bool prime = n > 1;
    for (int i = 2; i * i <= n; i++)
    {
    if (n % i == 0)
    {
    prime = false;
    break;
    }
    }
    if (prime)
    {
    Console.WriteLine(n + " ist eine Primzahl");
    }
    else
    {
    Console.WriteLine(n + " ist keine Primzahl");
    }
    }
    }
  23. 23. Wochentag

    Lies eine Zahl von 1 bis 7 und gib den Namen des Wochentags auf Deutsch aus, wobei 1 Montag ist. Halte die Namen in einem Array; bei jeder anderen Zahl gib „Diesen Tag gibt es nicht“ aus.

    Eingabe
    5
    Ausgabe
    Freitag

    Was du brauchst, steht in der Lektion: Arrays

    Lösung
    class Program
    {
    static void Main()
    {
    int day = int.Parse(Console.ReadLine());
    string[] days = { "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag" };
    if (day >= 1 && day <= 7)
    {
    Console.WriteLine(days[day - 1]);
    }
    else
    {
    Console.WriteLine("Diesen Tag gibt es nicht");
    }
    }
    }
  24. 24. Fakultät

    Lies eine ganze Zahl n von 0 bis 15 und gib n! = 1 * 2 * … * n aus (0! ist 1). Schon 13! passt nicht in einen int, deshalb speicherst du das Produkt in Java und C# in einem long.

    Eingabe
    15
    Ausgabe
    15! = 1307674368000

    Was du brauchst, steht in der Lektion: Schleifen

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    long factorial = 1;
    for (int i = 2; i <= n; i++)
    {
    factorial *= i;
    }
    Console.WriteLine($"{n}! = {factorial}");
    }
    }
  25. 25. Gültiges Datum

    Lies einen Tag, einen Monat und ein Jahr, jeweils in einer eigenen Zeile, und gib „Gültiges Datum“ oder „Ungültiges Datum“ aus. Das Jahr ist mindestens 1, der Monat liegt zwischen 1 und 12 und der Tag zwischen 1 und der Anzahl der Tage in diesem Monat; der Februar hat in einem Schaltjahr 29 Tage (durch 4 teilbar, aber nicht durch 100, außer es ist durch 400 teilbar).

    Eingabe
    29
    2
    2100
    Ausgabe
    Ungültiges Datum

    Was du brauchst, steht in der Lektion: Bedingungen

    Lösung
    class Program
    {
    static void Main()
    {
    int day = int.Parse(Console.ReadLine());
    int month = int.Parse(Console.ReadLine());
    int year = int.Parse(Console.ReadLine());
    bool leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
    int days;
    if (month == 2)
    {
    days = leap ? 29 : 28;
    }
    else if (month == 4 || month == 6 || month == 9 || month == 11)
    {
    days = 30;
    }
    else
    {
    days = 31;
    }
    if (year >= 1 && month >= 1 && month <= 12 && day >= 1 && day <= days)
    {
    Console.WriteLine("Gültiges Datum");
    }
    else
    {
    Console.WriteLine("Ungültiges Datum");
    }
    }
    }
  26. 26. Buchstabenhäufigkeit

    Lies eine Zeile Text und gib aus, wie oft jeder Buchstabe darin vorkommt, egal ob groß oder klein geschrieben. Gib die Buchstaben in alphabetischer Reihenfolge aus, einen pro Zeile, in der Form „a: 5“; Leerzeichen und Satzzeichen werden nicht gezählt.

    Eingabe
    Banane und Ananas!
    Ausgabe
    a: 5
    b: 1
    d: 1
    e: 1
    n: 5
    s: 1
    u: 1

    Was du brauchst, steht in der Lektion: Dictionary und HashSet

    Lösung
    class Program
    {
    static void Main()
    {
    string text = Console.ReadLine().ToLower();
    SortedDictionary<char, int> counts = new SortedDictionary<char, int>();
    foreach (char c in text)
    {
    if (char.IsLetter(c))
    {
    counts[c] = counts.GetValueOrDefault(c, 0) + 1;
    }
    }
    foreach (KeyValuePair<char, int> pair in counts)
    {
    Console.WriteLine($"{pair.Key}: {pair.Value}");
    }
    }
    }
  27. 27. Minimum und Maximum in einem Array

    In der ersten Zeile steht die Anzahl n, in den nächsten n Zeilen je eine ganze Zahl. Lies sie in ein Array und gib die kleinste und die größte aus: Beginne beim ersten Element und vergleiche es mit den übrigen.

    Eingabe
    5
    7
    -3
    12
    0
    4
    Ausgabe
    Kleinste Zahl: -3
    Größte Zahl: 12

    Was du brauchst, steht in der Lektion: Arrays

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    int[] numbers = new int[n];
    for (int i = 0; i < n; i++)
    {
    numbers[i] = int.Parse(Console.ReadLine());
    }
    int min = numbers[0];
    int max = numbers[0];
    for (int i = 1; i < n; i++)
    {
    if (numbers[i] < min)
    {
    min = numbers[i];
    }
    if (numbers[i] > max)
    {
    max = numbers[i];
    }
    }
    Console.WriteLine("Kleinste Zahl: " + min);
    Console.WriteLine("Größte Zahl: " + max);
    }
    }
  28. 28. Array sortieren

    In der ersten Zeile steht die Anzahl n, in den nächsten n Zeilen je eine ganze Zahl. Sortiere sie selbst aufsteigend mit Bubblesort (n - 1 Durchläufe, in jedem tauschst du Nachbarn, die in der falschen Reihenfolge stehen) und gib sie in einer Zeile aus, getrennt durch Leerzeichen.

    Eingabe
    6
    5
    2
    9
    1
    5
    6
    Ausgabe
    1 2 5 5 6 9

    Was du brauchst, steht in der Lektion: Arrays

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    int[] numbers = new int[n];
    for (int i = 0; i < n; i++)
    {
    numbers[i] = int.Parse(Console.ReadLine());
    }
    for (int pass = 0; pass < n - 1; pass++)
    {
    for (int i = 0; i < n - 1 - pass; i++)
    {
    if (numbers[i] > numbers[i + 1])
    {
    int temp = numbers[i];
    numbers[i] = numbers[i + 1];
    numbers[i + 1] = temp;
    }
    }
    }
    Console.WriteLine(string.Join(" ", numbers));
    }
    }
  29. 29. Vokale ersetzen

    Lies eine Zeile Text und gib sie aus, wobei jeder Vokal, groß oder klein, durch das Zeichen * ersetzt ist. Die Vokale sind a, e, i, o, u, ä, ö, ü.

    Eingabe
    Übung macht den Meister
    Ausgabe
    *b*ng m*cht d*n M**st*r

    Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten

    Lösung
    class Program
    {
    static void Main()
    {
    string text = Console.ReadLine();
    string vowels = "aeiouäöü";
    string result = "";
    foreach (char c in text)
    {
    if (vowels.Contains(char.ToLower(c)))
    {
    result += "*";
    }
    else
    {
    result += c;
    }
    }
    Console.WriteLine(result);
    }
    }
  30. 30. Quersumme

    Lies eine nicht negative ganze Zahl und gib die Summe ihrer Ziffern aus. Die letzte Ziffer ist n % 10, und n / 10 entfernt sie (in Python n // 10).

    Eingabe
    9875
    Ausgabe
    29

    Was du brauchst, steht in der Lektion: Schleifen

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    int sum = 0;
    while (n > 0)
    {
    sum += n % 10;
    n /= 10;
    }
    Console.WriteLine(sum);
    }
    }
  31. 31. Palindrom

    Lies eine Zeile Text und prüfe, ob sie ein Palindrom ist, sich also rückwärts genauso liest. Groß- und Kleinbuchstaben gelten als gleich, Leerzeichen werden übersprungen. Gib „Palindrom“ oder „Kein Palindrom“ aus.

    Eingabe
    Lagerregal
    Ausgabe
    Palindrom

    Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten

    Lösung
    class Program
    {
    static void Main()
    {
    string text = Console.ReadLine().ToLower().Replace(" ", "");
    bool palindrome = true;
    for (int i = 0; i < text.Length / 2; i++)
    {
    if (text[i] != text[text.Length - 1 - i])
    {
    palindrome = false;
    break;
    }
    }
    if (palindrome)
    {
    Console.WriteLine("Palindrom");
    }
    else
    {
    Console.WriteLine("Kein Palindrom");
    }
    }
    }
  32. 32. Sicheres Passwort

    Lies Passwörter, eines pro Zeile, bis ein sicheres kommt: mindestens 8 Zeichen, mindestens eine Ziffer, ein Großbuchstabe und ein Kleinbuchstabe. Gib für jedes schwache die erste nicht erfüllte Regel in dieser Reihenfolge aus („Zu kurz“, „Keine Ziffer“, „Kein Großbuchstabe“, „Kein Kleinbuchstabe“), für das sichere „Passwort akzeptiert“, und hör dann auf.

    Eingabe
    katze
    katzemiau
    katzemiau7
    Katzemiau7
    Ausgabe
    Zu kurz
    Keine Ziffer
    Kein Großbuchstabe
    Passwort akzeptiert

    Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten

    Lösung
    class Program
    {
    static void Main()
    {
    while (true)
    {
    string password = Console.ReadLine();
    bool digit = false;
    bool upper = false;
    bool lower = false;
    foreach (char c in password)
    {
    if (char.IsDigit(c))
    {
    digit = true;
    }
    else if (char.IsUpper(c))
    {
    upper = true;
    }
    else if (char.IsLower(c))
    {
    lower = true;
    }
    }
    if (password.Length < 8)
    {
    Console.WriteLine("Zu kurz");
    }
    else if (!digit)
    {
    Console.WriteLine("Keine Ziffer");
    }
    else if (!upper)
    {
    Console.WriteLine("Kein Großbuchstabe");
    }
    else if (!lower)
    {
    Console.WriteLine("Kein Kleinbuchstabe");
    }
    else
    {
    Console.WriteLine("Passwort akzeptiert");
    break;
    }
    }
    }
    }
  33. 33. Array umdrehen

    In der ersten Zeile steht die Anzahl n, in den nächsten n Zeilen je eine ganze Zahl. Lies sie in ein Array und gib sie in umgekehrter Reihenfolge in einer Zeile aus, getrennt durch Leerzeichen: Durchlaufe das Array vom letzten Index bis zum Index 0.

    Eingabe
    4
    10
    -2
    7
    3
    Ausgabe
    3 7 -2 10

    Was du brauchst, steht in der Lektion: Arrays

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    int[] numbers = new int[n];
    for (int i = 0; i < n; i++)
    {
    numbers[i] = int.Parse(Console.ReadLine());
    }
    for (int i = n - 1; i >= 0; i--)
    {
    Console.Write(numbers[i]);
    if (i > 0)
    {
    Console.Write(" ");
    }
    }
    Console.WriteLine();
    }
    }
  34. 34. Elemente zählen

    Lies eine Zeile mit Wörtern, getrennt durch je ein Leerzeichen, und gib aus, wie oft jedes Wort vorkommt, in der Form „Wort: Anzahl“. Die Wörter erscheinen in der Reihenfolge, in der sie zum ersten Mal vorkamen.

    Eingabe
    Apfel Birne Apfel Pflaume Birne Apfel
    Ausgabe
    Apfel: 3
    Birne: 2
    Pflaume: 1

    Was du brauchst, steht in der Lektion: Dictionary und HashSet

    Lösung
    class Program
    {
    static void Main()
    {
    string line = Console.ReadLine();
    Dictionary<string, int> counts = new Dictionary<string, int>();
    foreach (string word in line.Split(' '))
    {
    counts[word] = counts.GetValueOrDefault(word, 0) + 1;
    }
    foreach (KeyValuePair<string, int> pair in counts)
    {
    Console.WriteLine($"{pair.Key}: {pair.Value}");
    }
    }
    }
  35. 35. Primzahlen

    Lies eine Zahl N und gib alle Primzahlen von 2 bis N in einer Zeile aus, getrennt durch Leerzeichen.

    Eingabe
    30
    Ausgabe
    2 3 5 7 11 13 17 19 23 29

    Was du brauchst, steht in der Lektion: Schleifen

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    string result = "";
    for (int i = 2; i <= n; i++)
    {
    bool prime = true;
    for (int d = 2; d * d <= i; d++)
    {
    if (i % d == 0)
    {
    prime = false;
    break;
    }
    }
    if (prime)
    {
    result += i + " ";
    }
    }
    Console.WriteLine(result.Trim());
    }
    }
  36. 36. Durchschnitt

    In einer Zeile stehen ganze Zahlen, getrennt durch Leerzeichen. Gib ihren Durchschnitt mit zwei Nachkommastellen aus.

    Eingabe
    5 8 12 6
    Ausgabe
    Durchschnitt: 7.75

    Was du brauchst, steht in der Lektion: Arrays

    Lösung
    using System.Globalization;
    class Program
    {
    static void Main()
    {
    string[] parts = Console.ReadLine().Split(' ');
    int sum = 0;
    for (int i = 0; i < parts.Length; i++)
    {
    sum += int.Parse(parts[i]);
    }
    double average = (double)sum / parts.Length;
    Console.WriteLine("Durchschnitt: " + average.ToString("F2", CultureInfo.InvariantCulture));
    }
    }
  37. 37. Nach Länge sortieren

    In einer Zeile stehen Wörter, getrennt durch Leerzeichen. Sortiere sie nach Länge vom kürzesten zum längsten (Wörter gleicher Länge behalten ihre Reihenfolge aus der Eingabe) und gib sie in einer Zeile aus.

    Eingabe
    Kirsche Feige Banane Kiwi Pflaume
    Ausgabe
    Kiwi Feige Banane Kirsche Pflaume

    Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten

    Lösung
    class Program
    {
    static void Main()
    {
    string[] words = Console.ReadLine().Split(' ');
    for (int i = 0; i < words.Length - 1; i++)
    {
    for (int j = 0; j < words.Length - 1 - i; j++)
    {
    if (words[j].Length > words[j + 1].Length)
    {
    string temp = words[j];
    words[j] = words[j + 1];
    words[j + 1] = temp;
    }
    }
    }
    Console.WriteLine(string.Join(" ", words));
    }
    }
  38. 38. Sätze zählen

    Lies eine Zeile Text und gib aus, wie viele Sätze sie hat. Ein Satz endet mit einem Punkt, einem Ausrufezeichen oder einem Fragezeichen; eine Folge solcher Zeichen (wie „...“ oder „?!“) ist ein einziges Ende.

    Eingabe
    Hallo! Wie geht es dir? Mir geht es gut... Und dir?!
    Ausgabe
    Sätze: 4

    Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten

    Lösung
    class Program
    {
    static void Main()
    {
    string text = Console.ReadLine();
    string ends = ".!?";
    int count = 0;
    for (int i = 0; i < text.Length; i++)
    {
    bool isEnd = ends.Contains(text[i]);
    bool nextIsEnd = i + 1 < text.Length && ends.Contains(text[i + 1]);
    if (isEnd && !nextIsEnd)
    {
    count++;
    }
    }
    Console.WriteLine("Sätze: " + count);
    }
    }
  39. 39. Fibonacci-Zahlen

    Die Fibonacci-Folge beginnt mit 1, 1, und jede weitere Zahl ist die Summe der beiden vorherigen. Lies N (von 1 bis 50) und gib die N-te Zahl der Folge aus.

    Eingabe
    40
    Ausgabe
    102334155

    Was du brauchst, steht in der Lektion: Schleifen

    Lösung
    class Program
    {
    static void Main()
    {
    int n = int.Parse(Console.ReadLine());
    long previous = 0;
    long current = 1;
    for (int i = 1; i < n; i++)
    {
    long next = previous + current;
    previous = current;
    current = next;
    }
    Console.WriteLine(current);
    }
    }
  40. 40. Den Median finden

    In einer Zeile stehen ganze Zahlen, getrennt durch Leerzeichen. Gib ihren Median mit einer Nachkommastelle aus: die mittlere Zahl nach dem Sortieren oder, bei einer geraden Anzahl, den Mittelwert der beiden mittleren.

    Eingabe
    12 3 7 9 1 8
    Ausgabe
    Median: 7.5

    Was du brauchst, steht in der Lektion: Listen

    Lösung
    using System.Globalization;
    class Program
    {
    static void Main()
    {
    List<int> numbers = new List<int>();
    foreach (string part in Console.ReadLine().Split(' '))
    {
    numbers.Add(int.Parse(part));
    }
    numbers.Sort();
    int n = numbers.Count;
    double median;
    if (n % 2 == 1)
    {
    median = numbers[n / 2];
    }
    else
    {
    median = (numbers[n / 2 - 1] + numbers[n / 2]) / 2.0;
    }
    Console.WriteLine("Median: " + median.ToString("F1", CultureInfo.InvariantCulture));
    }
    }
  41. 41. Zeichendiagramm

    Lies eine Zeile Text. Gib für jedes Zeichen außer dem Leerzeichen, in der Reihenfolge seines ersten Auftretens, eine Zeile „Zeichen | Sternchen“ aus, mit einem Sternchen für jedes Vorkommen im Text.

    Eingabe
    Banane Brot
    Ausgabe
    B | **
    a | **
    n | **
    e | *
    r | *
    o | *
    t | *

    Was du brauchst, steht in der Lektion: Strings: mit Text arbeiten

    Lösung
    class Program
    {
    static void Main()
    {
    string text = Console.ReadLine();
    for (int i = 0; i < text.Length; i++)
    {
    char c = text[i];
    if (c != ' ' && text.IndexOf(c) == i)
    {
    int count = 0;
    for (int j = 0; j < text.Length; j++)
    {
    if (text[j] == c)
    {
    count++;
    }
    }
    Console.WriteLine(c + " | " + new string('*', count));
    }
    }
    }
    }
  42. 42. Matrix transponieren

    In der ersten Zeile stehen die Anzahl der Zeilen R und die Anzahl der Spalten C, danach folgen R Zeilen mit je C Zahlen, getrennt durch Leerzeichen. Gib die transponierte Matrix aus: C Zeilen mit je R Zahlen, wobei die Zeilen zu Spalten werden.

    Eingabe
    2 3
    1 2 3
    4 5 6
    Ausgabe
    1 4
    2 5
    3 6

    Was du brauchst, steht in der Lektion: Zweidimensionale Arrays

    Lösung
    class Program
    {
    static void Main()
    {
    string[] size = Console.ReadLine().Split(' ');
    int rows = int.Parse(size[0]);
    int cols = int.Parse(size[1]);
    int[,] matrix = new int[rows, cols];
    for (int r = 0; r < rows; r++)
    {
    string[] parts = Console.ReadLine().Split(' ');
    for (int c = 0; c < cols; c++)
    {
    matrix[r, c] = int.Parse(parts[c]);
    }
    }
    for (int c = 0; c < cols; c++)
    {
    string line = "";
    for (int r = 0; r < rows; r++)
    {
    line += matrix[r, c] + " ";
    }
    Console.WriteLine(line.Trim());
    }
    }
    }
  43. 43. Wege im Labyrinth

    In der ersten Zeile stehen R und C, danach folgen R Zeilen mit je C Zeichen: „.“ ist eine freie Zelle, „#“ eine Wand. Du gehst nur nach rechts oder nach unten und trittst nie auf eine Wand. Gib die Anzahl aller Wege von der oberen linken zur unteren rechten Ecke aus.

    Eingabe
    4 5
    .....
    .#.#.
    ...#.
    #....
    Ausgabe
    Wege: 4

    Was du brauchst, steht in der Lektion: Rekursion

    Lösung
    class Program
    {
    static int CountPaths(string[] maze, int r, int c)
    {
    if (r >= maze.Length || c >= maze[0].Length || maze[r][c] == '#')
    {
    return 0;
    }
    if (r == maze.Length - 1 && c == maze[0].Length - 1)
    {
    return 1;
    }
    return CountPaths(maze, r + 1, c) + CountPaths(maze, r, c + 1);
    }
    static void Main()
    {
    string[] size = Console.ReadLine().Split(' ');
    int rows = int.Parse(size[0]);
    string[] maze = new string[rows];
    for (int r = 0; r < rows; r++)
    {
    maze[r] = Console.ReadLine();
    }
    Console.WriteLine("Wege: " + CountPaths(maze, 0, 0));
    }
    }
  44. 44. Notenstatistik

    In einer Zeile stehen Noten von 2 bis 6 (6 ist die beste), getrennt durch Leerzeichen. Gib aus, wie viele davon Ausgezeichnet, Sehr gut, Gut, Ausreichend und Ungenügend sind, jede Kategorie in einer eigenen Zeile.

    Eingabe
    6 4 5 6 3 5 2 6 5 4
    Ausgabe
    Ausgezeichnet (6): 3
    Sehr gut (5): 3
    Gut (4): 2
    Ausreichend (3): 1
    Ungenügend (2): 1

    Was du brauchst, steht in der Lektion: Arrays

    Lösung
    class Program
    {
    static void Main()
    {
    string[] names = { "", "", "Ungenügend", "Ausreichend", "Gut", "Sehr gut", "Ausgezeichnet" };
    int[] counts = new int[7];
    string[] parts = Console.ReadLine().Split(' ');
    for (int i = 0; i < parts.Length; i++)
    {
    counts[int.Parse(parts[i])]++;
    }
    for (int grade = 6; grade >= 2; grade--)
    {
    Console.WriteLine(names[grade] + " (" + grade + "): " + counts[grade]);
    }
    }
    }
  45. 45. Römische Zahlen

    Lies eine ganze Zahl von 1 bis 3999 und gib sie in römischen Zahlen aus (I, V, X, L, C, D, M, wobei 4 IV ist, 9 IX, 40 XL und so weiter).

    Eingabe
    1994
    Ausgabe
    MCMXCIV

    Was du brauchst, steht in der Lektion: Arrays

    Lösung
    class Program
    {
    static void Main()
    {
    int number = int.Parse(Console.ReadLine());
    int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
    string[] symbols = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
    string roman = "";
    for (int i = 0; i < values.Length; i++)
    {
    while (number >= values[i])
    {
    roman += symbols[i];
    number -= values[i];
    }
    }
    Console.WriteLine(roman);
    }
    }
  46. 46. Münzwurf-Simulation

    Lies einen Startwert (Seed) x (von 1 bis 2147483646) und eine Anzahl Würfe N, jeweils in einer eigenen Zeile. Setze bei jedem Wurf x = x * 16807 % 2147483647; ein gerades x ist Kopf (K), ein ungerades Zahl (Z). Gib die Würfe in einer Zeile aus, danach, wie oft Kopf und wie oft Zahl gefallen ist.

    Eingabe
    42
    10
    Ausgabe
    KZZZKZZKKZ
    Kopf: 4
    Zahl: 6

    Was du brauchst, steht in der Lektion: Schleifen

    Lösung
    class Program
    {
    static void Main()
    {
    long x = long.Parse(Console.ReadLine());
    int n = int.Parse(Console.ReadLine());
    string tosses = "";
    int heads = 0;
    for (int i = 0; i < n; i++)
    {
    x = x * 16807 % 2147483647;
    if (x % 2 == 0)
    {
    tosses += "K";
    heads++;
    }
    else
    {
    tosses += "Z";
    }
    }
    Console.WriteLine(tosses);
    Console.WriteLine("Kopf: " + heads);
    Console.WriteLine("Zahl: " + (n - heads));
    }
    }
  47. 47. Symmetrisches Array

    In einer Zeile stehen ganze Zahlen, getrennt durch Leerzeichen. Prüfe, ob das Array symmetrisch ist, sich also von links nach rechts und von rechts nach links gleich liest.

    Eingabe
    1 2 3 2 1
    Ausgabe
    Symmetrisch

    Was du brauchst, steht in der Lektion: Arrays

    Lösung
    class Program
    {
    static void Main()
    {
    string[] parts = Console.ReadLine().Split(' ');
    int[] numbers = new int[parts.Length];
    for (int i = 0; i < parts.Length; i++)
    {
    numbers[i] = int.Parse(parts[i]);
    }
    bool symmetric = true;
    for (int i = 0; i < numbers.Length / 2; i++)
    {
    if (numbers[i] != numbers[numbers.Length - 1 - i])
    {
    symmetric = false;
    break;
    }
    }
    Console.WriteLine(symmetric ? "Symmetrisch" : "Nicht symmetrisch");
    }
    }
  48. 48. Balancierte Klammern

    Lies eine Zeile Text und prüfe, ob die Klammern (), [] und {} darin balanciert sind: Jede öffnende Klammer hat ihre schließende derselben Art, und die Paare überkreuzen sich nicht. Andere Zeichen zählen nicht.

    Eingabe
    (a + [b) * c]
    Ausgabe
    Nicht balanciert

    Was du brauchst, steht in der Lektion: Stack, Queue und verkettete Liste

    Lösung
    class Program
    {
    static void Main()
    {
    string text = Console.ReadLine();
    string opening = "([{";
    string closing = ")]}";
    Stack<char> stack = new Stack<char>();
    bool balanced = true;
    foreach (char c in text)
    {
    if (opening.Contains(c))
    {
    stack.Push(c);
    }
    else if (closing.Contains(c))
    {
    if (stack.Count == 0 || opening.IndexOf(stack.Pop()) != closing.IndexOf(c))
    {
    balanced = false;
    break;
    }
    }
    }
    if (balanced && stack.Count == 0)
    {
    Console.WriteLine("Balanciert");
    }
    else
    {
    Console.WriteLine("Nicht balanciert");
    }
    }
    }
  49. 49. Folge gleicher Elemente

    In einer Zeile stehen ganze Zahlen, getrennt durch Leerzeichen. Finde die längste Folge gleicher benachbarter Zahlen und gib sie in einer Zeile aus; gibt es mehrere gleich lange, gib die erste aus.

    Eingabe
    2 1 1 3 3 3 2 2 2 5
    Ausgabe
    3 3 3

    Was du brauchst, steht in der Lektion: Arrays

    Lösung
    class Program
    {
    static void Main()
    {
    string[] parts = Console.ReadLine().Split(' ');
    int[] numbers = new int[parts.Length];
    for (int i = 0; i < parts.Length; i++)
    {
    numbers[i] = int.Parse(parts[i]);
    }
    int bestValue = numbers[0];
    int bestLength = 1;
    int length = 1;
    for (int i = 1; i < numbers.Length; i++)
    {
    if (numbers[i] == numbers[i - 1])
    {
    length++;
    }
    else
    {
    length = 1;
    }
    if (length > bestLength)
    {
    bestLength = length;
    bestValue = numbers[i];
    }
    }
    string result = "";
    for (int i = 0; i < bestLength; i++)
    {
    result += bestValue + " ";
    }
    Console.WriteLine(result.Trim());
    }
    }
  50. 50. Kürzester Weg in einer Matrix

    In der ersten Zeile stehen R und C, danach folgen R Zeilen mit je C Zeichen: „.“ ist eine freie Zelle, „#“ eine Wand, „S“ der Start und „E“ das Ziel. Du darfst nach oben, unten, links und rechts gehen. Gib die kleinste Anzahl Schritte von S nach E aus oder „Kein Weg“, wenn E nicht erreichbar ist.

    Eingabe
    5 6
    S.#...
    .##.#.
    ...#..
    #.#..#
    ...E.#
    Ausgabe
    7

    Was du brauchst, steht in der Lektion: Stack, Queue und verkettete Liste

    Lösung
    class Program
    {
    static void Main()
    {
    string[] size = Console.ReadLine().Split(' ');
    int rows = int.Parse(size[0]);
    int cols = int.Parse(size[1]);
    string[] grid = new string[rows];
    for (int r = 0; r < rows; r++)
    {
    grid[r] = Console.ReadLine();
    }
    int[,] dist = new int[rows, cols];
    Queue<int[]> queue = new Queue<int[]>();
    for (int r = 0; r < rows; r++)
    {
    for (int c = 0; c < cols; c++)
    {
    dist[r, c] = -1;
    if (grid[r][c] == 'S')
    {
    dist[r, c] = 0;
    queue.Enqueue(new int[] { r, c });
    }
    }
    }
    int[] dr = { -1, 1, 0, 0 };
    int[] dc = { 0, 0, -1, 1 };
    string answer = "Kein Weg";
    while (queue.Count > 0)
    {
    int[] cell = queue.Dequeue();
    int r = cell[0];
    int c = cell[1];
    if (grid[r][c] == 'E')
    {
    answer = dist[r, c].ToString();
    break;
    }
    for (int d = 0; d < 4; d++)
    {
    int nr = r + dr[d];
    int nc = c + dc[d];
    if (nr >= 0 && nr < rows && nc >= 0 && nc < cols && grid[nr][nc] != '#' && dist[nr, nc] == -1)
    {
    dist[nr, nc] = dist[r, c] + 1;
    queue.Enqueue(new int[] { nr, nc });
    }
    }
    }
    Console.WriteLine(answer);
    }
    }

Sprachgrundlagen

Methoden

Klassen und Objekte

Vererbung und Polymorphie

Fehler und Exceptions

Collections

  • Listen: Ein Bücherregal · Ein Ereignisprotokoll · Ein Notizbuch · Kopfrechnen
  • Stack, Queue und verkettete Liste: Ein Spielzeugzug · Eine Buslinie · Ein Börsenticker · Ausgeglichene Klammern · Deine eigene verkettete Liste
  • Dictionary und HashSet: Eine Benutzertabelle · Worthäufigkeit · Dokumente nach Stichwort · Ein Kontaktnetz
  • Hashcodes und Hashfunktionen: Ein Hashcode für eine Person · Der Roboter im Lager · Ein Hash einer Datei
  • Klassen in Klassen: Warenkorb · Monitor für einen Webserver · Hausverwaltung · Rangliste

Modernes C#

  • Lambdas und Delegates: Sortieren nach mehreren Feldern · Bestellungen filtern · Rabatte nacheinander
  • LINQ: Verkäufe nach Kategorie · Die Top 3 der Produkte · Die Durchschnittsnote · Die Wörter in einem Text
  • record, switch und Muster: Formen · Lieferpreis · Ein Punkt als Schlüssel
  • Entwurfsmuster: Rabatte als Strategien · „Benachrichtige mich, wenn es wieder da ist“ · Eine Fabrik für Benachrichtigungen · Ein altes Thermometer

Programme in der echten Welt

  • Tests mit xUnit: Der Rabattrechner · Das Konto · Der Fehler im Notendurchschnitt
  • Threads: Parallele Summe · Herunterladen mit einem Pool · Ein Zähler ohne Verluste
  • Netzwerkprogrammierung: Echo-Server · Ein Server mit Befehlen · Ein Chat für zwei
  • Datenbanken: Katalog · Suche nach einem Teil des Namens · Eine Überweisung, die mittendrin fehlschlägt
  • Reflection und Attribute: Alle Eigenschaften · Mini-JSON · Dein eigener Test-Runner

Web und Desktop

Wir bauen ein Spiel

Die Chroniken von Arkanum

Epic Cosmos: das Imperium

Projekt

Erstellt von Ivo Gergov im Rahmen der Kampagne von Evo Tech für zugängliche Programmierausbildung ·