Aufgabenblatt: Methoden - rekursiv

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

Programmierkurs Java

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Inf 12 Aufgaben

Ein erstes Java-Programm

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Einführung in die Java- Programmierung

5. Tutorium zu Programmieren

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems

Dr. Monika Meiler. Inhalt

1. Der Einstieg in Java. Was heißt Programmieren?

Praktische Informatik I Der Imperative Kern Mathematiknachhilfe

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Primitive Datentypen

Übungsblatt 3: Algorithmen in Java & Grammatiken

Einführung in die Programmierung für Wirtschaftsinformatik

Klausur zur Einführung in die objektorientierte Programmierung mit Java

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

4 Codierung nach Viginere (Lösung)

Liebe Leserin, lieber Leser, in der ersten Auflage von Programmieren lernen mit Java von Hans- Peter Habelitz sind einige Fehler zu korrigieren.

Client-Server-Beziehungen

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Sie müssen den Test bis 20:00 Uhr am Abgabetag dieses Übungszettels absolviert haben.

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Übungen Programmieren 1 Felix Rohrer. Übungen

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Einführung in die Informatik I

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Dr. Monika Meiler. Inhalt

Einführung in die Java- Programmierung

Institut fu r Informatik

Informatik Repetitorium SS Volker Jaedicke

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Objektorientierte Programmierung

Teil 1: Grundeigenschaften von Rechnern und Software

Studentische Lösung zum Übungsblatt Nr. 7

Probeklausur: Programmierung WS04/05

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

5.5.8 Öffentliche und private Eigenschaften

Zur Vereinfachung betrachten wir nun nur noch Funktionen f, die einen Funktionswert f nµberechnen. Sie werden alle in einer Tabelle dargestellt:

Musterlösungen zur Klausur Informatik 3

1. Grundlegende Konzepte in Java (6 Punkte)

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Programmentwicklung I für Hörer anderer Fachrichtungen -Wintersemester 2003/04- Abschlussklausur

Java Kurs für Anfänger Einheit 5 Methoden

Aufgabe 1. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Breiten- und Tiefensuche in Graphen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

von Anja Austermann Drag and Drop

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Algorithmen und Datenstrukturen

Kurs: Programmieren in Java

KV Software Engineering Übungsaufgaben SS 2005

MATHEMATIK PROGRAMMIEREN MIT PYTHON

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Kapitel 2. Methoden zur Beschreibung von Syntax

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Angewandte Mathematik und Programmierung

Einführung in die Java- Programmierung

Programmierung 2. Dynamische Programmierung. Sebastian Hack. Klaas Boesche. Sommersemester

1. Der Einstieg in Java

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

7. Textfelder zur Zahleneingabe

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Java Einführung Abstrakte Klassen und Interfaces

Distributed Computing Group

5.4 Klassen und Objekte

EndTermTest PROGALGO WS1516 A

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Programmieren in Java

II.1.1. Erste Schritte - 1 -

Java programmieren: Konsolen-Programme

Institut fu r Informatik

Abschnitt 9: Schnittstellen: Interfaces

Kapitel 6. Vererbung

Programmieren in Java

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Visual Basic / EXCEL / Makroprogrammierung Unterrichtsreihe von Herrn Selbach

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Überblick. Lineares Suchen

Teilbarkeit von natürlichen Zahlen

Kapitel 6. Vererbung

Java-Schulung Grundlagen

Kapitel 6. Vererbung

Propädeutikum zur Programmierung

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

3. Grundregeln für die Java-Programmierung

In dieser Aufgabe sollen Teile eines kleinen Pong-Spiels analysiert und implementiert werden. Gegeben sei dazu das folgende Szenario:

Transkript:

