Unterprogramme / Methoden

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Forschungszentrum caesar
Sortieren I - Bubblesort -
Einführung in die Programmierung Zusammenfassung
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
SWITCH - Anweisung.
SWITCH - Anweisung.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
WHILE - Anweisung.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung Funktionen und Parameter
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0);
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Thema: Fibonacci-Zahlen
Struktogramme IF-ELSE FOR – Schleife
Rekursive Funktionen (Fakultät)
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
2.4 Rekursion Klassifikation und Beispiele
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Unterprogramme in JAVA
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
Übersicht Nachtrag zu Ausdrücken
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/ Übungsaufgabe vom Logische Ausdrücke 1.true & false | true 2.(10>2)
Einführung in die Programmierung mit Java
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Sequenzen: Lineare Programme
Variablen und Datentypen
Objektorientierte Programmierung (OOP)
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Tutorium Software-Engineering SS14 Florian Manghofer.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Konstruktoren.
Aufgaben zu Rückgabewerten
Nksainf.ch/oinf.
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
REKURSION + ITERATION.
Implementieren von Klassen
 Präsentation transkript:

Unterprogramme / Methoden

Das Hauptprogramm delegiert eine Aufgabe an ein Unterprogramm . Anweisung_1; Anweisung_2; Unterprogramm_1(); Anweisung_3; Anweisung_4; Unterprogramm_1() { Anweisung_1; Anweisung_2; Anweisung_3; ... }    

Vorteile von Unterprogrammen Top-Down-Verfahren: “Teile und Herrsche” Zerlegung eines Problems in Teilprobleme Lesbarkeit Kompakter, übersichtlicher und selbsterklärener Programmaufbau Wiederverwendbarkeit Ein Unterprogramm kann für andere ähnliche Aufgaben wieder verwendet werden Änderbarkeit / Erweiterbarkeit Änderungen nur an einer zentralen Stelle Testbarkeit Getrennte Tests einzelner Programmteile leicht möglich

