DCV 2022 03/Strukturierte Programmierung Uebungen: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 13: Zeile 13:
= [[DCV_2022_03/Strukturierte_Programmierung_Uebungen/Input|Input]] =
= [[DCV_2022_03/Strukturierte_Programmierung_Uebungen/Input|Input]] =


= Arrays =
= [[DCV_2022_03/Strukturierte_Programmierung_Uebungen/Arrays|Arrays]] =
Im folgenden finden sich Aufgaben für Arrays und deren Sortierung.


=== Aufgabe: Number Array ===
= [[DCV_2022_03/Strukturierte_Programmierung_Uebungen/Kalender|Kalender]] =
Erstelle ein {{JSL|int[]}} mit der Dimension von Benutzerangabe und befülle mit 1, 2, 3, usw.


Erstelle ein zweites {{JSL|int[]}} und befülle mit Zahlen entsprechend der Größe ..., 3, 2, 1.
= [[DCV_2022_03/Strukturierte_Programmierung_Uebungen/String_Operationen|String Operationen]] =


= [[DCV_2022_03/Strukturierte_Programmierung_Uebungen/Datenströme|Datenströme]] =


=== Aufgabe: Kopie ===
= [[DCV_2022_03/Strukturierte_Programmierung_Uebungen/Comma_Separated_Values|'''C'''omma '''S'''eparated '''V'''alue]] =
 
Erstelle eine Funktion, die aus dem Parameter Array eine Kopie erstellt.
 
{{JML|code=
public static int[] makeACopy(int[] original){
}
}}
 
 
 
=== Aufgabe: Random Number Array ===
Erstelle ein {{JSL|int[]}} und befülle es mit Zufallszahlen von '''0''' bis '''100'''.
{{JML|code=
Random random  new Random();
...
int randomNumber  random.nextInt([Upper bound]);
}}
# Gib es mit Hilfe einer '''foreach-Schleife''' aus.
# Gib es mit Hilfe einer '''fori-Schleife''' aus. Das Ziel ist eine identische Ausgabe, wie beim {{JSL|Arrays.toString()}}
# Gib den zweiten, fünften und zehnten Wert des Arrays aus.
# Gib jeden zweiten Wert des {{JSL|int[]}} mit Hilfe einer '''Schleife''' aus aus.
 
=== Aufgabe: Random Number Array Crazy Range ===
Erstelle ein {{JSL|int[]}} und befülle es mit Zufallszahlen von '''-50''' bis '''50''' und gib es mit Hilfe einer '''foreach-Schleife''' aus.
 
 
=== Aufgabe: Random Number Array Zählen ===
Erstelle ein {{JSL|int[]}} und befülle es mit Zufallszahlen von '''1''' bis '''100'''.
 
Erstelle eine Funktion, die die Werte größer als 30 zählt.
 
=== Aufgabe: Random Number Array Summe ===
Erstelle ein {{JSL|int[]}} und befülle es mit Zufallszahlen von '''1''' bis '''100'''.
 
Erstelle eine Funktion, die die Summe der Werte zurückgibt.
 
=== Aufgabe: Random Number Array Min/Max/Avg ===
Erstelle ein {{JSL|int[]}} und befülle es mit Zufallszahlen von '''1''' bis '''100'''. Erstelle jeweils eine Methode für das '''Minimum''', das '''Maximum''' und den '''Durchschnitt'''. Die Methoden sollen jeweils den Wert zurückgeben (nicht Ausgeben). In der {{JSL|main}} Methode Rufe die Methoden mit den Zufallszahlen auf und gib diese aus.
 
Erstelle zwei weitere Funktionen, die den '''Index''' des Minimums und des Maximums zurückgeben.
 
=== Aufgabe: Bubblesort mit Zahlen ===
Erstelle ein {{JSL|int[]}} und sortiere es mit einem selbsterstellten '''Bubblesort Algorithmus''' und gib es dann aus. Der '''Bubblesort Algorithmus''' soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der {{JSL|main}} Methode.
# Sortiere der Größe nach aufsteigend (Ascending)
# Sortiere der Größe nach absteigend (Descending)
 
=== '''Bonusaufgabe: 15 Differenz Sort Algorithmen''' ===
 
Implementiere 3 unterschiedliche Algorithmen (nach deiner Wahl)
 
