DVG1 - 07 - Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.

Slides:



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

der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
der Universität Oldenburg
der Universität Oldenburg
Verteilte Software - Java - Prozedurale Programmierung 1
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Objektorientierung
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. 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.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Imperative Programmierung Funktionen und Parameter
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
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);
Abstrakte Klassen DVG
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Ablaufsteuerung
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Einführung in die Programmierung Anweisungen und Datentypen
Thema: Fibonacci-Zahlen
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursive Funktionen (Fakultät)
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
2.4 Rekursion Klassifikation und Beispiele
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Unterprogramme in JAVA
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Übersicht Nachtrag zu Ausdrücken
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Unterprogramme / Methoden
Java Programme nur ein bisschen objektorientiert.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Java-Kurs - 4. Übung weitere Kontrollstrukturen
«Delegierter» Methoden Schablone Funktionszeiger
 Präsentation transkript:

DVG Methoden 1 Methoden

2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while (dezi !=0); switch (dezi%16) { } case 10 : Bin = "A"+Bin; break; case 11 : Bin = "B"+Bin; break; case 12 : Bin = "C"+Bin; break; case 13 : Bin = "D"+Bin; break; case 14 : Bin = "E"+Bin; break; case 15 : Bin = "F"+Bin; break; default : Bin = dezi%16+Bin; Bin = "0x" + Bin; if (!vz) Bin="-"+Bin; dezi = dezi/16;

3DVG Methoden int dezi = Integer.parseInt(args[0]); String Bin =""; boolean vz=(dezi>=0); dezi=Math.abs(dezi); do { if (dezi%16 < 10) Bin=dezi%16+Bin; else Bin= (´A´+dezi%16-10)+Bin; dezi=dezi/16; } while (dezi !=0); Bin = "0x" + Bin; if (!vz) Bin="-"+Bin;

4DVG Methoden int dezi = Integer.parseInt(args[0]); String Bin =""; boolean vz=(dezi>=0); dezi=Math.abs(dezi); do { if (dezi%16 < 10) Bin=dezi%16+Bin; else Bin=(char)(´A´+dezi%16-10)+Bin; dezi=dezi/16; } while (dezi !=0); Bin = "0x" + Bin; if (!vz) Bin="-"+Bin;

5DVG Methoden int dezi = Integer.parseInt(args[0]); String Bin =""; boolean vz=(dezi>=0); dezi=Math.abs(dezi); do { if (dezi%2 < 10) Bin=dezi%2 +Bin; else Bin=(char)(´A´+dezi%2 -10)+Bin; dezi=dezi/2 ; } while (dezi !=0); Bin = "" + Bin; if (!vz) Bin="-"+Bin;

6DVG Methoden int dezi = Integer.parseInt(args[0]); String Bin =""; boolean vz=(dezi>=0); dezi=Math.abs(dezi); do { if (dezi%8 < 10) Bin=dezi%8 +Bin; else Bin=(char)(´A´+dezi%8 -10)+Bin; dezi=dezi/8 ; } while (dezi !=0); Bin = "0" + Bin; if (!vz) Bin="-"+Bin;

7DVG Methoden // Parametrisierung int b = 16; String pref = "0X"; int dezi = Integer.parseInt(args[0]); String Bin =""; { boolean vz=(dezi>=0); dezi=Math.abs(dezi); do { if (dezi%b < 10) Bin=dezi%b +Bin; else Bin=(char)(´A´+dezi%b -10)+Bin; dezi=dezi/b ; } while (dezi !=0); Bin = pref + Bin; if (!vz) Bin="-"+Bin; }

8DVG Methoden // Methode static String convertBase ( int dezi, int b, String pref) { String Bin =""; boolean vz=(dezi>=0); dezi=Math.abs(dezi); do { if (dezi%b < 10) Bin=dezi%b +Bin; else Bin=(char)(´A´+dezi%b -10)+Bin; dezi=dezi/b ; } while (dezi !=0); Bin = pref + Bin; if (!vz) Bin="-"+Bin; return Bin; }

