28.12.2013 Aufrufe

Übungen zu Algorithmen - Universität Osnabrück

Übungen zu Algorithmen - Universität Osnabrück

Übungen zu Algorithmen - Universität Osnabrück

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Institut für Informatik <strong>Universität</strong> <strong>Osnabrück</strong>, 29.10.2013<br />

Prof. Dr. Oliver Vornberger<br />

http://www-lehre.inf.uos.de/~ainf<br />

Nils Haldenwang, M.Sc.<br />

Testat bis 06.11.2013, 14:00 Uhr<br />

Nicolas Neubauer, M.Sc.<br />

<strong>Übungen</strong> <strong>zu</strong> <strong>Algorithmen</strong><br />

Wintersemester 2013/2014<br />

Blatt 2: Schleifen<br />

Aufgabe 2.1: Unix-Kommandos (0 Punkte)<br />

Machen Sie sich mit den folgenden UNIX-Kommandos vertraut:<br />

Kommando<br />

man vi<br />

ls -l<br />

mkdir Blatt1<br />

rmdir Blatt1<br />

cd Blatt1<br />

cd ..<br />

cd<br />

pwd<br />

cp .<br />

javac Collatz.java<br />

java Collatz<br />

Erklärung<br />

Ausgabe der Manualseite <strong>zu</strong>m Kommando vi.<br />

Auflisten aller Dateien und Verzeichnisse in Tabellenform (list).<br />

Anlegen des Verzeichnisses Blatt1 (make directory).<br />

Löschen des (leeren) Verzeichnisses Blatt1 (remove directory).<br />

Wechsel in das Verzeichnis Blatt1 (change directory).<br />

Wechsel in das übergeordnete Verzeichnis.<br />

Wechsel in das Heimatverzeichnis.<br />

Gibt das aktuelle Verzeichnis aus (print working directory).<br />

Kopiert eine Datei in das aktuelle Verzeichnis.<br />

Übersetzen der Programmdatei Collatz.java, Ergebnis ist<br />

die Datei Collatz.class.<br />

Ausführen des Programms Collatz.<br />

Legen Sie sich am besten für jedes Aufgabenblatt ein Verzeichnis an.<br />

Um das Grundgerüst eines Java-Programms im vi <strong>zu</strong> erzeugen, geben Sie _head_ im Einfüge-Modus<br />

ein und schließen Sie den Befehl mit einem Leerzeichen ab.<br />

Sollten Sie eine Endlosschleife verursacht haben, können Sie Ihr Programm mit der Tastenkombination<br />

Ctrl c abbrechen. Schließen Sie nicht achtlos das Terminalfenster, da der Prozess ansonsten im<br />

Hintergrund weiterläuft.<br />

Aufgabe 2.2: Fragen (30 Punkte)<br />

Beantworten Sie Ihrer Tutorin beziehungsweise Ihrem Tutor Fragen <strong>zu</strong> den Inhalten der Veranstaltung.


Aufgabe 2.3: Quersumme (15 Punkte)<br />

Schreiben Sie ein Programm Quersumme.java, welches eine ganze Zahl n > 0 einliest und die<br />

Quersumme der Zahl berechnet und ausgibt. Die Quersumme bezeichnet die Summe der einzelnen<br />

Ziffern.<br />

Beispiele:<br />

123 -> 6<br />

23 -> 5<br />

42 -> 6<br />

Musterlösung:<br />

/****************************** Quersumme.java *************************/<br />

import AlgoTools.IO;<br />

/**<br />

* Liest eine Zahl >= 0 ein und gibt die Quersumme der Zahl aus.<br />

*/<br />

public class Quersumme {<br />

public static void main(String[] args) {<br />

int zahl;<br />

do {<br />

zahl = IO.readInt("Zahl > 0 <strong>zu</strong>r Berechnung Quersumme eingeben: ");<br />

} while(zahl 0) {<br />

// letzte Stelle aufaddieren<br />

quersumme = quersumme + zahl % 10;<br />

}<br />

// letzte Stelle durch ganzzahliges Teilen abschneiden<br />

zahl = zahl / 10;<br />

}<br />

}<br />

IO.println("Die Quersumme ist: " + quersumme);<br />

Aufgabe 2.4: Tabelle (20 Punkte)<br />

Schreiben Sie ein Java-Programm Tabelle.java, das eine Zahl k mit 1 ≤ k ≤ 15 einliest und für alle Paare<br />

(x,y) ∈ {1,...,k} × {1,...,k} den Wert x%y ausgibt. Benutzen Sie für die Darstellung der Ergebnisse eine<br />

Tabelle, in der Sie die Werte rechtsbündig eintragen.<br />

Beispiel für k = 4:<br />

2


| 1 2 3 4<br />

---+-----------------<br />

1| 0 1 1 1<br />

2| 0 0 2 2<br />

3| 0 1 0 3<br />

4| 0 0 1 0<br />