https://www.youtube.com/watch?v=kPRA0W1kECg
 
 
Der Pseudo-Kode der Algorithmen findest du unter:
 
https://panthema.net/2013/sound-of-sorting/SoS-CheatSheet.pdf
 
 
 
=== Aufgabe: 2D-Array ===
Erstelle ein Zwei-Dimension-Array {{JSL|int[][]}} und befülle es mit Zufallszahlen von '''0''' bis '''100'''.
 
Nach Eingabe von Anwender gebe zurück die Summe pro Zeile oder pro Spalte.
 
 
 
=== Aufgabe: Pascal Dreieck ===
Frage der Anwender nach dem gewünschte Größe und erstelle ein Pascal-Dreieck mit der entsprechenden Dimension
 
1      1      1      1      1      1      1      1      1      1
1      2      3      4      5      6      7      8      9      10
1      3      6      10      15      21      28      36      45      55
1      4      10      20      35      56      84    120    165    220
1      5      15      35      70    126    210    330    495    715
1      6      21      56    126    252    462    792    1287    2002
1      7      28      84    210    462    924    1716    3003    5005
1      8      36    120    330    792    1716    3432    6435  11440
1      9      45    165    495    1287    3003    6435  12870  24310
1      10      55    220    715    2002    5005  11440  24310  48620
 
Regel: Jede Zahl im Matrix ist gleich die Summe vom Zahl nach Links und Zahl nach Oben.
 
 
=== Aufgabe: Formular Generieren (Anwendung von Pascal Dreieck) ===
Wenn wir die Zahlen in Diagonal lesen, bekommen wir die Koeffizienten von {{JSL|(a+b)^n}}
 
Zum Beispiel:
 
(a+b)<sup>2</sup> = a<sup>2</sup> + 2ab + b<sup>2</sup>
 
(a+b)<sup>3</sup> = a<sup>2</sup> + 3a<sup>2</sup>b + 3ab<sup>2</sup> + b<sup>3</sup>
 
Frage den Anwender, welche Formular er braucht, und druck das konkrete Formular auf die Konsole.
Verwende das {{JSL|^}} Zeichen für die Darstellung des Exponents
 
=== Aufgabe: TicTacToe ===
Programmiere das Spiel TicTacToe.
 
Für das Spielfeld, verwende {{JSL|int[3][3]}} Array, in dem
* 0 = Leer
* 1 = Spieler 1
* 2 = Spieler 2
 
Das Kriterium für Gewinn ist, 3 Zeichen in eine Reihe, Spalte oder Diagonal.
 
 
=== '''Bonusaufgabe: 4 in Rows''' ===
 
Das Spiel wird auf einem senkrecht stehenden hohlen Spielbrett gespielt, in das die Spieler
abwechselnd ihre '''Spielsteine fallen lassen'''. Das Spielbrett besteht aus '''sieben Spalten (senkrecht) und sechs Reihen (waagerecht)'''. Jeder Spieler besitzt 21 gleichfarbige Spielsteine. Wenn ein Spieler einen
Spielstein in eine Spalte fallen lässt, besetzt dieser den untersten freien Platz der Spalte. Gewinner ist
der Spieler, der es als erster schafft, '''vier oder mehr seiner Spielsteine waagerecht, senkrecht oder diagonal in eine Linie''' zu bringen.
Das Spiel endet unentschieden, wenn das Spielbrett komplett gefüllt ist, ohne dass ein Spieler eine Viererlinie gebildet hat.
 
= Kalender =
Im folgenden sollen einige Funktionen der {{JSL|Calendar}} Api erlernt werden.
 
=== Aufgabe: Wann ist Sonntag? ===
Erstelle eine neue {{JSL|Calendar}} Instanz und gib das Datum des nächsten '''Sonntags''' aus.
 
=== Aufgabe: Wieviele Sonntage hat der Monat? ===
Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der '''Sonntage''' zurückgibt. Teste diese Methode in der {{JSL|main}} Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.
 
'''Aufruf:'''
 
{{JSL|System.out.println(getSundays(2021, 10));}}
 
'''Ausgabe:'''
 
{{BSL|5}}
 
'''Aufruf:'''
 
{{JSL|System.out.println(getWorkdays(2021, 9));}}
 
'''Ausgabe:'''
 
{{BSL|4}}
 
