Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 10. Blatt Für den und

Ähnliche Dokumente
Programmierstarthilfe SS 2009 Fakultät für Ingenieurwissenschaften und Informatik 4. Blatt Für die Woche vom bis zum 22.5.

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 5. Blatt Für den 26. und

Programmierstarthilfe SS 2010 Fakultät für Ingenieurwissenschaften und Informatik 6. Blatt Für die Woche vom bis zum 4.6.

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2016/17. Vorbereitende Aufgaben

Methoden und Funktionen

Programmierung für Mathematik HS11

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 9. Blatt Für den 23. und

Erste Java-Programme (Arrays und Schleifen)

ÜBUNGS-BLOCK 7 LÖSUNGEN

Programmierung für Mathematik HS10 Übung 8

Ausnahmen. Exceptions. Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten. Dr. Beatrice Amrhein

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Primzahlen und Programmieren

Erste Java-Programme (Scopes und Rekursion)

Informatik B von Adrian Neumann

Programmiervorkurs Einführung in Java Tag 3

Übungsblatt 2. Java Vorkurs (WS 2015)

1 Organisatorisches. 2 Compilezeit- und Laufzeitfehler. 3 Exceptions. 4 Try-Catch-Finally

Exceptions. CoMa-Übung VI TU Berlin. CoMa-Übung VI (TU Berlin) Exceptions / 19

Exceptions. CoMa-Übung VII TU Berlin. CoMa-Übung VII (TU Berlin) Exceptions / 1

Java : Fehlerbehandlung.

Einstieg in die Informatik mit Java

Programmierung für Mathematik HS10

Allgemeine Informatik II SS :30-13:30 Uhr

Vorsemesterkurs Informatik Übungsaufgaben. Tag 4a - Python

Klausur Grundlagen der Programmierung

Ausnahmen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 27.6.

Übungspaket 22 Rekursive Funktionsaufrufe

Vorkurs Informatik WiSe 17/18

Objektorientierung. Programmierstarthilfe WS 2010/11 Fakultät für Ingenieurwissenschaften und Informatik

Programmierkurs Java

Tag 4 Repetitorium Informatik (Java)

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 2. Blatt Für den 28. und

1. Die rekursive Datenstruktur Liste

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Android will doch nur spielen. Java Übung

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Einführung Java Programmieren in Java Arrays Schleifen Fehler. Einführung in Java. Arne Hüffmeier. Michelle Liebers, Dennis Hoffmann

Algorithmen, Datenstrukturen und Programmieren I WS 2001/2002

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)

Institut für Informatik und Angewandte Kognitionswissenschaften

Grundlagen der Fehlerbehandlung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 06: Ausnahme- und Fehlerbehandlung in Java.

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

7. Arrays. Beim Deklarieren und Initialisieren der Liste bräuchte man oft zueinander sehr ähnlichen Code:

Arrays und Schleifen

Klausur zur Vorlesung Informatik 1 im Wintersemester 2014/2015 am 18. Februar Bearbeitungszeit: 90 Minuten Gesamtpunktezahl: 90 Punkte

Rekursive Funktionen (1)

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Parallele und funktionale Programmierung Wintersemester 2013/ Übung Abgabe bis , 16:00 Uhr

Rekursive Funktionen (1)

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Objektorientiertes Programmieren (Java)

Informatik II Übung 2

Informatik Praktikum 5

Algorithmen und Datenstrukturen 07

9. Ausnahmebehandlung

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2016/17. Vorbereitende Aufgaben

Programmierung für Mathematik (HS13)

Programmierung für Mathematik (HS13)

Aufgabenblatt 4. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Übungsblatt 2. Java Vorkurs (WS 2017)

Einführung in die Informatik

Selectionsort Beispiel

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3

Anregungen zu Übung 2

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Programmierpraktikum

Übungen zum Bioinformatik-Tutorium. Blatt 3

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

pue06 November 25, 2016

Zentralübung Grundlagen der Programmierung

Tag 4 Repetitorium Informatik (Java)

Wissenschaftliches Rechnen

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Lehrstuhl für Angewandte Informatik I SS 2003 Prof. Dr. Andreas Henrich 23. September Konzepte der Programmierung. Klausur

Ausnahmen (Exceptions)

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Methoden-Expertin. Aufgabe 1. Das Neue. Lösung in JavaKara. Puzzle: Expertin D

Intensivübung zu Algorithmen und Datenstrukturen

Programmierung und Angewandte Mathematik

Vorkurs Informatik WiSe 16/17

Übung zur Vorlesung EidP (WS 2018/19) Blatt 4

Vorlesung 10. Sitzung Grundlegende Programmiertechniken

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

OOP Aufgabenblatt 7 6. Dezember 2013

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Komponenten-basierte Entwicklung Teil 4: Exceptions

ÜBUNGS-BLOCK 8 AUFGABEN

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten. Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise!

