Aufgaben 4.2.: Unterschied zwischen den Versionen
Zeile 109: | Zeile 109: | ||
Carlchen Crypto ist sauer. Die NSA liest trotz seiner genialen Verschlüsselung immer noch seine mails. Nun hat er eine neue Idee: Er nimmt von einer Zeichenkette immer jeden zweiten Buchstaben und gibt ihn aus. Anschließend hängt er ausgehend vom zweiten Buchstaben wiederum jeden zweiten Buchstaben an. Beispiel: Aus "Deggendorf" wird (nach Umwandlung in Kleinbuchstaben) "dgedrennof". Erstelle eine Methode '''crypto2()''', die nach Eingabe einer Zeichenkette Carlchens Idee umsetzt. | Carlchen Crypto ist sauer. Die NSA liest trotz seiner genialen Verschlüsselung immer noch seine mails. Nun hat er eine neue Idee: Er nimmt von einer Zeichenkette immer jeden zweiten Buchstaben und gibt ihn aus. Anschließend hängt er ausgehend vom zweiten Buchstaben wiederum jeden zweiten Buchstaben an. Beispiel: Aus "Deggendorf" wird (nach Umwandlung in Kleinbuchstaben) "dgedrennof". Erstelle eine Methode '''crypto2()''', die nach Eingabe einer Zeichenkette Carlchens Idee umsetzt. | ||
+ | |||
+ | '''Zusatzaufgabe''': Erstelle eine Methode '''crypto2Decode()''', die nach eingabe eines mit '''crypto2()''' verschlüsselten Wortes dieses wieder dekodiert. Achtung: Es ist eine Fallunterscheidung hinsichtlich der Länge des Wortes (gerade oder ungerade) notwendig. | ||
+ | |||
+ | |||
+ | [[Lösungsvorschlag 4.2. - Aufgabe 6|Lösungsvorschlag]] |
Version vom 7. Dezember 2013, 10:24 Uhr
Aufgabe 1 ("Winkelfunktionen")
Für diese Aufgabe sind vier Methoden zu erstellen. Eine Methode winkelfunktionen(double x), die für einen beliebigen Eingabewert (x>=0) die drei Winkelfunktionen sin, cos und tan ausgibt. Für die Ermittlung der drei Winkelfunktionen soll jeweils eine eigene Methode mit Rückgabewert erstellt werden, die auf die entsprechende Funktion aus java.lang.Math zurückgreift. Beachte, dass tan x nicht definiert ist, wenn cos x=0 !
Der eingegebene Wert in Grad muss mittels der Methode Math.toRadians(double x) in das Bogenmaß umgerechnet werden.
Um Berechnungsungenauigkeiten aufzufangen, soll folgende Methode eingesetzt werden, um die Ergebnisse auf 8 Stellen zu runden:
private double runden(double wert, int stellen) { return Math.round(wert * Math.pow(10, stellen)) / Math.pow(10, stellen); }
Natürlich lässt sich das Problem einfacher lösen, indem man die entsprechenden Funktionen gleich in der Methode winkelfunktionen (double x) aufruft. Es soll jedoch hier das Prinzip der Dekomposition näher erläutert werden. Der Begriff beschreibt einen Prozess in der Programmierung, bei dem ein komplexes Problem oder System in kleinere Einheiten zerlegt wird, die leichter zu erfassen, zu verstehen, zu programmieren und damit auch zu modifizieren sind. Zudem erhöht sich dadurch die Möglichkeit der Wiederverwendbarkeit von Programmteilen.
Vergegenwärtige dir nach Abschluss der Aufgabe das Zusammenspiel der verschiedenen Methoden.
Aufgabe 2 ("Kreistabelle")
In einer Klasse Kreistabelle sollen drei Methoden erstellt werden: Die Methode kreistabelleAnzeigen() gibt für Radien von 5 bis 100 in 5er-Schritten den jeweilgen Umfang und Flächeninhalt aus. Die Berechnung von Umfang und Flächeninhalt wird in zwei weitere Methoden ausgelagert.
Aufgabe 3 ("NSA ärgern") (Knobelaufgabe !)
Carlchen Crypto hat die Nase voll davon, dass die NSA seine emails mitliest und will mit JAVA ein Kodierungsprogramm schreiben. Das Programm soll ein eingegebenes Wort in umgekehrter Reihenfolge der Buchstaben in den ASCII-Code umwandeln und dann jede Codezahl mit einer ultrageheimen Zahl multiplizieren, die ebenfalls miteingegeben wird. Das Ergebnis soll dann auf der Konsole ausgegeben werden.
Die Klasse String bietet eine Methode charAt(int index) mit der das Zeichen an einer bestimmten Stelle einer Zeichenkette ausgelesen werden kann. Mit length() lässt sich die Länge einer Zeichenkette feststellen.
Beispiel: s sei eine Zeichenkette. Mit s.charAt(s.lenth()-1) lässt sich das letzte, mit s.charAt(0) das erste Zeichen auslesen. Mit (int) zeichen (z.B. (int) 'B') lässt sich ein Zeichen in die ASCII-Zahl umwandeln.
Schreibe eine Klasse Crypto mit drei Methoden: crypto() liest über einen Parameter das zu verschlüsselnde Wort ein und liest die Buchstaben in umgekehrter Reihenfolge aus. Dabei wird jedesmal die Methode transform() aufgerufen, die wiederum zuerst die Methode asciiWandler() aufruft und anschließend die erhaltene Zahl mit der Geheimzahl multipliziert und das Ergebnis zurückliefert.
Zur Kontrolle kann die Funktion CODE() in Excel verwendet werden (z.B. CODE('B')=66).
Zusatzaufgabe 1: Verändere die Methode crypto() so, dass man sie für eine klassische Caesarverschiebung einsetzen kann (Methode crypto_caesar()).
Zusatzaufgabe 2: Ergänze die Klasse Crypto um Methoden zum Dekodieren, d.h. um das obige Verfahren umzukehren.
Aufgabe 4 (Methoden der Klasse String)
Erstelle eine Klasse StringMethoden und kopiere folgenden Code in den Editor:
public class StringMethoden { public void stringMethodenTesten(){ String s1 = "Nikolausi"; String s2 = "Mikolausi"; String s3 = "NIKOLAUSI"; //... System.out.println("Methode 1: "+s1); //... System.out.println("Methode 2: "+s1.charAt(5)); //... System.out.println("Methode 3: "+s1.endsWith("ausi")); //... System.out.println("Methode 4: "+s1.equals(s2)); //... System.out.println("Methode 5: "+s1.equalsIgnoreCase(s3)); //... System.out.println("Methode 6: "+s1.indexOf("i")); //... System.out.println("Methode 7: "+s1.indexOf("aus")); //... System.out.println("Methode 8: "+s1.length()); //... System.out.println("Methode 9: "+s1.replace('l','m')); //... System.out.println("Methode 10: "+s1.startsWith("Niko")); //... System.out.println("Methode 11: "+s1.substring(4)); // System.out.println("Methode 12: "+s1.substring(4,8)); // System.out.println("Methode 13: "+s1.toLowerCase()); // System.out.println("Methode 14: "+s1.toUpperCase()); } }
Kompiliere das Programm und lasse die Ergebnisse auf der Konsole ausgeben. Ergänze nun das Programm mit einem Kommentar (// ...), der genau angibt, was jede dieser String-Methoden macht.
Aufgabe 5 ("Buchstaben zählen")
Ergänze die Klasse StringMethoden um eine Methode, die für eine eingegebene Zeichenkette zählt und ausgibt, wie oft ein bestimmter Buchstabe vorkommt. Der Einfachheit halber soll die eingegebene Zeichenkette in Kleinbuchstaben umgewandelt werden. Hilfreich ist hier die Tatsache, dass eine for-Schleife auch mit Zeichen (z.B. 'a' bis 'z') funktioniert. Der Typ der Zählvariable ist natürlich dann char. Hinweis: Eine innere Schleife läuft jeweils durch die ganze Zeichenkette, um den gesuchten Buchstaben zu finden.
Aufgabe 6 ("NSA ärgern - Versuch 2")
Carlchen Crypto ist sauer. Die NSA liest trotz seiner genialen Verschlüsselung immer noch seine mails. Nun hat er eine neue Idee: Er nimmt von einer Zeichenkette immer jeden zweiten Buchstaben und gibt ihn aus. Anschließend hängt er ausgehend vom zweiten Buchstaben wiederum jeden zweiten Buchstaben an. Beispiel: Aus "Deggendorf" wird (nach Umwandlung in Kleinbuchstaben) "dgedrennof". Erstelle eine Methode crypto2(), die nach Eingabe einer Zeichenkette Carlchens Idee umsetzt.
Zusatzaufgabe: Erstelle eine Methode crypto2Decode(), die nach eingabe eines mit crypto2() verschlüsselten Wortes dieses wieder dekodiert. Achtung: Es ist eine Fallunterscheidung hinsichtlich der Länge des Wortes (gerade oder ungerade) notwendig.