Achten Sie darauf, dass der Benutzer keinen nicht erlaubten Wert eingeben kann.<br />

Musterlösung:<br />

/****************************** Tabelle.java ********************************/<br />

import AlgoTools.IO;<br />

/**<br />

* Liest eine natuerliche Zahl k kleinergleich 15 ein und gibt für alle<br />

* Paare (x,y) aus {0,...,k-1}x{0,...,k-1} den Wert x % y aus.<br />

*/<br />

public class Tabelle {<br />

public static void main(String[] args) {<br />

int abstand = 4; //Groesse einer Spalte<br />

// Benutzereingabe mit Validierung<br />

int k;<br />

do {<br />

k = IO.readInt("Bitte eine Zahl zwischen 1 und 15 eingeben: ");<br />

} while (k 15);<br />

IO.println();<br />

// Leerzeichen in die linke obere Ecke<br />

IO.print("|", abstand);<br />

// Tabellenkopf<br />

for (int spalte = 1; spalte


IO.print("-");<br />

}<br />

IO.println();<br />

// aeussere Schleife fuer Zeilen<br />

for (int zeile = 1; zeile


} while (zahl < 10 || zahl > 999);<br />

//Ziffern<br />

int hunderter = zahl / 100;<br />

int zehner = (zahl % 100) / 10;<br />

int einer = zahl % 10;<br />

//Versuche die Ausgabe als dreihundert-zweiund-vierzig<br />

//Hunderter-Stelle<br />

switch (hunderter) {<br />

case 0: break; //nichts ausgeben bei 0<br />

case 1: IO.print("hundert"); break;<br />

case 2: IO.print("zweihundert"); break;<br />

case 3: IO.print("dreihundert"); break;<br />

case 4: IO.print("vierhundert"); break;<br />

case 5: IO.print("fuenfhundert"); break;<br />

case 6: IO.print("sechshundert"); break;<br />

case 7: IO.print("siebenhundert"); break;<br />

case 8: IO.print("achthundert"); break;<br />

case 9: IO.print("neunhundert"); break;<br />

}<br />

default:<br />

IO.println("Fehler: Hunderter kann nicht umgewandelt werden");<br />

break;<br />

//Sonderfaelle (elf, zwoelf...) und Einer-Stelle<br />

switch (zehner) {<br />

case 1: //Sonderfaelle<br />

switch (einer) {<br />

case 0: IO.print("zehn"); break;<br />

case 1: IO.print("elf"); break;<br />

case 2: IO.print("zwoelf"); break;<br />

case 3: IO.print("dreizehn"); break;<br />

case 4: IO.print("vierzehn"); break;<br />

case 5: IO.print("fuenfzehn"); break;<br />

case 6: IO.print("sechzehn"); break;<br />

case 7: IO.print("siebzehn"); break;<br />

case 8: IO.print("achtzehn"); break;<br />

case 9: IO.print("neunzehn"); break;<br />

}<br />

break;<br />

5


case 0: case 2: case 3: case 4: case 5:<br />

case 6: case 7: case 8: case 9:<br />

switch(einer) {<br />

case 0: break; //nichts ausgeben<br />

case 1: IO.print(zehner == 0 ? "eins": "ein"); break;<br />

case 2: IO.print("zwei"); break;<br />

case 3: IO.print("drei"); break;<br />

case 4: IO.print("vier"); break;<br />

case 5: IO.print("fuenf"); break;<br />

case 6: IO.print("sechs"); break;<br />

case 7: IO.print("sieben"); break;<br />

case 8: IO.print("acht"); break;<br />

case 9: IO.print("neun"); break;<br />

default:<br />

IO.println("Fehler: Einer kann nicht umgewandelt werden");<br />

break;<br />

}<br />

}<br />

break;<br />

default:<br />

IO.println("Fehler: Einer/Sonderfall kann nicht umgewandelt" +<br />

" werden");<br />

break;<br />

//Verbindung -und- wenn Einer und Zehner getrennt werden muessen<br />

if(einer>= 1 && zehner >= 2) {<br />

IO.print("und");<br />

}<br />

//Zehner-Stelle<br />

switch(zehner) {<br />

//10er sind schon behandelt, bei 0 nichts ausgeben<br />

case 0: case 1: break;<br />

case 2: IO.print("zwanzig"); break;<br />

case 3: IO.print("dreissig"); break;<br />

case 4: IO.print("vierzig"); break;<br />

case 5: IO.print("fuenfzig"); break;<br />

case 6: IO.print("sechszig"); break;<br />

case 7: IO.print("siebzig"); break;<br />

case 8: IO.print("achtzig"); break;<br />

case 9: IO.print("neunzig"); break;<br />

default:<br />

IO.println("Fehler: Zehner kann nicht umgewandelt werden");<br />

break;<br />

6


}<br />

}<br />

}<br />

IO.println(); //Absatz fuer die Optik<br />

7

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!