Probeklausur zur Vorlesung

Transkript:

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 10. Blatt Für den 30.6. und 1.7.2008 Organisatorisches Um auf die Mailingliste aufgenommen zu werden schicke einfach eine Mail an guido. de-melo@uni-ulm.de. Die Webseiten zur Veranstaltung sind unter http://www.uni-ulm.de/in/mi/lehre/ ss2008/programmierstarthilfe.html zu finden. 1. Rekursion Rekursion kommt eigentlich aus der Mathematik, und und ist eine andere Sichtweise auf Funktionen. Manche sagen auch sie dient hauptsächlich der Verwirrung von Studenten ;). Zum Beispiel { 0, falls x = 0 f(x) = x N f(x 1) + 1, sonst definiert einfach nur f(x) = x. Wichtig, um die Rekursion zu verstehen ist der so genannte Basisfall (in diesem Fall x = 0), denn auf diesem baut die Rekursion auf. Oft wird der Basisfall auch Abbruchbedingung genannt, weil dies die Bedingung ist die erfüllt sein muss, damit die Rekursion abgebrochen wird. Den Basisfall/Abbruchbed. sollte man sich immer zuerst überlegen. Dann kommt der Rekursionsfall (auch Rekursionsschritt genannt). In diesem Fall wird die gleiche Funktion f mit veränderten Parametern (x 1) nochmals aufgerufen und dann um eins erhöht. Die angegebene Formel lässt sich folgendermaßen als Methode implementieren: 1 i n t f ( i n t x ){ 2 i f ( x == 0) { 3 return 0 ; 4 } e l s e { 5 return f ( x 1)+1; 6 } 7 }

Ein einfaches Beispiel: Wir möchten f(2) berechnen. Anschaulich sieht das dann so aus: f(2) = f(1) + 1 = (f(0) + 1) + 1 = (0 + 1) + 1 = 2 f(2) =2 f(1) +1=2 f(0)+1=1 0 Hier sieht man, dass zwei Rekursionsschritte bis zur Abbruchbedingung ausgeführt werden, und beim wiederaufsteigen das Ergebnis um 1 erhöht wird. 2. Exceptions In allen Computerprogrammen kommt es manchmal zu Fehlern und Ausnahmesituationen. In Java wird in einem solchen Fall eine sogenannte Exception ausgelöst. Wenn wir zum Beispiel mit einer for-schleife Array-Werte auslesen und dabei nicht aufpassen, versuchen wir ein Feld zu viel zu lesen: 1 i n t [ ] a r r = new i n t [ 1 5 ] ; 2 f o r ( i n t i = 0 ; i <= a r r. l e n g t h ; i ++) { 3 System. o u t. p r i n t ( a r r [ i ] ) ; 4 } Deswegen meldet Java: Exception in thread "main" java.lang.arrayindexoutofboundsexception: 15 at MeineKlasse.main(MeineKlasse.java:15) ArrayIndexOutOfBoundsException zeigt uns dabei den Fehlertyp an, um den wir uns kümmern müssen. Danach steht die Zeile, in der der Fehler aufgetreten ist. Oft können wir solche Fehler nicht so einfach wie hier im vorfeld korrigieren. Zum Beispiel gibt es viele Java-API-Methoden, die mitteilen, dass sie eventuell einen Fehler auslösen könnten. Nach dem Methodennamen steht dann in der Dokumentation throws...exception. 2

In solchen Fällen müssen wir uns darum kümmern eine Fehlerbehandlung zu schreiben. Dazu bietet uns Java das Konstrukt try / catch: 1 t r y { 2 / / Code von oben 3 } 4 catch ( E x c e p t i o n e ) { 5 System. o u t. p r i n t l n ( Das war zu v i e l ) ; 6 } Tritt im try-block eine Exception auf, wechselt das Programm in den catch-teil, wo dann steht, was im Fehlerfall zu tun ist. 3. Aufgaben 3.1. Summenbildung rekursiv Es soll eine Methode summiere(int n) geschrieben werden, die den Wert n i=1 i berechnen und zurückgeben soll. a) Implementiere zunächst die Methode iterativ, also mit einer Schleife. b) Überlege nun eine rekursive Lösung für das Problem. Mache dir zunächst den Basisfall auf einem Blatt Papier auf, wie die Summe rekursiv entsteht. Gibt es mehrere Möglichkeiten, aufzusummieren? c) Implementiere nun die rekursive Methode in Java und teste sie. 3.2. Fakultät rekursiv Es soll eine Methode fakultaet(int n) geschrieben werden, die den Wert n!, also 1 2... n, berechnen und zurückgeben soll. a) Überlege dir eine rekursive Lösung für das Problem. Mache dir zunächst den Basisfall auf einem Blatt Papier auf, wie die Fakultät rekursiv entsteht. Was ist dir lieber: 1 2..., oder n n 1...? b) Implementiere nun die rekursive Methode in Java und teste sie. c) Implementiere zum Schluss die Methode iterativ, also mit einer Schleife. 3