Aufgabenblatt: Methoden - rekursiv- Seite 1 Aufgabenblatt: Methoden - rekursiv (1.) Wird noch erstellt! Lösen Sie die folgenden Aufgaben indem Sie: - Basis und Rekursive Bedingung formulieren! - die vorgegebene Methode programmieren - ein Rahmenprogramm erstellen, um die Funktion zu testen, falls dies nicht in der Aufgabe formuliert ist! - das fertige Programm mit F7 mit kleinen(!) Aufrufewerte der rekursiven Funktion durchlaufen lassen! VERBINDLICH: Einrückungen und sinnvolle Namensgebung(mindestens 3 Buchstaben!) der Variablen! (2.) (a.) Kopieren Sie das Beispiel aus dem Unterricht und lassen Sie es mit F7 durchlaufen! Wie groß ist die maximale Anzahl der Stackgröße(unten rechts!)? (b.) 7 Personen können mit 7! Möglichkeiten auf 7 Plätze verteilt werden! Bestimmen Sie, wie viele verschiedene Möglichkeiten es gibt, sich in ihrer Klasse auf Stühle zu setzen! (3.) (a.) Schreiben Sie eine rekursive Methode double fibo(int n). fibo soll die n-te Fibonaccizahl berechnen. Da die Fibonaccizahlen sehr schnell sehr groß werden, soll für Argumente größer 92 der Wert -1 zurückgegeben werden. Der rekursive Algorithmus lautet Basisbedingung: fibo(0) = 0, fibo(1) = 1 Rekursive Bedingung: fibo(n) = fibo(n-1) + fibo(n-2) (b.) Bestimmen Sie die Quotienten der aufeinanderfolgenden Fibonaccizahlen für n=2,..30 und damit den genauen Wert für den Goldenen Schnitt! (4.) Schreiben Sie eine rekursive Methode summen zur Bildung der Summe der Zahlen 1 bis n! Bestimmen Sie damit die Summe der Zahlen 1 bis 100! (5.) Schreiben Sie eine rekursive Methode (8.) zur Berechnung der Potenz a n für beliebige Potenzen mit positiven Exponenten! Bestimmen Sie damit die Potenz 2 hoch 10! Warum ist dies eine besondere Zahl? (6.)Schreiben Sie eine rekursive Methode double nüberk(int n, int v). nüberk ermittelt den Binomialkoeffizienten zu n und v, also n über v. Dazu verwenden Sie die folgende Rekursionsformel: Basisbedingung: v= 0: 1 ; v=n: 1 Rekursive Bedingung: binko(n,v)= binko(n-1,v)+ binko(n-1,v-1) Berechnen Sie damit 49 über 6 und die Anzahl der Möglichkeiten der Ausspielung 6 aus 49 im Wochenendlotto! (7.) Schreiben Sie eine rekursive Methode int ggt(int a, int b). ggt ermittelt den größten gemeinsamen Teiler der Zahlen a und b. Für eine rekursive Methode ziehen Sie die folgende von Euklid ( 325-265 v.chr. ) entdeckte Eigenschaft heran: Wenn a und b durch t teilbar sind, so auch a%b! Basisbedingung: a%b = = 0 : b Rekursive Bedingung: a%b! =0: ggt(b, a%b) (8.) (a.) Schreiben Sie eine rekursive Methode static boolean ispalindrome(string PalindromeStr), welche überprüft, ob eine Zeichenkette ein Palindrom ist z. B. anna! Basisbedingung: Zeichenkette ist nur ein Zeichen oder leer Rekursive Bedingung: erster Buchstabe =letzterbuchstabe && ispalindrome(2ter bis vorletzter Buchstabe) (b.) Erweitern Sie obiges Programm, dass auch Palindrome mit Groß-/Kleinschreibung erkannt werden z.b. Anna! Aufgabenblatt: Methoden - rekursiv S. 1/8

Aufgabenblatt: Methoden - rekursiv- Seite 2 (9.) Gegeben ist ein Haufen mit n>1 Chips. Zerlege den Haufen zufällig in zwei Haufen mit k und n-k Chips und berechne das Produkt. Dann wird jeder der beiden Haufen mit mehr als einem Chip ausgewählt und zufällig in zwei Haufen zerlegt. Das Produkt seiner Teile wird zum vorangehenden Produkt addiert. Das Verfahren wird so lange wiederholt, bis alle Haufen auf 1 reduziert sind. (a.) Schreiben Sie eine rekursive Methode, die den Wert der Zerlegung bei gegebener Chipanzahl berechnet! (b.) Überprüfen Sie mit einer Wiederholungsanweisung, ob bei 1000000-facher Berechnung die Ergebnisse für die Zahlen 5 und 8 immer identisch sind! (c.) Wenn f(n) der Wert der Zerlegung ist, bestimmen Sie eine Wertetabelle von 1 bis 20! (d.) Erkennen Sie ein Muster und bestimmen Sie den Term für f(n), z.b. f(n)= n²+n. Dies kann nicht mit Hilfe von Java gelöst werden, ist also eine mathematische Aufgabe. Hinweis zur Erstellung von ganzen Zufallszahlen: import java.util.random; //Allererste Zeile vor public class // Instanzen randomgenerator der Klasse Random wird erzeugt zu Beginn des Programms oder Methode! int randomint = randomgenerator.nextint(8); // ganze Zahl zwischen 0 und 7 wird erzeugt(nicht 8!) (10.) Schreibe eine rekursive Methode void reverse( int n), die für einen positiven Integerwert x die Ziffern in umgekehrter Reihenfolge ausgibt. Aufruf: reverse(1234); Ausgabe: 4321. (11.) Jeep Fahrt http://www.saar.de/~awa/jrekursion.html Aufgabenblatt: Methoden - rekursiv S. 2/8