public static int maximum(int zahl1, int zahl2) { int erg; Definition und Aufruf Rückgabe- typ Name Eingabe- parameter public MethodenBsp { public static int maximum(int zahl1, int zahl2) { int erg; if (zahl1>zahl2) erg=zahl1; else erg=zahl2; return erg; } public static void main (String[] args) { int zahl1=5, zahl2=10; int maxZahl = maximum(zahl1,zahl2); System.out.println(maxZahl); Ergebnis Zurück geben Methode aufrufen

Bemerkungen Die Reihenfolge der Aufrufparameter ist wichtig. Eine Methode die nichts zurück gibt, erhält den Rückgabewert void, z.B. public static void begruesseBenutzer() { … }

Arbeitsauftrag Sternefigur Hohlquadrat in Unterprogramme aufteilen Ändern Sie Ihr Programm so ab, dass zusammenhängende Programmteile in Unterprogrammen ausgeführt werden (siehe Übungsblatt arbeitsblatt-1-rechteck). Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en.

Arbeitsauftrag Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en. Berechnung der Fakultät Definieren Sie eine Methode, die die Fakultät n! = 1*2*3*…*n berechnet und rufen diese mit verschiedenen Parametern auf.

Weitere Details zu Methoden Siehe Präsentation 00-methoden-ausführlich

Typumwandlungen (Typecasting)

Implizites und explizites Typecasting int long int iZahl=1000; long loZahl=1000000; loZahl=iZahl; // funktioniert implizit long  int iZahl = (int) loZahl; // explizit durch den Typecast-Operator float double float fZahl=3.14f; double dZahl=77.7; dZahl = fZahl; // funktioniert implizit double  float fZahl = (float) dZahl; // explizit durch den Typecast-Operator

Explizites Typecasting zwischen verschiedenen Datentypen int  float Int iZahl1=5; float fZahl1=10.8f; fZahl1 = (float) iZahl1; iZahl1 = (int) fZahl1; // danach hat iZahl1 den Wert 10 String int, String float String sZahl1="56"; int iZahl1=5; float fZahl1=10.8f; iZahl1 = Integer.valueOf(sZahl1); sZahl1 = String.valueOf(iZahl1); fZahl1 = Float.valueOf(sZahl1); sZahl1 = String.valueOf(fZahl1); 11

Typecasting Beispiele 1 iZahl = (int) fZahl1 * (int) fZahl2; oder iZahl = (int) (fZahl1 * fZahl2); // Klammern sind hier wichtig! dZahl2 = fZahl1; // geht implizit fZahl = (float)(iZahl1 + iZahl2); // expliziter Typecast-Operator sZahl1 = String.valueOf(loZahl1 + (long) iZahl1); fZahl1= 45.765f; iZahl1= (int) fZahl1; // erhält nur den ganzteiligen Anteil, also 45

Typecasting Beispiele 2 Runden einer float-Zahl float fZahl1=45.49f; int iZahl1 = (int) (fZahl1+0.5f); Runden auf 3 Kommastellen float fZahl1=45.123456f; float fZahl3 = (int)(fZahl1*1000+0.5f)/1000f; Zufallszahlen Math.random() liefert eine double-Zahl zwischen 0 und 1. Gesucht: Integer-Zufallszahl im Bereich 1…n int n=10; int meineZufallszahl = (int) (n * Math.random())+1; Aufgaben: + Würfel simulieren + 3 Würfeln, so lange bis gleiche Augenzahl herauskommt + 2 Würfel, so lange bis 2 Würfel gleich sind 13

Würfel-Simulation schreiben Arbeitsauftrag Aufgaben: + Würfel simulieren + 3 Würfeln, so lange bis gleiche Augenzahl herauskommt + 2 Würfel, so lange bis 2 Würfel gleich sind Würfel-Simulation schreiben 14

Rekursion

Was passiert hier? Ein Zeichner zeichnet sich beim zeichnen … Quelle:

Die zweite Fib-Zahl ist 1. Fibnonacci-Zahlen Die erste Fib-Zahl ist 1. Die zweite Fib-Zahl ist 1. Die n-te Fib-Zahl ist die Summe der zwei vorherigen. Also: 1 1 2 3 5 8 13 21 … Formal: fib(0)=1, fib(1)=1 fib(n) = fib(n-1)+fib(n-2) Frage: Welchen Wert hat fib(90)?  1170 – c. 1250)

Arbeitsauftrag Berechnung der 90-ten Fibonacci-Zahl Definieren Sie eine Methode, die mithilfe eines Arrays die 90-te Fibonacci-Zahl errechnet. 2.880.067.194.370.816.120 Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en.

Iterative Lösung Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en.

Was macht dieses Programm? Down(500) 500 Down(499) 499 Down(498) 498 down(int) ist eine rekursive Methode, sie ruft sich selbst auf. Down(497) Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en. …

down(int) mit Abbruchkriterium 500 Down(499) 499 … Down(1) 1 Down(0) Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en. down(int n) mit Abbruchkriterium verhindert unendliche Laufzeit. Teile: Abbruchkriterium Verarbeitung Rekursionsschritt

Lassen sich die Fibonacci-Zahlen rekursiv berechnen? fib(0)=1, fib(1)=1 fib(n) = fib(n-1)+fib(n-2) Ja, sie sind schon rekursiv definiert. Vorteil: elegante Definition Nachteil: schlechte Laufzeit Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en.

Warum also Rekursion? Beispiel: Die Türme von Hanoi Lösungsidee: Verschiebe den n-1-ten Stapel von 1 nach 3 Verschiebe die verbliebene Scheibe von 1 nach 2 Verschiebe den n-1-ten Stapel von 3 nach 2 Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en.

Die Türme von Hanoi Java-Programm Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en.

Die Türme von Hanoi Aufrufreihenfolge Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en. Quelle: O. Bittel; Sept. 2007

Zusammefassung Rekursion Rekursive Methoden rufen sich selbst auf. Sie brauchen eine Abbruchbedingung. Sie sind bei bestimmten Problemen leicht zu formulieren. Allerdings sind sie ineffizient bei langer Laufzeit.

Zusatz Eliminierung der Rekursion Quelle: O. Bittel; Sept. 2007

Zusatz Eliminierung der Rekursion mit einem Keller Quelle: O. Bittel; Sept. 2007