DCV 2024 09/Selbsttest: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Sandro (Diskussion | Beiträge)
Die Seite wurde neu angelegt: „ '''Wir wünschen euch viel Spaß mit dieser Freizeitbeschäftigung. Genießt die freie Zeit und nützt diese auch zum programmieren üben!''' {{TOC limit|4}} '''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''' {{BSL|10 9 8 7 6 5 4 3 2 1 0}} ==== Aufgabe 2) ==== Zähle in einer '''for-Schleife''' von '''-30'…“
 
Sandro (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
  '''Wir wünschen euch viel Spaß mit dieser Freizeitbeschäftigung. Genießt die freie Zeit und nützt diese auch zum programmieren üben!'''
  '''Wir wünschen euch schöne Ferien. Genießt die freie Zeit und nützt diese auch zum programmieren üben!'''


{{TOC limit|4}}
{{TOC limit|4}}


=== Aufgabe: Selbstkontrolle ===
'''Die Selbstkontrolle, diese solltet ihr bearbeiten und ist eine gute Wiederholung'''


'''Start der Selbstkontrolle'''
[[DCV_2024_09/Selbstkontrolle_Strukturierte_Programmierung|Selbstkontrolle]]


== Schleifen ==
=== Aufgabe: Wiederholung Objektorientierte Programmierung ===
==== Aufgabe 1) ====
'''Wiederholung der Klassen Objekte'''
Zähle in einer '''for-Schleife''' '''rückwärts''' von '''10''' bis '''inklusive 0''' und gib jede Zahl aus.


'''Ausgabe'''
[[DCV_2024_09/Selbstkontrolle_Objektorientierte_Programmierung|Wiederholung]]


{{BSL|10 9 8 7 6 5 4 3 2 1 0}}


=== Tipp des Tages: Hackerrank ===
Probiert es doch mal aus, macht spaß: https://hackerrank.com


==== Aufgabe 2) ====
=== BonusAufgabe: GameOfLife ===
Zähle in einer '''for-Schleife''' von '''-30''' bis '''inklusive 30''' und gib jede Zahl aus die '''ohne Rest''' durch '''3''' teilbar ist.
 
'''Ausgabe'''
 
{{BML|code=
-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'''
 
