Übungsaufgaben 19.September 2013

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Aufgaben

Aufgabe 1

Welche der folgenden Bezeichner sind ungültig ?

  1. Hallo_Welt
  2. _abc
  3. 2test
  4. *hallo
  5. te?st
  6. Girokonto
  7. 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 ?

  1. --a
  2. a--
  3. a++ + b
  4. b = ++ a
  5. a = b++
  6. -(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:

  1. aus wievielen Wörtern der Text besteht
  2. welches die 20 Wörter sind, die am häufigsten verwendet wurden
  3. 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.

  1. Was geben die anschließenden "System.out.println(...)" jeweils aus?
  2. Ü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.

  1. Wie kann man sich ein zweidimensionales Array vorstellen?
  2. Was geben die anschließenden "System.out.println(...)" jeweils aus?
  3. Ü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.

  1. Wie kann man sich ein dreidimensionales Array vorstellen ?
  2. Was geben die anschließenden "System.out.println(...)" jeweils aus?
  3. Ü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]);
Persönliche Werkzeuge