3.3. Rekursiver Palindromtest Es soll eine Methode istpalindrom(string wort) geschrieben werden, die den übergebenen String rekursiv auf Symmetrie testet und zurückgeben soll, ob es sich um ein Palindrom handelt oder nicht. a) Mache dir zunächst Gedanken darüber, wie du bisher auf Symmetrie getestet hast und wie du rekursiv vorgehen könntest. Wichtig sind ein korrekter Basisfall sowie Rekursionsfälle. Wie lange musst du rekursiv absteigen? Wann kann abgebrochen werden? Wie transportierst du das Zwischenergebnis? b) Implementiere die Methode nun in Java. Hierfür wird es nützlich sein, eine überladene Methode istpalindrom(...) zu schreiben, in der du mehr Parameter mitgeben kannst. Die Methode istpalindrom(string wort) ruft dann die überladene Methode mit Startwerten auf. 3.4. Array Index Out Of Bounds Exception Diese Ausnahme ist dir sicherlich bei deinen ersten Programmen mit Arrays begegnet. Eigentlich sollte sie in einem guten Programm gar nicht erst auftreten und sollte somit auch nicht mit try-catch gefangen werden. a) Erstelle ein Array mit zwei Integer-Werten und prüfe was passiert, wenn du auf den dritten Wert zugreifen möchtest. b) Schreibe nun einen try-catch-block um die Befehlszeile, in der auf das nicht existierende Element zugegriffen wird. c) Benutze nun Math.random(), um einen zufälligen Index zwischen 0 und 2 zu erzeugen und greife auf das Element mit diesem Index zu. Dieses soll ausgegeben werden, sofern es existiert. Ansonsten soll eine entsprechende Fehlermeldung ausgegeben werden. 4. Bonusaufgaben 4.1. Produkt rekursiv Du kannst diese Aufgabe auch überspringen, wenn du denkst dass du das Prinzip von Rekursion verstanden hast Es soll eine Methode produkt(int a, int b) geschrieben werden, die den Wert b i=a i, berechnen und zurückgeben soll. a) Überlege dir eine rekursive Lösung für das Problem. Mache dir zunächst den Basisfall auf einem Blatt Papier auf, wie das Produkt rekursiv entsteht. 4

b) Implementiere nun die rekursive Methode in Java und teste sie. c) Implementiere zum Schluss die Methode iterativ, also mit einer Schleife. 4.2. Potenzierung rekursiv Es soll eine Methode potenziere(int a, int b) geschrieben werden, die den Wert a b berechnen und zurückgeben soll. a) Implementiere zunächst die Methode iterativ, also mit einer Schleife. b) Implementiere die Methode mithilfe der Methode Math.pow(double a, double b). Schau hierfür in die API-Dokumentation, wie diese Methode verwendet wird. c) Überlege nun eine rekursive Lösung für das Problem. Mache dir zunächst den Basisfall für eine Abbruchbedingung klar. Wie muss nun der Rekursionsfall aussehen? Skizziere den Ablauf der rekursiven Berechnung auf einem Blatt Pappier. d) Implementiere nun die rekursive Methode in Java und teste sie. e) Es gilt a 2n = a n a n. Kannst du damit deinen Algorithmus noch optimieren? 4.3. Rekursiver Würfel Nun soll eine Methode wuerfeln(int anzahl) programmiert werden, die alle möglichen Kombinationen bei einem Würfel mit sechs Seiten und einer gegeben Anzahl von Würfelnerzeugemnund ausgeben soll. Bei der Anzahl drei sollen zum Beispiel alle Ergebnisse 1-1-1, 1-1-2,... 6-6-5, 6-6-6 ausgegeben werden. a) Sicher kennst du aus der Schule noch Baumdiagramme für Wahrscheinlichkeiten. Erstelle auf Papier ein solches Diagramm für zweimaliges Würfeln. Ignoriere die Wahrscheinlichkeiten und beschrifte die Blätter mit der entstandenen Kombination. b) Implementiere nun die Methode wuerfeln(int anzahl) rekursiv. Wie oft musst du pro Rekursionschritt verzweigen? 4.4. Primfaktorzerlegung a) Schreibe ein Programm, welches eine benutzerspezifizierte natürliche Zahl rekursiv in ihre Primfaktoren zerlegt und diese ausgibt. Überlege dir dazu zunächst, wie man prüfen kann, ob eine Zahl durch eine andere teilbar ist. Wie sieht dann der Rekursionschritt aus? Was ist der Basisfall? b) Vollziehe auf dem Papier nach, was bei der Primfaktorzerlegung von 42 passiert und überprüfe deine Überlegungen durch Ausgaben in deinem Programm. 5