DCV 2023 09/Uebungen Weihnachtsferien: Unterschied zwischen den Versionen
Sandro (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Sandro (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| (5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 3: | Zeile 3: | ||
{{TOC limit|4}} | {{TOC limit|4}} | ||
'''Start der Selbstkontrolle''' | |||
== Schleifen == | == Schleifen == | ||
| Zeile 13: | Zeile 13: | ||
{{BSL|10 9 8 7 6 5 4 3 2 1 0}} | {{BSL|10 9 8 7 6 5 4 3 2 1 0}} | ||
==== Aufgabe 2) ==== | ==== Aufgabe 2) ==== | ||
| Zeile 18: | Zeile 19: | ||
'''Ausgabe''' | '''Ausgabe''' | ||
{{BML|code= | {{BML|code= | ||
-30 | -30 | ||
| Zeile 27: | Zeile 29: | ||
30 | 30 | ||
}} | }} | ||
==== Aufgabe 3) ==== | ==== Aufgabe 3) ==== | ||
| Zeile 50: | Zeile 53: | ||
10 | 10 | ||
}} | }} | ||
== Methoden == | == Methoden == | ||
'''Diese 4 Aufgaben helfen dir später bei der Lösung von TicTacToe und 4 Gewinnt!!!''' | |||
==== Aufgabe 1) ==== | ==== Aufgabe 1) ==== | ||
Erstelle eine '''Methode''' welche einen {{JSL|string}} und einen {{JSL|int}} Parameter erhält. Der angegebene {{JSL|string}} soll so oft wie beim {{JSL|int}} angegeben, in einer Zeile wiederholt ausgegeben und mit einem '''Whitespace''' getrennt werden. | Erstelle eine '''Methode''' welche einen {{JSL|string}} und einen {{JSL|int}} Parameter erhält. Der angegebene {{JSL|string}} soll so oft wie beim {{JSL|int}} angegeben, in einer Zeile wiederholt ausgegeben und mit einem '''Whitespace''' getrennt werden. | ||
| Zeile 64: | Zeile 71: | ||
{{JSL|PrintLineStipple(symbol, amount);}} | {{JSL|PrintLineStipple(symbol, amount);}} | ||
'''Ausgabe''' | '''Ausgabe''' | ||
{{BSL|X X X X X X X X X X}} | {{BSL|X X X X X X X X X X}} | ||
==== Aufgabe 2) ==== | ==== Aufgabe 2) ==== | ||
| Zeile 80: | Zeile 87: | ||
{{JSL|PrintRowStipple(symbol, amount);}} | {{JSL|PrintRowStipple(symbol, amount);}} | ||
'''Ausgabe''' | '''Ausgabe''' | ||
| Zeile 90: | Zeile 96: | ||
X}} | X}} | ||
==== Aufgabe 3) ==== | ==== Aufgabe 3) ==== | ||
| Zeile 101: | Zeile 108: | ||
{{JSL|PrintStippleL(symbol, amount);}} | {{JSL|PrintStippleL(symbol, amount);}} | ||
'''Ausgabe''' | '''Ausgabe''' | ||
| Zeile 112: | Zeile 118: | ||
X}} | X}} | ||
==== Aufgabe 4) ==== | |||
Erstelle eine Methode welche eine Diagonale von variabler Größe und mit angegebene Zeichen ausgibt, weiters soll der Parameter '''backslash''' angegeben werden können. Wenn '''backslash''' wahr ist, soll die Diagonale von rechts Unten nach Links Oben gehen, ansonsten umgekehrt. | |||
'''Aufruf:''' | |||
{{JSL|PrintSlash("x", 3, true);}} | |||
'''Ausgabe:''' | |||
{{BML|code= | |||
x | |||
x | |||
x | |||
}} | |||
'''Aufruf:''' | |||
{{JSL|PrintSlash("y", 3, false);}} | |||
'''Ausgabe:''' | |||
| |||
{{Code|lang='bash'|code= | |||
{{NoLine}} | |||
y | |||
y | |||
y | |||
}} | |||
== Input == | == Input == | ||
==== Aufgabe 1) ==== | ==== Aufgabe 1) ==== | ||
Lies einen {{JSL|string}} vom Benutzer ein und einen {{JSL|int}}. Die Zahl besagt wie oft der {{JSL|string}} ausgegeben werden soll. Wird ein leerer {{JSL|string}} oder ein ungültiger {{JSL|int}} eingegeben, so soll die Eingabe erneut erfolgen. | Lies einen {{JSL|string}} vom Benutzer ein und einen {{JSL|int}}. Die Zahl besagt wie oft der {{JSL|string}} ausgegeben werden soll. Wird ein leerer {{JSL|string}} oder ein ungültiger {{JSL|int}} eingegeben, so soll die Eingabe erneut erfolgen. | ||
| Zeile 121: | Zeile 157: | ||
'''Eingabe''' | '''Eingabe''' | ||
{{BML|code= | {{BML|code= | ||
Bitte geben Sie einen Text ein: | Bitte geben Sie einen Text ein: | ||
| Zeile 129: | Zeile 166: | ||
'''Ausgabe''' | '''Ausgabe''' | ||
{{BML|code= | {{BML|code= | ||
Heute wird ein guter Tag | Heute wird ein guter Tag | ||
| Zeile 134: | Zeile 172: | ||
Heute wird ein guter Tag | Heute wird ein guter Tag | ||
}} | }} | ||
== Arrays == | == Arrays == | ||
Array für Aufgabe 1 und 2. | '''Array für Aufgabe 1 und 2.''' | ||
{{JML|code= | {{JML|code= | ||
| Zeile 203: | Zeile 242: | ||
Erstelle eine Neue, oder erweitere deine Methode! Diese soll nun zusätzlich zum {{JSL|int[]}} Parameter einen weiteren {{JSL|bool}} als Parameter erhalten. Dieser {{JSL|bool}} entscheidet, ob das {{JSL|int[]}} '''aufsteigend''', oder '''absteigend''' sortiert wird. | Erstelle eine Neue, oder erweitere deine Methode! Diese soll nun zusätzlich zum {{JSL|int[]}} Parameter einen weiteren {{JSL|bool}} als Parameter erhalten. Dieser {{JSL|bool}} entscheidet, ob das {{JSL|int[]}} '''aufsteigend''', oder '''absteigend''' sortiert wird. | ||
== 2D Arrays == | |||
=== Aufgabe1) === | |||
Erstelle ein {{JSL|int[][] array}} und befülle dieses mit aufsteigenden Zahlen. | |||
Verwende dazu verschiedene Methoden. | |||
*CreateArray | |||
*FillArray | |||
*PrintArray | |||
'''Ausgabe''' | |||
{{BML|code= | |||
0 1 2 3 4 5 6 7 8 9 | |||
10 11 12 13 14 15 16 17 18 19 | |||
20 21 22 23 24 25 26 27 28 29 | |||
30 31 32 33 34 35 36 37 38 39 | |||
40 41 42 43 44 45 46 47 48 49 | |||
50 51 52 53 54 55 56 57 58 59 | |||
60 61 62 63 64 65 66 67 68 69 | |||
70 71 72 73 74 75 76 77 78 79 | |||
80 81 82 83 84 85 86 87 88 89 | |||
90 91 92 93 94 95 96 97 98 99 | |||
}} | |||
== String manipulation == | == String manipulation == | ||
| Zeile 218: | Zeile 284: | ||
{{BSL|HeYYe deY ab.a0.a0aa YYYd eYY YeYY YYYeY TXY. ZYXY YYXY eY YYYXY YYe eYYeY TeYY, deY aa LeYYe YXYYeYXeY, XXeY dXY YYY dYXY eYXY!}} | {{BSL|HeYYe deY ab.a0.a0aa YYYd eYY YeYY YYYeY TXY. ZYXY YYXY eY YYYXY YYe eYYeY TeYY, deY aa LeYYe YXYYeYXeY, XXeY dXY YYY dYXY eYXY!}} | ||
==== Aufgabe 2) ==== | ==== Aufgabe 2) ==== | ||
| Zeile 225: | Zeile 292: | ||
# Zwei Zahlen | # Zwei Zahlen | ||
# Ein oder mehr Großbuchstaben | # Ein oder mehr Großbuchstaben | ||
'''Aufruf'''{{Space10}}{{JSL|Console.WriteLine(Regex.IsMatch("abc100A", regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | '''Aufruf'''{{Space10}}{{JSL|Console.WriteLine(Regex.IsMatch("abc100A", regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | ||
| Zeile 236: | Zeile 302: | ||
'''Aufruf'''{{Space10}}{{JSL|Console.WriteLine(Regex.IsMatch("test1ABCDE", regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | '''Aufruf'''{{Space10}}{{JSL|Console.WriteLine(Regex.IsMatch("test1ABCDE", regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | ||
== Kalender == | == Kalender == | ||
==== Aufgabe 1) ==== | ==== Aufgabe 1) ==== | ||
Gib mit Hilfe der {{JSL|Calendar}} Api den Wochentag des aktuellen Tages inklusive Datum aus. | Gib mit Hilfe der {{JSL|Calendar}} Api den Wochentag des aktuellen Tages inklusive Datum aus. | ||
| Zeile 245: | Zeile 311: | ||
{{BSL|DI 19.10.2021}} | {{BSL|DI 19.10.2021}} | ||
'''Ende der Selbstkontrolle''' | |||
| Zeile 263: | Zeile 335: | ||
*Spieler Farbe | *Spieler Farbe | ||
*Restart (wenn das Spiel zu ende ist) | *Restart (wenn das Spiel zu ende ist) | ||
=== Aufgabe1: GameOfLife === | === Aufgabe1: GameOfLife === | ||
[[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Aufgabe:_Conways_Game_of_life|Conways Game of life]] | [[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Aufgabe:_Conways_Game_of_life|Conways Game of life]] | ||
=== Aufgabe2: TicTacToe === | === Aufgabe2: TicTacToe === | ||
[[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Aufgabe:_TicTacToe|TicTacToe]] | [[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Aufgabe:_TicTacToe|TicTacToe]] | ||
=== Aufgabe3: 4 in a Row=== | === Aufgabe3: 4 in a Row=== | ||
[[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Bonusaufgabe:_4_in_Rows|4 in a Row]] | [[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Bonusaufgabe:_4_in_Rows|4 in a Row]] | ||
== Zusätzliche Bonus Aufgaben == | == Zusätzliche Bonus Aufgaben == | ||
| Zeile 303: | Zeile 380: | ||
'''Tip:''' [https://de.wikipedia.org/wiki/Fibonacci-Folge Fibonacci] | '''Tip:''' [https://de.wikipedia.org/wiki/Fibonacci-Folge Fibonacci] | ||
=== Aufgabe: Blackjack === | === Aufgabe: Blackjack === | ||
Aktuelle Version vom 27. Oktober 2023, 10:44 Uhr
Wir wünschen euch viel Spaß mit dieser Freizeitbeschäftigung. Genießt die freie Zeit und nützt diese auch zum programmieren üben!
Start der Selbstkontrolle
Schleifen
Aufgabe 1)
Zähle in einer for-Schleife rückwärts von 10 bis inklusive 0 und gib jede Zahl aus.
Ausgabe
10 9 8 7 6 5 4 3 2 1 0
Aufgabe 2)
Zähle in einer for-Schleife von -30 bis inklusive 30 und gib jede Zahl aus die ohne Rest durch 3 teilbar ist.
Ausgabe
-30
-27
-24
...
24
27
30
Aufgabe 3)
Zähle mit Hilfe einer while-Schleife und einer separaten Zählvariable von 0 bis inklusive 10 und gib die Zahlen aus. Wenn die Zahl größer als 5 ist mach 2 Zeilenumbrüche.
Ausgabe
0
1
2
3
4
5
6
7
8
9
10
Methoden
Diese 4 Aufgaben helfen dir später bei der Lösung von TicTacToe und 4 Gewinnt!!!
Aufgabe 1)
Erstelle eine Methode welche einen string und einen int Parameter erhält. Der angegebene string soll so oft wie beim int angegeben, in einer Zeile wiederholt ausgegeben und mit einem Whitespace getrennt werden.
Initialisiere Variablen für deine Parameter und gib diese dann der Methode weiter, damit du deine Methoden wieder verwenden kannst.
Aufruf
string symbol = "X";
int amount = 10;
PrintLineStipple(symbol, amount);
Ausgabe
X X X X X X X X X X
Aufgabe 2)
Erstelle eine Methode welche einen string und einen int Parmeter erhält. Der angegebene string soll so oft wie beim int angegeben in einer eigenen Zeile wiederholt werden. Trenne die Zeilen zusätzlich durch ein Linebreak.
Aufruf
string symbol = "X";
int amount = 3;
PrintRowStipple(symbol, amount);
Ausgabe
X
X
X
Aufgabe 3)
Erstelle eine Methode welche einen string und einen int Parameter erhält. Nun sollen mit diesen beiden Parametern die beiden Methoden aus den vorhergehenden Aufgaben aufgerufen werden. Die Methoden aus den vorhergehenden Aufgaben sollen nicht neu geschrieben werden.
Aufruf
string symbol = "X";
int amount = 3;
PrintStippleL(symbol, amount);
Ausgabe
X X X
X
X
X
Aufgabe 4)
Erstelle eine Methode welche eine Diagonale von variabler Größe und mit angegebene Zeichen ausgibt, weiters soll der Parameter backslash angegeben werden können. Wenn backslash wahr ist, soll die Diagonale von rechts Unten nach Links Oben gehen, ansonsten umgekehrt.
Aufruf:
PrintSlash("x", 3, true);
Ausgabe:
x
x
x
Aufruf:
PrintSlash("y", 3, false);
Ausgabe:
#Diese Zeile gehört nicht zur Ausgabe! Leider verhaut es mir die Formatierung wenn die erste Zeile mit einem Leerzeichen beginnt :-|
y
y
y
Input
Aufgabe 1)
Lies einen string vom Benutzer ein und einen int. Die Zahl besagt wie oft der string ausgegeben werden soll. Wird ein leerer string oder ein ungültiger int eingegeben, so soll die Eingabe erneut erfolgen.
Erstelle eine Methode ReadString() und ReadNumber().
Eingabe
Bitte geben Sie einen Text ein:
>> Heute wird ein guter Tag
Wie oft soll der Text ausgegeben werden:
>> 3
Ausgabe
Heute wird ein guter Tag
Heute wird ein guter Tag
Heute wird ein guter Tag
Arrays
Array für Aufgabe 1 und 2.
int[] arr = new int[]{0, 1, 23, 5, 12, 4, 4, 2, 5, 2, 10};
int[] arr2 = new int[]{123, 19471, 1, 4, 15715, 15, 1, 5, 15, 1, -10, -100};
int[] arr3 = new int[]{478199, 7812973, 12387123, 12, 3, 123, 12, 3, 1, 3, 1, 3, 1, 8, 9, 15, 1, 5, 1, 5, 1, 5, 15, 1, 5, 0};
Aufgabe 1)
Erstelle eine Methode die ein int[] als Parameter erhält und das erste und letzte Element zu einem string zusammenfügt und zurückgibt. Verwende dazu die Beispielarrays in der Klasse und gib das Ergebnis für alle 3 Arrays aus.
Aufruf
PrintFirstAndLast(arr);
Ausgabe
First: 0, Last: 10
Aufgabe 2)
Ertelle jeweils eine Methode für Minimum (min), Maximum (max), und Durchschnitt (avg), welche den jeweiligen Wert für ein int[] berechnet und zurückgeben kann. Teste alle Methoden in der Start Methode mit allen gegebenen int[] der Klasse.
Erstelle eine Print Methode die einen string und einen int bekommt.
Beispiel Aufruf
PrintMyResult("Minimum",GetMin(arr));
Beispiel Ausgabe
Minimum: 0
Beispiel Aufruf
PrintMyResult("Maximum",GetMax(arr));
Beispiel Ausgabe
Maximum: 23
Aufgabe 3)
Erstelle eine Methode welche einen int als Parameter nimmt. Diese Methode soll ein int[] erstellen und das int[] mit den Zahlen von 0 bis inklusive der angegebenen Zahl befüllen und dann zurückgeben. Teste diese Methode in der Start Methode und gib das Array auf verschiede Arten aus (for-Schleife, foreach-Schleife und Console.WriteLine("[{0}]", string.Join(", ", arr)))
Aufruf
int[] arr = fillArr(10);
//Ausgabe arr
Ausgabe
0 1 2 3 4 5 6 7 8 9 10
Aufgabe 4)
Erstelle ein int[] und befülle es mit Zufallszahlen von 0 bis 100.
Sortiere das gegebene int[] mit Hilfe von Bubblesort und gib das Array aus.
- Sortiere der Größe nach aufsteigend (Ascending)
- Sortiere der Größe nach absteigend (Descending)
Erstelle eine Neue, oder erweitere deine Methode! Diese soll nun zusätzlich zum int[] Parameter einen weiteren bool als Parameter erhalten. Dieser bool entscheidet, ob das int[] aufsteigend, oder absteigend sortiert wird.
2D Arrays
Aufgabe1)
Erstelle ein int[][] array und befülle dieses mit aufsteigenden Zahlen.
Verwende dazu verschiedene Methoden.
- CreateArray
- FillArray
- PrintArray
Ausgabe
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
String manipulation
Heute der 19.10.2021 wird ein sehr guter Tag. Zwar gibt es sowas wie einen Test, den 14 Leute schreiben, aber das ist doch egal!
Aufgabe 1)
Ersetze mit Hilfe von regulären Ausdrücken folgendes aus dem in der Klasse gegebenen string. Folgende Aufzählung ist als Ganzes zu betrachten.
- a bis c durch X
- f bis z durch Y
- 1 bis 5 durch a
- 4 bis 9 durch b
und gib den string, bei dem alles ersetzt wurde, aus.
Ausgabe
HeYYe deY ab.a0.a0aa YYYd eYY YeYY YYYeY TXY. ZYXY YYXY eY YYYXY YYe eYYeY TeYY, deY aa LeYYe YXYYeYXeY, XXeY dXY YYY dYXY eYXY!
Aufgabe 2)
Erstelle einen regulären Ausdruck der folgendem Sachverhalt entspricht und prüfe diesen in der Start Methode. Die Punkte gehören alle zum gleichen regulären Ausdruck und sollen nacheinander zutreffen:
- Drei oder mehr Kleinbuchstaben
- Eine Zahl größer als 0
- Zwei Zahlen
- Ein oder mehr Großbuchstaben
Aufruf Console.WriteLine(Regex.IsMatch("abc100A", regex)); Ausgabe true
Aufruf Console.WriteLine(Regex.IsMatch("Abc100A", regex)); Ausgabe true
Aufruf Console.WriteLine(Regex.IsMatch("luke010A", regex)); Ausgabe true
Aufruf Console.WriteLine(Regex.IsMatch("test101ABCDE", regex)); Ausgabe true
Aufruf Console.WriteLine(Regex.IsMatch("test1ABCDE", regex)); Ausgabe true
Kalender
Aufgabe 1)
Gib mit Hilfe der Calendar Api den Wochentag des aktuellen Tages inklusive Datum aus.
Ausgabe
DI 19.10.2021
Ende der Selbstkontrolle
Bonus Aufgaben
Wähle eine Bonus Aufgaben aus wenn du diese noch nicht erledigt hast.
Du kannst natürlich auch alle machen.
Achte beim Lösen der Aufgaben darauf, ...
- sinvolle
Methodenzu erstellen und gestalte deinen Code übersichtlich. - deine
PrintMethodeschön zu formatieren. (Spielfeld zeichnen, Farben implementieren)
Erweitere deine Spiellogik für TicTacToe und 4 Gewinnt
Auswahlmöglichkeiten:
- Spieler Name
- Spieler Farbe
- Restart (wenn das Spiel zu ende ist)
Aufgabe1: GameOfLife
Aufgabe2: TicTacToe
Aufgabe3: 4 in a Row
Zusätzliche Bonus Aufgaben
Aufgabe: Türme von Hanoi
Finde eine programmatische Lösung für die Türme von Hanoi.
Als Datenstruktur wird ein 2-Dimensionales Array benötigt:
Die Größe des ersten Array ist 3 (entsprechend der Stäbe), befülle dieses mit der Anzahl der Scheiben.
Anzahl der Scheiben kann variieren. Starte mit 3 Scheiben und teste dann, ob dein Code auch funktioniert wenn du die Anzahl erhöhst.
int disks = 3;
int[][] hanoi = new int[3][]
Jede Scheibe wird durch eine Zahl reprästentiert, die dessen Größe beschreibt.
Folgende Methoden werden benötigt:
- Spielfeld ausgeben
- Spielfeld initialisieren
- hanoiMove(int from, int to, int using, int count)
* count == 1 // direct move
* ansonstens 3 Schritte
* hanoiMove(from, using, to, count - 1)
* hanoiMove(from, to, using, 1) // Wirkliche Bewegung
* hanoiMove(using, to, from, count - 1)
Tip: Fibonacci
Aufgabe: Blackjack
Regeln: http://www.hitorstand.net/strategy.php (Wir machen ohne Split)
int[] deck = new int[52]; (initialisiert von 0, 1, 2 bis 51.)
Methoden:
- Mischen mit swap
- getColor() auf Basis value / 13
- getFigure() auf Basis value % 13
- getValue()
- getValueHand() // zB: Summe von 3 Karten
Strategie für die Bank: Zieht bis < 17
Achte auf eine schöne Ausgabe!