DCV 2024 09/Selbsttest: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Sandro (Diskussion | Beiträge)
Sandro (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
== Zeitlicher Ablauf ==
'''Wir wünschen euch schöne Ferien. Genießt die freie Zeit und nützt diese auch zum programmieren üben!'''
Geschätzte Zeit : 3-4 Stunden.  (Das ist nur eine ungefähre Richtlinie, nicht eine zeitliche Vorgabe!)


Lies dir die Aufgaben alle zuerst durch und überlege dir vor dem Coden wie du die Probleme in einzelne Schritte zerlegen
{{TOC limit|4}}
und dann behandeln kannst.
Versuche so gut du kannst alle Übungen alleine ohne Hilfe zu lösen und notiere dir die Übungen, bei denen du dir schwer getan hast.


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


[[DCV_2024_03/Selbstkontrolle_Strukturierte_Programmierung|Selbstkontrolle]]


Der Punkt Datenströme ist '''optional''', da dieser noch nicht behandelt wurde. Man kann es natürlich trotzdem erledigen!


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


==== Aufgabe 1) ====
=== Aufgabe: GameOfLife ===
Zähle in einer '''for-Schleife''' '''rückwärts''' von '''10''' bis '''inklusive 0''' und gib jede Zahl aus.
[[DCV_2023_03/Strukturierte_Programmierung_Uebungen/Arrays#Aufgabe:_Conways_Game_of_life|Conways Game of life]]


'''Ausgabe'''
=== Aufgabe: 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].


{{BSL|10 9 8 7 6 5 4 3 2 1 0}}
=== 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].


==== Aufgabe 2) ====
Als Datenstruktur wird ein 2-Dimensionales Array benötigt:
Zähle in einer '''for-Schleife''' von '''-30''' bis '''inklusive 30''' und gib jede Zahl aus die '''ohne Rest''' durch '''3''' teilbar ist.
{{JML|code=
 
int[][] hanoi = new int[3][Anzahl Scheiben]
'''Ausgabe'''
{{BML|code=
-30
-27
-24
...
24
27
30
}}
}}


==== Aufgabe 3) ====
Jede Scheibe wird durch eine Zahl reprästentiert, die dessen Größe beschreibt.
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'''
'''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)


{{BML|code=
'''Tip:''' [https://de.wikipedia.org/wiki/Fibonacci-Folge Fibonacci]
0
1
2
3
4
5
6


7
=== Aufgabe: Blackjack ===


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


9
{{JML|code=
 
int[] deck = new int[52]; (initialisiert von 0, 1, 2 bis 51.)
10
}}
}}


== Methoden ==
'''Methoden:'''
* Mischen mit swap
* getColor() auf Basis value / 13
* getFigure() auf Basis value % 13
* getValue()
* getValueHand() // zB: Summe von 3 Karten


==== Aufgabe 1) ====
Strategie für die Bank: Zieht bis < 17
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.


'''Aufruf'''
Achte auf eine schöne Ausgabe!
 
{{JSL|printLineStipple("X", 10);}}
 