=== Aufgabe: Wieviele Arbeitstage? ===
Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der '''Arbeitstage''' zurückgibt (Mo-Fr). Teste diese Methode in der {{JSL|main}} Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.
 
'''Aufruf:'''
 
{{JSL|System.out.println(getWorkdays(2021, 6));}}
 
'''Ausgabe:'''
 
{{BSL|22}}
 
'''Aufruf:'''
 
{{JSL|System.out.println(getWorkdays(2021, 3));}}
 
'''Ausgabe:'''
 
{{BSL|23}}
 
'''Aufruf:'''
 
{{JSL|System.out.println(getWorkdays(2021, 2));}}
 
'''Ausgabe:'''
 
{{BSL|20}}
 
= String Operationen =
Im folgenden sollen die {{JSL|String}} Operationen {{JSL|replaceAll(...)}}, {{JSL|matches(...)}}, {{JSL|split(...)}} erarbeitet werden.
 
=== Aufgabe: Bubblesort mit Strings ===
Verwende das gegebene {{JSL|String[]}} und sortiere es mit einem selbsterstellten '''Bubblesort Algorithmus''' und gib es dann aus. Der '''Bubblesort Algorithmus''' soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der {{JSL|main}} Methode.
# Sortiere die Namen aufsteigend (Ascending)
# Sortiere die Namen absteigend (Descending)
Tip.: Strings können mit der Instanz Methode {{JSL|compareTo}} der {{JSL|String}} Klasse verglichen werden: {{JSL|"a".compareTo("b")}}
{{JML|code=
String[] names  new String[]{"Plamena", "Sadaaq", "Gyula", "Eray", "Gerri", "Stefan", "Lena", "Danny", "Ömer", "Stjepan", "Sandro", "Bartosz", "Ingo", "Rauan", "Mahir", "Lukas", "Niklas"};
}}
 
=== Aufgabe: Bubblesort mit Strings Extended ===
Verwende das aus der vorhergehenden Aufgabe gegebene {{JSL|String[]}} und sortiere es mit einem selbsterstellten '''Bubblesort Algorithmus''' und gib es dann aus. Der '''Bubblesort Algorithmus''' soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der {{JSL|main}} Methode. Die Methode soll nun zusätzlich zum {{JSL|String[]}} Parameter einen weiteren {{JSL|boolean}} als Parameter erhalten. Dieser {{JSL|boolean}} entscheidet, ob das {{JSL|String[]}} '''aufsteigend''', oder '''absteigend''' sortiert wird.
 
=== Aufgabe: Bubblesort mit Strings an Character Index ===
Verwende das aus der vorhergehenden Aufgabe gegebene {{JSL|String[]}} und sortiere es mit einem selbsterstellten '''Bubblesort Algorithmus''' und gib es dann aus. Der '''Bubblesort Algorithmus''' soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der {{JSL|main}} Methode. Die Methode soll nun zusätzlich zum {{JSL|String[]}} Parameter einen weiteren {{JSL|int}} als Parameter erhalten. Dieser {{JSL|int}} steht für den Index des {{JSL|char}} im {{JSL|String}} nach dem sortiert werden soll.
Prüfe zuerst ob die Sortierung nach dem gegebenen Index erfolgen kann. Wenn der Index zu groß ist, mach eine entsprechende Ausgabe und sortiere nicht.
 
 
=== Aufgabe: Email Regex aka. Regbert ===
Erstelle einen '''regulären Ausdruck''' ('''Reg'''ular '''Ex'''pression) für Email Adressen.
 
{{JML|code=
String regex = "[richtiger Regex hier]";
}}
 