Aufgabenblatt: Methoden - rekursiv- Seite 3 Aufgabenblatt: Methoden - rekursiv Lösungen (3.) public class FibonacciRekursiv for(int i=0 ; i<10 ; i++) System.out.println("fibo("+i+") = " + fibo(i) ) ; public static double fibo(int n) if (n<=1) return n; if (n>92) return -1; return fibo(n-1) + fibo(n-2) ; // end class (4.) public static double summen(int n) if (n==0) return 0 ; return n+ summen(n-1); (5.) public static double PotenzN (double a,int n) if (n==0) return 1 ; return a* PotenzN (a,n-1); (6.) public class Binomial for(int n=0 ; n<10 ; n++) System.out.print(n + " : ") ; for(int v=0; v<=n; v++) System.out.print(binkoff(n,v) + "\t" ) ; System.out.println() ; System.out.println(binkoff(4,5)); public static double binkoff(int n, int v) if (v==0) return 1 ; if (v==n) return 1 ; int tmp1= binkoff(n-1,v); int tmp2= binkoff(n-1,v-1); return tmp1+ tmp2; // end class Aufgabenblatt: Methoden - rekursiv S. 3/8

Aufgabenblatt: Methoden - rekursiv- Seite 4 (7.) public class GGT System.out.println( ggt(6,8)); public static int ggt(int a, int b) //return (a%b==0)? b : ggt(b, a%b); if (a%b==0) return b else return ggt(b, a%b) // end class (8.) public static boolean ispalindrome (String PalindromeStr) if (PalindromeStr.length()<2) return true ; String firstchar=palindromestr.substring(0,1); String lastchar=palindromestr.substring(palindromestr.length()-1,palindromestr.length()); String middlestring=palindromestr.substring(1,palindromestr.length()-1); return firstchar.equals(lastchar) && ispalindrome(middlestring); (9.) (a.) import java.util.random; public class ChipsZerlegung System.out.println("Result for n=5:" + ChipChipHurra(5)); public static int ChipChipHurra(int n) if (n==1) return 0; int k = 1+randomGenerator.nextInt(n-1); int tmp1=chipchiphurra(k); int tmp2=chipchiphurra(n-k); return k*(n-k)+tmp1+tmp2; // end class Aufgabenblatt: Methoden - rekursiv S. 4/8

Aufgabenblatt: Methoden - rekursiv- Seite 5 Optimierte Methode: public static int ChipChipHurra(int n) if (n==1) return 0; int k = 1+randomGenerator.nextInt(n-1); return k*(n-k)+chipchiphurra(k)+chipchiphurra(n-k); Aufgabenblatt: Methoden - rekursiv S. 5/8

Aufgabenblatt: Methoden - rekursiv- Seite 6 (b.) import java.util.random; public class ChipsZerlegung int oldvalue=chipchiphurra(5); int newvalue; for (int i=1; i<1000;i++) newvalue=chipchiphurra(5); if (newvalue!=oldvalue) System.out.println("Werte sind unterschiedlich:!")); break; if (newvalue==oldvalue) System.out.println("Werte sind immer gleich!"); public static int ChipChipHurra(int n) if (n==1) return 0; int k = 1+randomGenerator.nextInt(n-1); int tmp1=chipchiphurra(k); int tmp2=chipchiphurra(n-k); return k*(n-k)+tmp1+tmp2; // end class (c.) import java.util.random; public class ChipsZerlegung for (int i=1; i<=20;i++) System.out.println("n="+i+" "+ChipChipHurra(i)); public static int ChipChipHurra(int n) if (n==1) return 0; int k = 1+randomGenerator.nextInt(n-1); int tmp1=chipchiphurra(k); int tmp2=chipchiphurra(n-k); return k*(n-k)+tmp1+tmp2; // end class Aufgabenblatt: Methoden - rekursiv S. 6/8

Aufgabenblatt: Methoden - rekursiv- Seite 7 (d.) Es wird die Summe der Zahlen bis zur Zahl vorher gebildet! Bei n Zahlen werden also die Zahlen 1 bis n-1 addiert! Wenn Sie Summe 1 bis 100 googlen finden Sie z.b. Die Formel für die Summe der Zahlen 1 bis n lautet: n(n+1)/2 Wir summieren aber NICHT von 1 bis n, sondern nur bis n-1. Also ist n in der Formel durch n-1 zu ersetzen: (n-1)((n-1)+1)/2 = (n-1)*n/2 Dies wäre das Ergebnis! n*( n 1) n*( n 1)*( n 2)...*3*2*1 n! n ( n 1) n / 2 2 2!*( n 2)...*3*2*1 2!( n 2)! 2 Aufgabenblatt: Methoden - rekursiv S. 7/8

Aufgabenblatt: Methoden - rekursiv- Seite 8 (10.) static void reverse( int number) if (number>0) int digit=number%10; System.out.print(digit); reverse(number/10); // end of if Aufgabenblatt: Methoden - rekursiv S. 8/8