Übungsaufgaben 19.September 2013
Aus ProgrammingWiki
Inhaltsverzeichnis |
Aufgaben
Aufgabe 1
Welche der folgenden Bezeichner sind ungültig ?
- Hallo_Welt
- _abc
- 2test
- *hallo
- te?st
- Girokonto
- const
Aufgabe 2
Warum führt der folgende Code zu einem Compiler-Fehler ?
int x = 0; long y = 1000; x = y;
Aufgabe 3
Schreiben Sie ein Programm, das mit einem einzigen Aufruf von System.out.print eine Zeichenkette in mehreren Bildschirmzeilen ausgibt.
Benutzen Sie für diese Aufgabe und auch für alle anderen Programmaufgaben dieses Kapitel folgenden Rahmen:
public class NameDerKlasse { public static void main (String [] args ) { ... } }
Die Datei, die diesen Quelltext enthält , muss den Namen NameDerKlasse.java haben.
Aufgabe 4
Schreiben Sie ein Programm, das die Anzahl von Sekunden im Monat Januar berechnet.
Aufgabe 5
Schreiben Sie ein Programm, das ermittelt, wie hoch ein Sparguthaben von 5.000 Euro bei 7.5 \% Verzinsung nach Ablauf eines Jahres berechnet.
Aufgabe 6
Welche Werte haben die folgenden Ausdrück und welche Werte haben die Variablen nach der Auswertung, wenn a den Anfangswert 1 und b den Anfangswert 7 hat ?
- --a
- a--
- a++ + b
- b = ++ a
- a = b++
- -(a--) --(--b)
Aufgabe 7
Schreiben Sie ein Programm, das n ganze Zahlen von der Tastatur einliest und den Mittelwert in einer while-Schleife berechnet.
Aufgabe 8
Schreiben Sie ein Programm, das eine bestimmte Anzahl von Sternchen in Form eines Dreiecks auf dem Bildschirm ausgibt.
Aufgabe 9
Schreiben Sie ein Programm, das den Buchwert in Höhe von 15.000 Euro mit einem Abschreibungssatz von 40% und einem Restwert von 100 Euro geometrisch abschreibt.
Aufgabe 10
Schreiben Sie ein Programm, das eine ganze Zahl vom Typ int in Binärdarstellung ausgibt. Nutzen Sie hierzu die Bitoperatoren & und <<.
Umgang mit Operatoren
Werten Sie die folgenden logischen oder arithmetischen Ausdrücke aus. Variablen, die in einem Aufgabenteil deklariert werden, sollen dabei auch in allen folgenden Teilen verfügbar sein. Welche Ergebnisse erhalten Sie?
int i = 0;
int j = i + 7;
int k = -j;
boolean flag = true;
boolean secondFlag = !true;
flag = !flag;
i = 2 * j + k;
float f = 21.5;
float g = f * 2;
float h = 5.0 / 2;
h = (int)(5.0 / 2);
k = 5 / 2;
i = 47 % 2;
System.out.println(i > j);
j = k = 42;
System.out.println(i != j && j != k);
System.out.println(i != j || j != k);
System.out.println(flag || secondFlag && j != k);
i++; --j;
k *= 3; j /= 6;
k += ++i;
k += i++;
k >>>= 1;
k <<= 2;
System.out.println(k = 7);
System.out.println(k == 7);
i = 0xfe23;
j = 0x1f01;
j = (i & j) | 0x40;
Einfache lineare Programme
Schreiben Sie für die folgenden Aufgaben jeweils ein Java-Programm!
Aufgabe: Texte ausgeben
Geben Sie Ihren Namen, Vornamen und die E- Mail-Adresse in drei einzelnen Zeilen aus.
Aufgabe: Ein wenig Rechnen
Berechnen Sie die Summe von 17 und 4 und geben Sie das Ergebnis aus.
Aufgabe: Währungsumrechnung
Berechnen Sie, wie viel Euro der DM - Betrag 9876,54 entspricht (Kurs: 1 EUR = 1,95583 DM) Geben Sie das Ergebnis aus. Sie brauchen keine Rücksicht auf die Formatierung der Ausgabe nehmen - es kann sein, dass mehr oder weniger als zwei Nachkommastellen angezeigt werden.
Aufgabe: Eingabe von Zeichenketten
Lesen Sie Ihren Vor - und Nachnamen in String-Variablen ein und geben Sie beides in der Form 'Nachname, Vorname' wieder aus. Aufgabe: Summenberechnung
Lesen Sie zwei Zahlen ein und berechnen Sie die Summe. Die Ausgabe soll folgende Form haben: Die Summe von 123 und 234 ist 357.
Aufgabe: Vertauschen zweier Werte
Lesen Sie zwei Zahlen ein und vertauschen Sie die Werte der beiden Variablen. Beispiel: Vor dem Vertauschen hätten die Variablen a und b die Werte a=5 und b=3 , nach dem Vertauschen soll a=3 und b=5 gelten.
Aufgabe: Vertauschen ohne Hilfsvariable
Haben Sie für die Lösung der vorigen Aufgabe eine Hilfsvariable benötigt? Versuchen Sie es auch einmal ohne!
Einfache Berechnungen
Fügen Sie der folgenden Anweisung weitere Anweisungen hinzu, um die Variable totalSeconds auf zwei neue Variablen, hours und seconds aufzuteilen.
int totalSeconds = 307;
Folgende Anweisungen seien gegeben:
int seconds1 = 44; int seconds2 = 51;
Berechnen Sie den Durchschnittswert in einer float -Variable.
Programme mit Verzweigungen
Aufgabe : Sortieren von zwei Zahlen
Bringen Sie zwei eingegebene Zahlen a und b in die richtige Reihenfolge bringt ( a ≤ b ) und geben Sie die Zahlen wieder aus. Auch hier gilt, dass der Inhalt der Variablen geändert werden soll, nicht nur die Ausgabe der Werte.
Aufgabe : Schaltjahre
Schreiben Sie ein Programm, das zu einer eingegebenen Jahreszahl ermittelt, ob es sich um ein Schaltjahr handelt. Zur Erinnerung: Ein Schaltjahr gibt es dann, wenn die Jahreszahl durch 4 teilbar ist, aber nicht durch 100, oder durch 400 teilbar ist.
Aufgabe : Sortieren von drei Zahlen
Bringen Sie drei eingegebene Zahlen a,b und c in die richtige Reihenfolge bringt ( a ≤ b ≤ c ) und geben Sie die Zahlen wieder aus.
Aufgabe : Zufallszahl
Berechnen Sie eine ganzzahlige Zufallszahl im Intervall [1..1000]. Nutzen Sie dazu die in Java vordefinierte Methode Math.random(), die einen double - Wert aus dem Intervall [ 0.0, 1.0] liefert.
Aufgabe : Methode verwenden
Das Programm soll einen Euro - Betrag einlesen, um die Mehrwertsteuer erhöhen und den Gesamtbetrag in Euro und DM ausgeben. Benutzen Sie Unterprogramme ( Methoden) zur Berechnung der Mehrwertsteuer und zur Umrechnung der Währung!
Geometrische Berechnungen
Schreiben Sie ein Programm, welches Umfang und Fläche eines Kreises mit dem Radius r und das Volumen einer Kugel mit dem Radius r nach den folgenden Formeln berechnet:
Umfang: U= 2*$\pi$*r
Fläche: F = $\pi$*r*2
Volumen: V= 4\3*$\pi * r^3$
Die berechneten Werte sollen mit System.out.println() ausgegeben werden. Welche Werte er- geben sich für r = 4.0;7.1;18.5 ?
Programme mit Schleifen
Aufgabe : Summe mit while - Schleife
Berechnen Sie die Summe der Zahlen von m bis n ( m und n werden eingelesen ) und geben Sie diese aus. Benutzen Sie eine Methode mit while - Schleife!
Aufgabe : Andere Schleifenarten
Lösen Sie das vorige Problem mit einer for - bzw. einer do...while - Schleife! Schreiben Sie dazu zwei neue Methoden und überprüfen Sie im Programm, ob alle drei Methoden für gleiche Eingaben den gleichen Wert berechnen!
Aufgabe : Komfortablerer Währungsrechner
Realisieren Sie einen einfachen Währungsrechner. Geben Sie dazu zunächst die beiden Währungsnamen, dann den Umrechnungskurs ein. Danach sollen mehrere Beträge umgerechnet werden, bis der Benutzer 0 ( null ) eingibt.
Aufgabe : Weihnachtsbäume
Geben Sie stilisierte “Weihnachtsbäume” mit “Stamm” aus. Lassen Sie vom Benutzer die gewünschte die Höhe h eingeben und den “Baum” über eine Methode mit einem Parameter ( der Höhe) ausgeben. Das Ergebnis, z.B. für z.B. h = 5, soll so aussehen:
* *** ***** ******* ********* #
Aufgabe : Zahlworte
Erzeugen Sie Zahlworte für die Zahlen 0...999.999.999. Beispiel: 1234567 → einemillionzweihundertvierundreißigtausendfünundertsiebenundsechzig. Zerlegen Sie die Aufgabe in Teile, z.B. Zahlen bis 9, Zahlen bis 99, Zahlen bis 999 etc. ausgeben, und verwenden Sie diese Teile, um möglichst wenig doppelt zu programmieren. Zahlen außerhalb des Bereichs sollen zurückgewiesen werden.
Noch mehr Aufgaben
Aufgabe 1
In dieser Aufgabe sollen verschiedene Texte von Johann Wolfgang von Goethe mit Texten von Karl May verglichen werden. Der Vergleich soll mit Hilfe eines Programms geschehen, welches in Java zu schreiben ist und welches für einen bestimmten Text ausgibt:
- aus wievielen Wörtern der Text besteht
- welches die 20 Wörter sind, die am häufigsten verwendet wurden
- wie viele unterschiedliche Wörter benutzt wurden
Hinweise
Testet euer Programm erst mit selbstgeschrieben Texten, lasst dann die Texte der genannten Autoren durchlaufen. Die zu vergleichenden Texte müssen natürlich runtergeladen werden. Ihr findet Texte dieser Autoren unter Wikisource: [[1]] [[2]]
Aufgabe 2
Diese Aufgabe stellt eine etwas erweitere Version von HelloWorld dar. Als Vorbild dient das Unix-Programm Cowsay. Diesem Programm übergibt man einen Text und als Ergebnis erhält man eine kleines Bild (als ASCII-Art) auf der Konsole, welches den übergeben Text enthält. Dies könnte so aussehen wie unter Beispiel zu sehen. Cowsay könnt ihr hier ausprobieren: [[3]]
1) Als ersten Schritt könnt ihr mit mehreren System.out.println("..."); erstmal ein wenig herumprobieren und versuchen eine ASCII Graphik, die ihr euch ausgedacht habt, auszugeben. Natürlich könnt ihr auch die aus dem Beispiel nehmen.
2) Als zweiten Schritt könnt ihr probieren, auch etwas Text mit in die Graphik einzubinden, wie in dem ersten Beispiel zu sehen. Fuer Mehrdenker: Beachtet, dass wie bei der orginal Cowsay/Cowthink die Laenge des Strings auch beruecksichtigt wird um den String mit "_" (oder anderen Zeichen) zu unter- bzw oberstreichen. Beispiel
_____________ < Java rocks! > ------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
Hinweise
Wenn ihr auf der Konsole ein Backslash "\" ausgeben wollt, dann müsst ihr dieses Zeichen, da es selbst ein sogenanntes Escapezeichen ist, mit einem Backslash "escapen". Der Code um ein Backslash auszugeben, sieht also so aus.
System.out.println("\\");
siehe auch: weitere Escape Sequenzen auf de.wikipedia.org
Tipps
Lesen von der Konsole
Wenn ihr beim Ausführen eures Programms in der Konsole ein Parameter (also ein Wort) mit übergebt, so findet ihr ihn an Position [0] im String-Array eurer main-Methode wieder.
Beispiel:
java cowsay rocks
-> arguments[0] enthält rocks.
Bei einem Satz muesst ihr diesen in Hochkomma angeben.
Beispiel:
java cowsay "Java Rocks"
-> arguments[0] enthaelt nun Java Rocks
Aufgabe 3
Es soll ein Programm geschrieben werden, das einen Kassenbon auf der Konsole anzeigt (mit System.out.println). Am Anfang des Programmes werden in Form von Variablen folgende Werte festgelegt:
- Anzahl von mindestens vier verschiedenen Waren, die gekauft werden sollen.
- Einzelpreise der Waren. (Ja, jede Warensorte hat einen anderen Preis)
- Inhalt der Brieftasche.
Das Programm soll den Gesamtpreis der eingangs festgelegten Waren ermitteln. Übersteigt der Gesamtpreis den Inhalt der Brieftasche, wird der Benutzer auf den fehlenden Betrag hingewiesen. Reicht der Inhalt der Brieftasche für den Einkauf aus, wird ein Kassenbon ausgegeben, der die gekauften Waren mit Anzahl und Preis sowie am Ende den Gesamtpreis auflistet.
Hinweis: Erstellt zuerst die Ausgabe des Kassenbons und füllt sie anschließend mit Berechnungen und der Fallunterscheidung.
Beispiel wie ein Kassenbon aussehen könnte:
Wurst 1 x 4.20 EUR 4.20 EUR Käse 1 x 2.30 EUR 2.30 EUR Brot 1 x 2.10 EUR 2.10 EUR DVD 2 x 12.00 EUR 24.00 EUR ---------------------------------- Gesamt 32.60 EUR Gegeben 50.00 EUR
Zurück 17.40 EUR
Aufgabe 4
Erstellt eine Kopie eures soeben geschriebenden Programmes.
Verändert das Programm so, dass nun versucht wird, mehrfach Produkte eines Typs (z.B. Wurst) hintereinander zu kaufen, und abgebrochen wird, wenn das Geld für keine weiteren Einkäufe mehr ausreicht. Danach soll für diesen Einkauf der Kassenbon ausgegeben werden.
Hinweis: Viele, viele Fallunterscheidungen hintereinander! Natürlich ließe sich ein Einkauf, bis das Geld nicht mehr ausreicht, besser mit einer Schleife realisieren, die allerdings erst in Vorlesung 2 behandelt wird - hier ist auch "Spagetticode", d.h. viele gleiche Befehle hintereinander, erlaubt.
Aufgabe 5
Eindimensionale Arrays
Zwei eindimensionale Arrays werden wie folgt deklariert und initialisiert.
- Was geben die anschließenden "System.out.println(...)" jeweils aus?
- Überprüfe deine Erwartungen, indem du die Codefragmente in einem eigenen Programm ausführst.
int[] meinArray1 = new int[5]; meinArray1[0] = 0; meinArray1[1] = 1; meinArray1[2] = 2; meinArray1[3] = 3; meinArray1[4] = 4;
int[] meinArray2 = new int[3]; meinArray2[0] = 0; meinArray2[1] = 1; meinArray2[2] = 2;
//1. System.out.println(meinArray1.length);
//2. System.out.println(meinArray2.length);
//3. System.out.println("Ergebnis:"+meinArray1[1]);
//4. System.out.println("Ergebnis:"+meinArray2[1]);
//5. System.out.println("Ergebnis:"+meinArray1[3]);
//6. System.out.println("Ergebnis:"+meinArray1[4]);
//7. System.out.println(meinArray1.length-1);
//8. System.out.println(meinArray2.length-1);
//9. System.out.println("Ergebnis:"+meinArray1[0]);
//10. System.out.println("Ergebnis:"+meinArray2[0]);
Zweidimensionale Arrays
Ein zweidimensionales Array wird wie folgt deklariert und initialisiert.
- Wie kann man sich ein zweidimensionales Array vorstellen?
- Was geben die anschließenden "System.out.println(...)" jeweils aus?
- Überprüfe deine Erwartungen, indem du die Codefragmente in einem eigenen Programm ausführst.
int[][] meinArray3 = new int[2][3]; meinArray3[0][0] = 1; meinArray3[1][1] = 2; meinArray3[0][2] = 1; meinArray3[1][0] = 2; meinArray3[0][1] = 1; meinArray3[1][2] = 2;
//1. System.out.println(meinArray3[0][0]+meinArray3[0][1]+meinArray3[0][2]);
//2. System.out.println(meinArray3[1][0]+meinArray3[1][1]+meinArray3[1][2]);
Dreidimensionale Arrays
Ein dreidimensionales Array wird wie folgt deklariert und initialisiert.
- Wie kann man sich ein dreidimensionales Array vorstellen ?
- Was geben die anschließenden "System.out.println(...)" jeweils aus?
- Überprüfe deine Erwartungen, indem du die Codefragmente in einem eigenen Programm ausführst.
int[][][] meinArray3D = new int[2][2][2]; meinArray3D[0][0][0] = 1; meinArray3D[0][1][1] = 2; meinArray3D[0][1][0] = 2; meinArray3D[0][0][1] = 1;
meinArray3D[1][0][0] = 3; meinArray3D[1][1][1] = 4; meinArray3D[1][1][0] = 4; meinArray3D[1][0][1] = 3;
//1. System.out.println(meinArray3D[0][0][0]+meinArray3D[0][0][1]);
//2. System.out.println(meinArray3D[0][1][0]+meinArray3D[0][1][1]);
//3. System.out.println(meinArray3D[1][0][0]+meinArray3D[1][0][1]);
//4. System.out.println(meinArray3D[1][1][0]+meinArray3D[1][1][1]);