9DVG Methoden Methoden-Definition Definition: public static mtyp name (typ p1, typ p2,..., typ pN) {.... // Koerper der Methode, beliebige Anweisungen } mtyp definiert den Typ des Wertes der Methode, gibt die Methode keinen Wert zurück muß void angegeben werden. p1, p2,..., pN sind die Parameter der Methode. Im Körper von Methoden können beliebige Variablen definiert werden. Diese sind nur innerhalb der Methode bekannt. Methoden können nur in Klassen definiert werden. ==> Es gibt keine Methoden innerhalb von Methoden. Hat die Methode keine Parameter, ist die leere Parameterliste () anzugeben.

10DVG Methoden Methoden-Aufruf Klassenname.Methodenname(p1, p2,..., pN) innerhalb von Ausdrücken oder Klassenname.Methodenname(p1, p2,..., pN); auch möglich wenn die Methode einen Wert zurückgibt, dieser wird dann ignoriert. p1, p2,..., pN können beliebige Ausdrücke sein Die Ausdrücke werden berechnet und auf Hilfsvariable zugewiesen. Die Hilfsvariablen werden der Methode übergeben call by value. Die Werte außerhalb der Methode werden nicht geändert.

11DVG Methoden return-Anweisung Wenn mtyp==void angegeben wurde, kann die Anweisung return ; zum Verlassen der Methode verwendet werden. Fehlt die return -Anweisung wird die Methode am Ende verlassen. Wenn mtyp!=void angegeben wurde, muß mindestens eine Anweisung return ausdruck; enthalten sein die den Wert der Methode berechnet und die Methode verläßt. ausdruck wird in den Typ mtyp konvertiert.

12DVG Methoden public static String convBase(int dezi, int b, String pref) { boolean vz=(dezi>=0); dezi=Math.abs(dezi); String Bin =""; do { if (dezi%b < 10) { Bin=dezi%b+Bin; } else { Bin=(char)('A'+dezi%b-10)+Bin; } dezi=dezi/b; } while (dezi !=0); Bin =pref+Bin; if (!vz) Bin="-"+Bin; return Bin; } public static void main (String[]args) { int dezi = Integer.parseInt(args[0]); System.out.println(dezi+" ist in binaer:"+convBase(dezi,2,"")); System.out.println(dezi+" ist in oktal: "+convBase(dezi,8,"0")); System.out.println(dezi+" ist in hexadezimal: "+convBase(dezi,16,"0X")); }

13DVG Methoden Überladene Methoden Methoden können überladen werden, d.h. es gibt innerhalb einer Klasse mehrere Methoden mit gleichem Namen, aber unterschiedlicher Parameterliste, d.h. mit unterschiedlicher Anzahl von Parametern oder unterschiedlichen Typen. Der Typ der Methode spielt für die Unterscheidung der Methoden keine Rolle. Beim Aufruf einer überladenen Methode wird die Menge aller bekannten Methoden in folgenden Schritten eingeschränkt:

14DVG Methoden Name der Methode stimmt überein Anzahl der Parameter stimmt überein Wenn es genau eine Methode gibt deren Parameter dem Typ nach genau mit dem Aufruf übereinstimmen, so wird diese gewählt. ==> Ende Die berechneten Parameter können in die entsprechenden Typen der Methoden-Definition umgewandelt werden. Erfüllt keine Methode diese Bedingungen, ist der Aufruf unzulässig. ==> Ende Existiert für eine Methode eine andere Methode, sodaß alle Parameter der einen Methode in die Typen der anderen konvertiert werden können, wird die andere gestrichen. Bleibt genau eine Methode übrig, so wird diese aufgerufen. ==> Ende Wenn mehrere Methoden übrigbleiben, ist der Aufruf unzulässig. ==> Ende

15DVG Methoden Beispiel: public static void m (int p1, double p2){...} // m1 public static void m (double p1, int p2){...} // m2 public static void m (double p1, double p2){...} // m3 int i1=0, i2=0; float f1=0f, f2=0f; double d1=0, d2=0; m(i1,d1); // m1 m(d1,i1); // m2 m(d1,d2); // m3 m(f1,f2); // m3 m(i1,f2); // m1 m(i1,i2); // unzulässig alle Methoden haben passende Parameter, m3 wird eliminiert, da m1 spezifischer ist m1 und m2 erfüllen alle Bedingungen, damit ist der Aufruf nicht entscheidbar, also unzulässig.

16DVG Methoden public static int max (int x, int y) { return (x>y)?x:y; } public static long max (long x, long y) { return (x>y)?x:y; } public static float max (float x, float y) { return (x>y)?x:y; } public static double max (double x, double y) { return (x>y)?x:y; }

17DVG Methoden wert = methode(ausdr1, ausdr2,..., ausdrN); h2 = ausdr2 hN = ausdrN h1 = ausdr1 wert = h0 aufrufende Methode aufgerufene Methode Anweisungen der Methode methode werden abgearbeitet, dabei werden die formalen Parameter mit den Werten h1, h2,..., hN belegt h0=return ausdruck;

18DVG Methoden public class testfak { public static long fakultaet (long n) { long fak=1; while (n>1) fak*=n--; return fak; } public static void main (String [] args) { long n = Long.parseLong(args[0]); long f = fakultaet(n); System.out.println(n + "! = " + f); } }

19DVG Methoden System.out.println(n + "! = " + f); long f = h0; h1>1 long fak=1; long n = Long.parseLong(args[0]); h1=n; fak*=h1--; true h0=fak; false

20DVG Methoden Seiteneffekte Haupteffekte: Eingaben über Parameter Eingaben über Parameter Ausgaben über den Wert Ausgaben über den WertSeiteneffekte: Lesen aus Dateien Lesen aus Dateien Lesen im Dialog Lesen im Dialog Beeinflussung der Arbeitsweise einer Methode durch globale Variable Beeinflussung der Arbeitsweise einer Methode durch globale Variable Schreiben in Dateien Schreiben in Dateien Ausgaben im Dialog Ausgaben im Dialog Verändern von globalen Variablen Verändern von globalen Variablen

21DVG Methoden Methode Parameter 1Parameter NParameter 2 Wert Globale Variable Dateien Globale Variable Dateien

22DVG Methoden public class testfak { static boolean debug = false; public static long fakultaet (long n) { long fak=1; if (debug) System.out.println(fak(+n+)); while (n>1) fak*=n--; return fak; } public static void main (String [] args) { long n = Long.parseLong(args[0]); long f = fakultaet(n); System.out.println(n + "! = " + f); } }

23DVG Methoden rekursive Methoden Methoden die sich direkt oder indirekt selbst aufrufen. direkte Rekursion: Methode ruft sich selbst auf direkte Rekursion: Methode ruft sich selbst auf z.B.: Berechnung der Fakultät mit n!=n*(n-1)! public static long fakultaet(long n) { return (n>0)?n*fakultaet(n-1):1; } indirekte Rekursion: Methode ruft eine andere Methode auf, die dann die erste Methode aufruft indirekte Rekursion: Methode ruft eine andere Methode auf, die dann die erste Methode aufruft z.B.: A n =B n +B n-1, B n =2*A n-1 +B n-2 wenn n>1, A 0 =A 1 =B 0 =B 1 =1 public static long A(long n) { return (n>1)?B(n)+B(n-1):1; } public static long B(long n) { return (n>1)?2*A(n-1)+B(n-2):1; }

24DVG Methoden Es muß vom Programmierer sichergestellt werden, daß keine unendlichen Rekursionen auftreten. Z.B. durch Indizes und Abbruchbedingungen (in den Beispielen n). Rekursive Aufrufe erfordern einen sehr hohen Systemaufwand. Man sollte sie nur nutzen, wo es sinnvoll ist. z.B.: fakultaet(n) ==> fakultaet(n-1) ==>... ==> fakultaet(0) fakultaet(n) ==> fakultaet(n-1) ==>... ==> fakultaet(0) also n+1 Aufrufe o.k. (?) A(n) ==> B(n), B(n-1) ==> (A(n-1),B(n-2)),(A(n-2),B(n-3)) ==>... A(n) ==> B(n), B(n-1) ==> (A(n-1),B(n-2)),(A(n-2),B(n-3)) ==>... also ca. 2 n Aufrufe ==> nur für kleine n realistisch !!!! Die Methoden werden sehr oft mit den gleichen Parametern aufgerufen. Rekursionen lassen sich immer vermeiden.

25DVG Methoden public static long A (long n) { long ak=1, akm1=1; long bk=1, bkm1=1, bkm2; for (long k=2;k<=n;k++) { bkm2=bkm1; bkm1=bk; akm1=ak; bk=2*akm1+bkm2; ak=bk+bkm1; } return ak; } public static long A(long n) { return (n>1)?B(n)+B(n-1):1; } public static long B(long n) { return (n>1)?2*A(n-1)+B(n-2):1; }

26DVG Methoden Beispiel: Binomialkoeffizienten

27DVG Methoden Beweis durch vollständige Induktion:

28DVG Methoden neue Rekursionsformel:

29DVG Methoden mögliche Berechnungsformeln

30DVG Methoden public class binomial1 { static boolean debug = true; public static long fakultaet(long n) { long fak=1; if (debug) System.out.print("fakultaet("+n+") = "); while (n>1) fak*=n--; if (debug) System.out.println(fak); return fak; } public static long binomial (long n, long k) { if (debug) System.out.println("binomial("+n+","+k+")"); return fakultaet(n)/(fakultaet(k)*fakultaet(n-k)); } public static void main (String [] args) { long n = Long.parseLong(args[0]); long k = Long.parseLong(args[1]); long b = binomial(n,k); System.out.println("binomial("+n+","+k+") = "+b); }

31DVG Methoden public class binomial2 { static boolean debug = true; public static long binomial (long n, long k) { if (debug) System.out.println("binomial("+n+","+k+")"); if (k>0) return n*binomial(n-1,k-1)/k; return 1; } public static void main (String [] args) { long n = Long.parseLong(args[0]); long k = Long.parseLong(args[1]); long b = binomial(n,k); System.out.println("binomial("+n+","+k+") = "+b); }

32DVG Methoden public class binomial3 { static boolean debug = true; public static long binomial (long n, long k) { if (debug) System.out.println("binomial("+n+","+k+")"); if ((n>k)&(k>0)) return binomial(n-1,k-1)+binomial(n-1,k); return 1; } public static void main (String [] args) { long n = Long.parseLong(args[0]); long k = Long.parseLong(args[1]); long b = binomial(n,k); System.out.println("binomial("+n+","+k+") = "+b); }

33DVG Methoden Vergleich Methode 1 einfache Formel einfache Formel nur für kleine n, da n! berechnet wird nur für kleine n, da n! berechnet wird sehr schnell, da keine Rekursion sehr schnell, da keine Rekursion Methode 2 liefert auch für recht große n und k brauchbare Werte liefert auch für recht große n und k brauchbare Werte schnell, da nur k-fache Rekursion schnell, da nur k-fache Rekursion Achtung: Reihenfolge wichtig Achtung: Reihenfolge wichtig Methode 3 funktioniert prinzipiell für den größten Bereich funktioniert prinzipiell für den größten Bereich für mittlere n nicht mehr brauchbar wegen der großen Rechenzeit 2 n -fache Rekursion für mittlere n nicht mehr brauchbar wegen der großen Rechenzeit 2 n -fache Rekursion