{{BML|code=
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 {{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.
 
Initialisiere Variablen für deine Parameter und gib diese dann der Methode weiter, damit du deine Methoden wieder verwenden kannst.
 
'''Aufruf'''
 
{{JSL| string symbol }} = "X";
 
{{JSL| int amount}} = 10;
 
{{JSL|PrintLineStipple(symbol, amount);}}
 
'''Ausgabe'''
 
{{BSL|X X X X X X X X X X}}
 
 
==== Aufgabe 2) ====
Erstelle eine '''Methode''' welche einen {{JSL|string}} und einen {{JSL|int}} Parmeter erhält. Der angegebene {{JSL|string}} soll so oft wie beim {{JSL|int}} angegeben in einer '''eigenen''' Zeile wiederholt werden. Trenne die Zeilen zusätzlich durch ein '''Linebreak'''.
 
'''Aufruf'''
 
{{JSL| string symbol }} = "X";
 
{{JSL| int amount}} = 3;
 
{{JSL|PrintRowStipple(symbol, amount);}}
 
'''Ausgabe'''
 
{{BML|code=
X
 
X
 
X}}
 
 
==== Aufgabe 3) ====
Erstelle eine '''Methode''' welche einen {{JSL|string}} und einen {{JSL|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'''
 
{{JSL| string symbol }} = "X";
 
{{JSL| int amount}} = 3;
 
{{JSL|PrintStipple(symbol, amount);}}
 
'''Ausgabe'''
 
{{BML|code=
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:'''
 
{{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 ==
==== 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.
 
Erstelle eine Methode {{JSL|ReadString()}} und {{JSL|ReadNumber()}}.
 
'''Eingabe'''
 
{{BML|code=
Bitte geben Sie einen Text ein:
>> Heute wird ein guter Tag
Wie oft soll der Text ausgegeben werden:
>> 3
}}
 
'''Ausgabe'''
 
{{BML|code=
Heute wird ein guter Tag
Heute wird ein guter Tag
Heute wird ein guter Tag
}}
 
 
== Arrays ==
'''Array für Aufgabe 1 und 2.'''
 
{{JML|code=
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 {{JSL|int[]}} als Parameter erhält und das '''erste''' und '''letzte''' Element zu einem {{JSL|string}} zusammenfügt und zurückgibt. Verwende dazu die Beispielarrays in der Klasse und gib das Ergebnis für alle 3 Arrays aus.
 
'''Aufruf'''
 
{{JSL|PrintFirstAndLast(arr);}}
 
'''Ausgabe'''
 
{{BSL|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 {{JSL|int[]}} berechnet und zurückgeben kann. Teste alle Methoden in der {{JSL|Start}} Methode mit allen gegebenen {{JSL|int[]}} der Klasse.
 
Erstelle eine Print Methode die einen {{JSL|string}} und einen {{JSL|int}} bekommt.
 
'''Beispiel Aufruf'''
 
{{JSL|PrintMyResult("Minimum",GetMin(arr));}}
 
'''Beispiel Ausgabe'''
 
{{BSL|Minimum: 0}}
 
'''Beispiel Aufruf'''
 
{{JSL|PrintMyResult("Maximum",GetMax(arr));}}
 
'''Beispiel Ausgabe'''
 
{{BSL|Maximum: 23}}
 
 
==== Aufgabe 3) ====
Erstelle eine '''Methode''' welche einen {{JSL|int}} als Parameter nimmt. Diese '''Methode''' soll ein {{JSL|int[]}} erstellen und das {{JSL|int[]}} mit den Zahlen von '''0''' bis '''inklusive der angegebenen Zahl''' befüllen und dann zurückgeben. Teste diese '''Methode''' in der {{JSL|Start}} '''Methode''' und gib das Array auf verschiede Arten aus ('''for-Schleife''', '''foreach-Schleife''' und {{JSL|Console.WriteLine("[{0}]", string.Join(", ", arr))}})
 
'''Aufruf'''
{{JML|code=
int[] arr = fillArr(10);
//Ausgabe arr}}
 
'''Ausgabe'''
{{BML|code=
0 1 2 3 4 5 6 7 8 9 10
}}
 
 
==== Aufgabe 4) ====
Erstelle ein {{JSL|int[]}} und befülle es mit Zufallszahlen von 0 bis 100.
Sortiere das gegebene {{JSL|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 {{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 ==
==== Aufgabe 1) ====
{{JML|code= string Word1 = "apfel"
string Word2 = "regallager"
string Word3 = "hanna"
string Word4 = "reittier"}}
 
Erstelle eine {{JSL|Methode}} welche die oben genannten strings daraufhin untersucht, ob diese ein Palindrom sind.
 
Als Palindrom werden in der Sprachwissenschaft Wörter, Wortreihen oder Sätze bezeichnet, die rückwärts gelesen genau denselben Text oder zumindest einen Sinn ergeben.
 
'''Ausgabe'''
{{JML|code=Apfel = false
Regallager = true
Hanna = false
Reittier = true}}
 
==== Aufgabe 2) ====
Verwende für folgende Aufgabe den Text in {{JSL|Ressources.StringRessources.getHesse()}} und {{Ressources.StringRessources.getText()}} um eine Wortanalyse durchzuführen.
 
Erstelle eine Methoden welche das längste Wort findet. Diese sollen so flexibel wie möglich und testbar geschrieben werden. Achte darauf vor der Verarbeitung unerwünschte Zeichenfolgen zu entfernen, diese könnten sich negativ auf die Textverarbeitung auswirken (''', oder . oder -''' ist nicht das kürzeste Wort).
 
=== Bonus Aufgaben REGEX ===
{{BSL|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 {{JSL|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 {{JSL|string}}, bei dem alles ersetzt wurde, aus.
 
'''Ausgabe'''
 
{{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) ====
Erstelle einen regulären Ausdruck der folgendem Sachverhalt entspricht und prüfe diesen in der {{JSL|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'''{{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}}
 
'''Aufruf'''{{Space10}}{{JSL|Console.WriteLine(Regex.IsMatch("luke010A", regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}}
 
'''Aufruf'''{{Space10}}{{JSL|Console.WriteLine(Regex.IsMatch("test101ABCDE", regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}}
 
'''Aufruf'''{{Space10}}{{JSL|Console.WriteLine(Regex.IsMatch("test1ABCDE", regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}}
 
== Kalender ==
==== Aufgabe 1) ====
Gib mit Hilfe der {{JSL|Calendar}} Api den Wochentag des aktuellen Tages inklusive Datum aus.
 
'''Ausgabe'''
 
{{BSL|DI 19.10.2021}}
 
 
==== Aufgabe 2) ====
{{JML|code=string[] cultureInfo = { "de-DE", "fr-FR", "it-IT", "tr-TR", "hu-HU", "en-US" };}}
 
Erstelle eine Methode die mit der {{JSL|DateTime.Now}} Funktion den aktuellen Wochentag ausgibt.
Gib dieser Methode das oben genannte {{JSL|string[]}} mit und gib die Wochentage in unterschiedlichen Sprachen aus.
 
'''Ausgabe'''
{{BML|code=Freitag
vendredi
venerdì
Cuma
péntek
Friday}}
 
 
 
 
 
 
'''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 {{JSL|Methoden}} zu erstellen und gestalte deinen Code übersichtlich.
*deine {{JSL|PrintMethode}} schö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 ===
[[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]]


=== BonusAufgabe: TicTacToe KI ===
Erweitere [[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Aufgabe:_TicTacToe|TicTacToe]], dass gegen den Computer gespielt werden kann. Siehe [https://www.geeksforgeeks.org/minimax-algorithm-in-game-theory-set-3-tic-tac-toe-ai-finding-optimal-move/ MiniMax Algorithmus].


=== Aufgabe2: TicTacToe ===
=== BonusAufgabe: Türme von Hanoi ===
[[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Aufgabe:_TicTacToe|TicTacToe]]
 
 
=== Aufgabe3: 4 in a Row===
[[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Bonusaufgabe:_4_in_Rows|4 in a Row]]
 
 
 
== Zusätzliche Bonus Aufgaben ==
 
=== Aufgabe: Türme von Hanoi ===
Finde eine programmatische Lösung für die [https://de.wikipedia.org/wiki/T%C3%BCrme_von_Hanoi Türme von Hanoi].
Finde eine programmatische Lösung für die [https://de.wikipedia.org/wiki/T%C3%BCrme_von_Hanoi Türme von Hanoi].


Als Datenstruktur wird ein 2-Dimensionales Array benötigt:
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.
{{JML|code=
{{JML|code=
int disks = 3;
int[][] hanoi = new int[3][Anzahl Scheiben]
int[][] hanoi = new int[3][]
}}
}}


Zeile 416: Zeile 45:
  '''Tip:''' [https://de.wikipedia.org/wiki/Fibonacci-Folge Fibonacci]
  '''Tip:''' [https://de.wikipedia.org/wiki/Fibonacci-Folge Fibonacci]


 
=== BonusAufgabe: Blackjack ===
=== Aufgabe: Blackjack ===


Regeln: http://www.hitorstand.net/strategy.php (Wir machen ohne Split)
Regeln: http://www.hitorstand.net/strategy.php (Wir machen ohne Split)

Aktuelle Version vom 25. Oktober 2024, 07:18 Uhr

Wir wünschen euch schöne Ferien. Genießt die freie Zeit und nützt diese auch zum programmieren üben!

Aufgabe: Selbstkontrolle

Die Selbstkontrolle, diese solltet ihr bearbeiten und ist eine gute Wiederholung

Selbstkontrolle

Aufgabe: Wiederholung Objektorientierte Programmierung

Wiederholung der Klassen Objekte

Wiederholung


Tipp des Tages: Hackerrank

Probiert es doch mal aus, macht spaß: https://hackerrank.com

BonusAufgabe: GameOfLife

Conways Game of life

BonusAufgabe: TicTacToe KI

Erweitere TicTacToe, dass gegen den Computer gespielt werden kann. Siehe MiniMax Algorithmus.

BonusAufgabe: 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:

int[][] hanoi = new int[3][Anzahl Scheiben]

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

BonusAufgabe: 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!