'''Aufruf'''{{Space10}}{{JSL|System.out.println("alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}}
 
'''Aufruf'''{{Space10}}{{JSL|System.out.println("rambina.alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}}
 
'''Aufruf'''{{Space10}}{{JSL|System.out.println("rambina1.1alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}}
 
'''Aufruf'''{{Space10}}{{JSL|System.out.println("1rambina1.alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}}
 
'''Aufruf'''{{Space10}}{{JSL|System.out.println("@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}}
 
'''Aufruf'''{{Space10}}{{JSL|System.out.println("drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}}
 
'''Aufruf'''{{Space10}}{{JSL|System.out.println("asdf@drlue".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}}
 
'''Aufruf'''{{Space10}}{{JSL|System.out.println("asdf@microsoft.c".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}}
 
=== Aufgabe: Replace all ===
Ersetze im {{JSL|String}}
 
{{JSL|"Heute wird ein guter Tag! Heute wird ein noch guterer Tag! Heute wird ein spitzen guter Tag!"}}
 
'''wird''' durch '''war und ist''' und gib ihn aus.
 
=== Aufgabe: Replace all 2 ===
Lösche im {{JSL|String}}
 
{{JSL|"Heute wird ein guter Tag! Heute wird ein noch guterer Tag! Heute wird ein spitzen guter Tag!"}}
 
# Jeden '''Kleinbuchstaben''' und gib ihn aus
# Jeden '''Großbuchstaben''' und gib ihn aus
# Jedes '''Leerzeichen''' und gib ihn aus
# Jedes '''Ausrufezeichen !''' und gib ihn aus
 
=== Aufgabe: Replace all 3 ===
Lösche im {{JSL|String}}
 
{{JSL|"749813247132984712039487123049871204398712039487"}}
 
# Alle Zahlen von '''0 bis 9''' und gib ihn aus
# Alle Zahlen von '''1 bis 9''' und gib ihn aus
# Alle Zahlen von '''2 bis 4''' und gib ihn aus
# Alle Zahlen von '''1 bis 3''' und '''6 bis 9''' und gib ihn aus
 
=== Aufgabe: Split ===
Erstelle eine Methode welche den {{JSL|String}}
 
{{JSL|"Heute wird ein guter Tag! Heute wird der beste Tag überhaupt! Heute wird ein spitzen super Tag!"}}
 
mit Hilfe eines gegebenen Strings zerlegt, welcher als Parameter mitgegeben wird und den das {{JSL|String[]}} zurückgibt. Füge das {{JSL|String[]}} mittels eines {{JSL|StringBuilder}} wieder zusammen füge jedoch nach jedem {{JSL|append}} auch einen {{JSL|System.lineSeparator()}} hinzu. Gib dann den {{JSL|String}} den du vom {{JSL|StringBuilder}} erhältst aus. Teste deine Methode in der {{JSL|main}} Methode mit einigen Beispielen.
 
'''Aufruf'''
 
{{JML|code=
String[] words = wordSplit(text, "Tag");
...
}}
 
'''Ausgabe'''
 
{{BML|code=
Heute wird ein guter
! Heute wird der beste
überhaupt! Heute wird ein spitzen super
!
}}
 
=== Aufgabe: Split & Sort ===
Erstelle eine Methode welche den {{JSL|String}}
 
{{JSL|"Heute wird ein guter Tag! Heute wird der beste Tag überhaupt! Heute wird ein spitzen super Tag!"}}
 
in seine Worte zerlegt. Sortiere dann die Worte mit '''Bubblesort'''. Füge das {{JSL|String[]}} mittels eines {{JSL|StringBuilder}} wieder zusammen gib dann den {{JSL|String}}, den du von {{JSL|StringBuilder}} erhältst aus.
 
= Datenströme =
Im folgenden geht es um das einlesen und verarbeiten von Textdateien. Erstelle wo möglich und nötig für die einzelnen Schritte eine eigene Methode. Verwende dazu die Datei '''file.txt''' im '''assets''' Ordner.
{{JML|code=
String path = "assets/file.txt";
}}
 
=== Aufgabe: File einlesen und Ausgeben ===
Lies das '''File''' mit hilfe von {{JSL|Scanner}} oder {{JSL|BufferedRead}} ein und gib es aus.
 
=== Aufgabe: Buchstaben zählen ===
Lies das '''File''' mit hilfe von {{JSL|Scanner}} oder {{JSL|BufferedRead}} ein.
# Gib die Anzahl der Buchstaben aus
# Erstelle eine Methode welche nur einen bestimmten Buchstaben des Texts zählt, welcher als Parameter mitgegeben wird.
# Erstelle eine Methode welche ein {{JSL|char[]}} von Bestimmten Buchstaben des Texts zählt. Das {{JSL|char[]}} soll als Parameter mitgegeben werden können. Es soll nur die Gesamtzahl aller Vorkommnisse der Buchstaben gezählt werden. Wie oft ein einzelner Buchstabe vorkommt ist hier uninteressant.
 
'''Tip zu 2)'''
 
{{JSL|System.out.println(countChar(text, 'a'));}}
 
'''Tip zu 3)'''
 
{{JML|code=
char[] charsToCount = new char[]{'a', 'z', 'e'};
System.out.println(countChars(text, charsToCount));
}}
 
=== Aufgabe: Wörter zählen ===
Lies das '''File''' mit Hilfe von {{JSL|Scanner}} oder {{JSL|BufferedRead}} ein. Und gib die Anzahl der Wörter aus. Es muss nicht exakt sein.
 
=== Aufgabe: Dynamisches Wörter zählen ===
Lies das '''File''' mit Hilfe von {{JSL|Scanner}} oder {{JSL|BufferedRead}} ein. Frage den Benutzer nach einem '''bestimmten Wort''' und gib aus wie oft es vorkommt.
 
=== Aufgabe: Dynamisches Wörter ersetzen ===
Lies das '''File''' mit Hilfe von {{JSL|Scanner}} oder {{JSL|BufferedRead}} ein. Frage den Benutzer nach '''zwei Wörtern'''. Das '''erste Wort''' soll durch das '''zweite Wort''' im Text ersetzt werden. Gib dannach den Text aus.
 
=== Aufgabe: File schreiben ===
Lies solange eingaben vom Benutzer, bis eine Leerzeile eingegeben wird. Dann schreibe die Eingaben in eine Datei. Der Pfad soll lauten '''assets/tmp/output.txt'''.
 
= '''C'''omma '''S'''eparated '''V'''alue =
CSV Dateien sind strukturierte Textdateien, die durch einen Separator (z.B.: ,) getrennt sind.
=== Aufgabe: Read and Display ===
Lies die CSV Datei '''assets/sales_100.csv''' ein und speichere diese in einem {{JSL|String}}. Zerlege den {{JSL|String}} zuerst nach Zeilen, dann nach Spalten und erstelle somit ein {{JSL|String[][]}}, ein '''zweidimensionales Array'''. Gib nun mit Hilfe des {{JSL|String[][]}}, die Daten schön formatiert aus.
 
=== Aufgabe: Read and Display optimiert ===
Verarbeite die CSV Datei wie in der vorhergehenden Aufgabe. Für die Ausgabe finde zuerst die optimale Spaltenbreite für jede Spalte.
 
=== Aufgabe: Read and Display sortiert ===
Verarbeite die CSV Datei wie in den vorhergehenden Aufgaben. Weiters erfrage vom Benutzer nach welcher Spalte die Datei sortiert werden soll. Suche nach der Eingabe zuerst nach der gewünschten Spalte. Ist diese vorhanden, sortiere das {{JSL|String[][]}} '''lexikografisch''' und gib es aus.
'''Achtung''' der Header darf nicht sortiert werden!!! '''Achtung'''
 
=== Aufgabe: Read and Display sortiert extended ===
Verfahre wie in der vorhergehenden Aufgabe. Handelt es sich bei dem Inhalt einer Spalte um '''Zahlen''' so behandle diese auch als solche.
 
Tip: {{JSL|Float.parseFloat(...)}}, {{JSL|Integer.parseInt(...)}}
 
=== Aufgabe: Read and Write ===
Lies und verarbeite die CSV Datei wie in vorhergehender [[Strukturierte_Programmierung_Uebungen#Aufgabe:_Read_and_Display|Aufgabe]] ein. Schreib das {{JSL|String[][]}} als CSV nun in eine neue Datei. Verwende als Separator (Trennzeichen) {{BSL|;}}.

Aktuelle Version vom 31. März 2022, 05:27 Uhr

Im folgenden finden sich verschiedene Übungsaufgaben für den Bereich der Strukturierten Programmierung in Java. Es müssen nicht alle Aufgaben zur Gänze gelöst werden. Es sollten jedoch einige Aufgaben dabei Sein die ihr lösen könnt:-)

Solltet ihr Fehler finden dürft ihr diese gerne beheben, es ist ein Wiki
Habt ihr Fragen, so meldet euch einfach
Befindet sich bei einer Aufgabe eine Nummerierung im Inhalt, so sind diese als unterschiedliche Varianten anzusehen. Also eigentlich mehrere Aufgaben. Ihr dürft aber gerne auf bestehenden Code zurückgreifen