'''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|printRowStipple("X", 3);}}


=== Aufgabe: Hashsumme/Prüfsumme ===
Erstelle ein Programm welches die Prüfsumme einer gegebenen Datei berechnet und ausgibt. Hierbei kann auch gerne '''resources/txt/simpeText.txt''' verwendet werden. Nähere Informationen zur Hashsumme finden sich [https://de.wikipedia.org/wiki/Hashfunktion hier].
Lies die Datei mithilfe eines {{JSL|FileInputStream}}:
{{JML|code=
InputStream in = [YourClass].class.getClassLoader().getResourceAsStream("txt/simpleText.txt");
byte[] buffer = new byte[1024];
int read = 0;
while((read = in.read(buffer)) > 0) {
    //Digest aktualisieren         
}
}}
Erstelle einen {{JSL|MessageDigest}} für '''MD5''' und '''SHA256''' und befülle diesen mit dem {{JSL|byte[] buffer}}. Instanzen von {{JSL|MessageDigest}} erhältst du mittels {{JSL|MessageDigest.getInstance([algorithm])}}.
Um die Prüfsumme des {{JSL|MessageDigest}} lerbar zu machen verwende:
{{JML|code=
private static String toString(MessageDigest digest) {
    return new BigInteger(1,digest.digest()).toString(16);
}
}}


'''Ausgabe'''


{{BML|code=
{{BML|code=
X
#Prüfsummen für resources/txt/simpleText.txt
 
md5: a82e2148461ca6b10c48ddb920a40f15
X
sha256: 4711958a43201ac481b37ab2f50a1fd366cc14f5996ad7e02bc01b2f9ea0d12
 
}}
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|printStippleL("X", 3);}}
'''Online MD5 Hash generator'''
Hier kann die '''Hashsumme''' für einen gegebenen Text berechnet werden: [http://www.md5.cz/ MD5 Generator]


'''Ausgabe'''
=== Aufgabe: Cäsar-Verschlüsselung ===
Bei der Cäsar-Verschlüsselung werden die Buchstaben um eine fixe Anzahl Stellen
verschoben (z.B. 2) a wird zu c, f wird zu h, z wird zu b usw.
Implementiere eine Methode {{JSL|encrypt(String)}} welche einen {{JSL|String}} zurückgibt und und eine Methode
{{JSL|decrypt(String)}} welche einen {{JSL|String}}.


'''Entschlüsselt'''
{{BML|code=
{{BML|code=
X X X
Dies ist ein Beispieltext der mit einem Klick verschlüsselt werden kann. Hier kann auch
X
ein eigenen Text herein geschrieben, oder ein Geheimcode zum Entschlüsseln herein
 
kopiert werden.
X
 
X}}
 
== Input ==
 
 
==== Aufgabe 1) ====
Lies einen {{JSL|String}} vom Benutzer ein (ganze Zeile) und einen {{JSL|int}}. Die Zahl besagt wie oft der {{JSL|String}} ausgegeben werden soll. Wird ein leerer {{JSL|String}} oder eine ungültiger {{JSL|int}} eingegeben, so soll die Eingabe erneut erfolgen.
 
'''Eingabe'''
{{BML|code=
Bitte geben Sie einen Text ein:
>> Heute wird ein guter Tag
Wie oft soll der Text ausgegeben werden:
>> 3
}}
}}


'''Ausgabe'''
'''Verschlüsselt (um 3 verschoben)'''
{{BML|code=
{{BML|code=
Heute wird ein guter Tag
Glhv lvw hlq EhlvslhowhAw ghu plw hlqhp Nolfn yhuvfkoüvvhow zhughq ndqq. Klhu
Heute wird ein guter Tag
ndqq dxfk hlq hljhqhq WhAw khuhlq jhvfkulhehq, rghu hlq Jhkhlpfrgh Cxp
Heute wird ein guter Tag
Hqwvfkoüvvhoq khuhlq nrslhuw zhughq.
}}
}}
== Arrays ==
==== 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 aus.
'''Aufruf'''
{{JSL|System.out.println(getFirstAndLast(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 übergebenes {{JSL|int[]}} berechnet. Teste alle Methoden in der {{JSL|main}} Methode mit allen gegebenen {{JSL|int[]}} der Klasse.
'''Beispiel Aufruf'''
{{JSL|System.out.println("Minimum: " + getMin(arr));}}
'''Beispiel Ausgabe'''
{{BSL|Minimum: 0}}
'''Beispiel Aufruf'''
{{JSL|System.out.println("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|main}} '''Methode''' und gib das Array aus (egal wie, z.b.: Schleife, oder {{JSL|Arrays.toString(...)}})
'''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) ====
Sortiere das in der Klasse gegebene {{JSL|int[]}} mit Hilfe von '''Bubblesort''' und gib das Array aus. Ob '''aufsteigend''' oder '''absteigend''' Sortiert bleibt dir überlassen.
== Kalender ==
==== Aufgabe 1) ====
Gib mit Hilfe der {{JSL|Calendar}} Api den Wochentag des aktuellen Tages inklusive Datum aus.
'''Ausgabe'''
{{BSL|DI 26.10.2024}}
== String manipulation ==

Version vom 25. Oktober 2024, 06:20 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

Der Punkt Datenströme ist optional, da dieser noch nicht behandelt wurde. Man kann es natürlich trotzdem erledigen!

Hackerrank

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

Aufgabe: GameOfLife

Conways Game of life

Aufgabe: TicTacToe KI

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

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:

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

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!

Aufgabe: Hashsumme/Prüfsumme

Erstelle ein Programm welches die Prüfsumme einer gegebenen Datei berechnet und ausgibt. Hierbei kann auch gerne resources/txt/simpeText.txt verwendet werden. Nähere Informationen zur Hashsumme finden sich hier. Lies die Datei mithilfe eines FileInputStream:

InputStream in = [YourClass].class.getClassLoader().getResourceAsStream("txt/simpleText.txt");
byte[] buffer = new byte[1024];
int read = 0;
while((read = in.read(buffer)) > 0) {
    //Digest aktualisieren           
}

Erstelle einen MessageDigest für MD5 und SHA256 und befülle diesen mit dem byte[] buffer. Instanzen von MessageDigest erhältst du mittels MessageDigest.getInstance([algorithm]). Um die Prüfsumme des MessageDigest lerbar zu machen verwende:

private static String toString(MessageDigest digest) {
    return new BigInteger(1,digest.digest()).toString(16);
}


#Prüfsummen für resources/txt/simpleText.txt
md5: a82e2148461ca6b10c48ddb920a40f15
sha256: 4711958a43201ac481b37ab2f50a1fd366cc14f5996ad7e02bc01b2f9ea0d12
Online MD5 Hash generator
Hier kann die Hashsumme für einen gegebenen Text berechnet werden: MD5 Generator

Aufgabe: Cäsar-Verschlüsselung

Bei der Cäsar-Verschlüsselung werden die Buchstaben um eine fixe Anzahl Stellen verschoben (z.B. 2) a wird zu c, f wird zu h, z wird zu b usw. Implementiere eine Methode encrypt(String) welche einen String zurückgibt und und eine Methode decrypt(String) welche einen String.

Entschlüsselt

Dies ist ein Beispieltext der mit einem Klick verschlüsselt werden kann. Hier kann auch
ein eigenen Text herein geschrieben, oder ein Geheimcode zum Entschlüsseln herein
kopiert werden.

Verschlüsselt (um 3 verschoben)

Glhv lvw hlq EhlvslhowhAw ghu plw hlqhp Nolfn yhuvfkoüvvhow zhughq ndqq. Klhu
ndqq dxfk hlq hljhqhq WhAw khuhlq jhvfkulhehq, rghu hlq Jhkhlpfrgh Cxp
Hqwvfkoüvvhoq khuhlq nrslhuw zhughq.