Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte

Werbung
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Abstrakte Algorithmen und
Sprachkonzepte
Spezifikation von Algorithmen, UML, Iterationen,
Sprünge, Rekursion
Vorlesung 3.11.2005
Foliensatz von D. Huson zur Vorlesung Informatik I, Tübingen 2005/06
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
1
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Algorithmen
• Ein Algorithmus (algorithm) ist die Beschreibung
einer Methode zur Lösung einer gegebenen
Aufgabenstellung.
• Beispiele:
– Verfahren zur Konversion einer eingelesenen Dezimalzahl in
eine Dualzahl
– Verfahren Konversion einer Dualzahl in eine ausgegebene
Dezimalzahl
– Ripple carry addition von Dualzahlen
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
2
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Algorithmen
• Wir verlangen, dass ein Algorithmus
– in endlicher Zeit
– auf völlig mechanische Art
– ein wohldefiniertes Ergebnis
produziert.
• Beispiel:
– Der fundamentale Instruktionszyklus eines Prozessors ist
kein Algorithmus, da er im obigen Sinne kein Ergebnis
produziert und auch nie anhält.
– Wird Berechnungsverfahren (computational procedure) genannt
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
3
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Beschreibung von Algorithmen
• Algorithmen müssen präzise beschrieben
werden. Es gibt verschiedene Möglichkeiten:
• Textuelle Beschreibung
• Diagram
• Mathematische Notation
• „Pseudo-Code“
• Programmiersprache
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
4
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Definition des Algorithmus
• Ein Algorithmus ist die Beschreibung eines Verfahrens, um aus
gewissen Eingabegrößen bestimmte Ausgabegrößen zu
berechnen. Dabei muss erfüllt sein:
• Genaue Spezifikation:
– Eingabespezifikation: welche Eingaben, Anforderungen? Anforderungen
– Ausgabespezifikation: Welche Ausgaben, Eigenschaften? Zusicherung
• Sicherstellung der Durchführbarkeit:
– Endliche Beschreibung: in einem endlichen Text vollständig darstellbar
– Effektivität: Jeder Schritt muss effektiv (d.h. tatsächlich) mechanisch ausführbar
sein
– Determiniertheit: Verfahrungsablauf stets fest vorgeschrieben
• Sicherstellung der Korrektheit:
– Partielle Korrektheit: Ergebnis genügt Ausgabespezifikation, wenn
Eingabespezifikation erfüllt ist
– Terminierung: Algorithmus hält nach endlich vielen Schritten an, wenn
Eingabespezifikation erfüllt ist
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
5
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Beispiele
• Algorithmen, z.B.:
– Schriftliche Addition, Subtraktion, Multiplikation
– Backrezept (Kochrezept? Jamie Oliver: add whatever you like)
• Keine Algorithmen, z.B.:
– Sei s definiert als die Summe s:=1+1/2+1/4+1/8+...
(Mathematisch präzise definiert, aber „Endliche Beschreibung“?,
„...“ ist nur Abkürzung, „Terminierung“?)
– „Man würze bei Bedarf nach“ („Determiniertheit“?)
– Sei s= 5/0 („Effektivität“?)
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
6
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Textuelle Beschreibung eines Algorithmus
• Beispiel: Wir betrachten ein Algorithmus, der
die Differenz von zwei natürlichen Zahlen
berechnet, und hierzu nur einfaches
Inkrementieren um 1 benutzt.
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
7
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Textuelle Beschreibung des Algorithmus diff(a,b)
diff(a,b)
Parameter
// Gegeben seien zwei natürliche Zahlen a,b mit a≥ b
Kopf
// Das Resultat r ist die Differenz r=a-b Kommentare
1. Vorbereitung: Setze r:=0 und setze y:=b
2. Trivialfall: Falls y=a so gebe Resultat r aus und halt.
3. Arbeit:
Variable
Kopfzeile
•
•
4.
Ergebnisaufbau: Setze r:=r+1
Problemreduktion: Setze y:=y+1
Rumpf
Wiederholung: Fahre fort bei 2.
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
8
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Textuelle Beschreibung des Algorithmus diff(a,b)
diff(a,b)
// Gegeben seien zwei natürliche Zahlen a,b mit a≥ b Spezifikation?
// Das Resultat r ist die Differenz r=a-b
Anforderung und
Zusicherung
1. Vorbereitung: Setze r:=0 und setze y:=b
sind spezifiziert
2. Trivialfall: Falls y=a so gebe Resultat r aus und halt.
3. Arbeit:
Durchführbarkeit?
•
•
4.
Ergebnisaufbau: Setze r:=r+1
Problemreduktion: Setze y:=y+1
Ja, nur Grundoperationen
Wiederholung: Fahre fort bei 2.
Korrektheit:?
Ein Algorithmus?
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
Schritt 3 wird genau a-b
mal durchgeführt
9
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Grundschema des Algorithmenaufbaus
diff(a,b)
// Gegeben seien zwei natürliche Zahlen
a,b mit a≥ b
// Das Resultat r ist die Differenz r=a-b
1.
Vorbereitung: Setze r:=0 und setze
y:=b
2.
Trivialfall: Falls y=a so gebe
Resultat r aus
3.
Arbeit:
Ergebnisaufbau: Setze r:=r+1
Problemreduktion: Setze y:=y+1
4.
Wiederholung: Fahre fort bei 2.
•
Name des Algorithmus und Liste der
Parameter
• // Spezifikation des Ein/Ausgabeverhaltens
1. Vorbereitung: Einführung von
Hilfsgrößen, etc
2. Trivialfall?: Wenn ein einfacher Fall
vorliegt, Beendigung mit Ergebnis
3. Arbeit (Problemreduktion,
Ergebnisaufbau): Reduziere Problem X
auf eine einfachere Form X´, mit „X´ > X“,
baue entsprechend einen Teil des
Ergebnisses auf
4. Wiederholung (Iteration oder
Rekursion): fahre mit X´ bei Schritt fort
2 (Iteration) oder rufe den Algorithmus mit
reduziertem Problem X´ wieder auf
(Rekursion)
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
10
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Problemreduktion
• Die Terminierung eines Algorithmus kann garantiert
werden, wenn im Schritt 3 (Problemreduktion) das
Problem im Sinne einer „wohlfundierten Ordnung“ in
jedem Durchgang echt kleiner wird.
• Eine Ordnung > heisst wohlfundiert, wenn es keine
unendlich absteigende Kette von Elementen
x1 > x2 > x3 >... >xn > ...
gibt.
• z.B. „größer als“ auf N wohlfundiert, aber auf Z nicht.
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
11
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Diagramm für diff(a,b)
UML-Aktivitätsdiagramm (UML= unified modelling language)
Einige UML Symbole:
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
12
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Grundschema des Algorithmenaufbaus, Aktivitätsdiagramm
Steuerungsverlauf (control flow), Anordung der Anweisungen:
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
13
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Grundschema des Algorithmenaufbaus, Aktivitätsdiagramm
Steuerungsverlauf (control flow), Anordung der Anweisungen:
Verzweigung
(branch)
Elementarer
Schleifenkonstrukt
(iteration)
Sprung
(jump)
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
14
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Algorithmisches Problem: modulus-Funktion
• Problem: man finde ein Verfahren zur Berechnung des
Rests der Ganzzahldivision a/b, also für
r = a mod b, wobei a ≥ 0, b > 0.
• Definition: a mod b:= a-(a/b)· b, wobei „/“ Ganzzahldivision
• Diese Funktion wird bei dem Euklidischen Algorithmus zur
Berechnung des ggT zweier Zahlen gebraucht
• Wichtige Operation, Programmiersprachen wie Java oder C++
haben einen eingebauten Operator %, so dass a % b= a mod b
• Beispiel: 32 mod 5 = 32-(32/5)· 5=32-6·5=2
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
15
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Algorithmus mod(a,b)
mod(a,b)
Spezifikation?
// Anforderung: a,b ∈ Z mit a ≥ 0, b > 0
ok
// Zusicherung: Das Resultat r ist der Rest der Division a/b
1. Vorbereitung: Setze r:=a
2. Trivialfall: Falls r<b, so gebe Resultat r aus, halt.
3. Arbeit (Problemreduktion, Ergebnisaufbau):
Durchführbarkeit?
•
Setze r :=r - b
4.
Wiederholung: Fahre fort bei 2.
Ja, nur Grundoperationen
Korrektheit, insbesondere Terminierung?
Zunächst ist r=a≥ 0. Dann, so lange r≥ b >0 ist, wird
r in Schritt 3 jeweils um b reduziert, stets bleibt r ≥ 0.
Da > auf N wohlfundiert ist, folgt die Terminierung.
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
Return r
16
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Beispiel für Algorithmus mod(a,b)
Beispiel für den Aufruf mod(7,3):
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
17
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Unstrukturierte und strukturierte Sprünge
• In den beiden Beispielen diff(a,b) und mod(a,b)
benutzen wir einen unstrukturierten Sprung der Form
„fahre fort in Zeile 2“.
– In C oder C++: goto <Marke>
– Freie Sprünge begünstigen „Spaghetti-Code“
• Im Arbeitsschritt des Grundschemas wird kein freier
Sprung benötigt, sondern hier reicht ein strukturierter
Sprung, der Teil einer Iterationsschleife ist
• Die wichtigsten Iterationsschleifen sind:
for-Schleife, while-Schleife und repeatuntil-Scheife
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
18
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Die while-Schleife
• Die while-Schleife (while loop) hat die Form:
while (Bedingung) do {Anweisungssequenz} od
• Der Kontrollfluß:
– testet die Bedingung im Kopf der Schleife,
– ist die Bedingung wahr, so wird die Anweisungsfolge im
Körper durchlaufen, sonst wird die while-Schleife verlassen
– kehrt zum Kopf zurück
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
19
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Algorithmus mod(a,b) mit while-Schleife
mod(a,b)
// Anforderung: a,b ∈ Z mit a ≥ 0, b > 0
// Zusicherung: Das Resultat r ist der Rest der Division a/b
1. Vorbereitung: Setze r:=a
2. Arbeit (Problemreduktion, Ergebnisaufbau):
while (r ≥ b) do
r :=r – b
od
3. Trivialfall: return r.
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
20
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Algorithmus diff(a,b) mit while-Schleife
diff(a,b)
// Anforderung: a,b ∈ N mit a ≥ b
// Zusicherung: Das Resultat r ist die Differenz a - b
1. Vorbereitung: Setze r:=0 und y:=b
2. Arbeit (Problemreduktion, Ergebnisaufbau):
while (y ≠ a) do
r :=r +1;
y:=y+1;
od
3. Trivialfall: // y=a
return r.
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
21
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Beschreibung eines Algorithmus in mathematischer Notation
• Der euklidischer Algorithmus berechnet den
„größten gemeinsamen Teiler (ggT)“ wie folgt:
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
22
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Beschreibung in Pseudo-Code
• Oft werden Algorithmen in Pseudo-Code
angegeben, also eine textuelle Beschreibung mit
Bestande des Syntaxes von höheren
Programmiersprachen, z.B:
if(keine Elemente zu sortieren)
return (Erfolg);
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
23
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Programmiersprachen als Notation für Algorithmen
• Programmiersprachen bieten eine Notation für
Algorithmen, die
– so präzise ist, daß die Algorithmen vom Rechner
vollautomatisch ausgeführt werden können, und
– so abstrakt ist, daß die Algorithmen von Menschen gut
verstanden werden können
• Machinennahe Sprachen (z.B. Assembler, C): extrem effiziente
Verarbeitung
• Hochsprachen (z.B. LISP, Prolog): Abstraktion der Notation im
Vordergrund
• Objektorientierte Sprachen (z.B. C++, Java): fassen
Datenstrukturen und Algorithmen in Objekte zusammen
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
24
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Programmiersprachliche Grundkonzepte
1.
Datenspeicher und Zuweisungen:
•
•
2.
Variablen und Zuweisungen zum Speichern von berechneten Ergebnissen
(z.B. r:=a)
Konstanten zum Bezeichnen fester Werte (z.B. Kreiszahl π)
Ausdrücke:
•
•
•
3.
Boolesche und arithmetische Ausdrücke zum Auswerten von Formeln und
Bedingungen
z.B. a> 0 and (b<0 or c+b >d)
Boolesche Ausdrücke haben den Wahrheitswert true oder false
Sequenzierungsanweisungen zum Gliedern und Steuen des Ablaufes von
Berechnungen:
•
•
•
•
•
4.
Blöcke zum Gruppieren von Daten und Anweisungen { ...}
Funktionsaufrufe zum Wiederverwenden eines Algorithmus
sin(x)+sin(y)
Eine Rückkehranweisung zur Beendigung einer Funktion
return r
Bedingte Anweisungen zum verzweigen im Programfluß
if (...) {...}
Iterationsanweisungen
while-Schleife, for-Schleife, repeat-until-Schleife
Hilfskonstrukte:
•
Kommentare folgen nach // bis zum Zeilenende, oder als Abschnitte der Art
/* Kommentar */
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
25
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Programmiersprache Java
• Wir werden die Grundkonzepte der
Programmierung an Hand der
Programmiersprache Java kennenlernen
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
26
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Das Sprungkonzept goto
•
Ein unbedingte Sprunganweisung:
goto M;
wobei M ein Label ist, das eine Anweisung im Algorithmus
oder Programm markiert, hat zur Folge, dass der
Programmfluss mit dieser Anweisung fortgesetzt wird.
mod(a,b)
// Anforderung: a,b ∈ Z mit a ≥ 0, b > 0
// Zusicherung: Das Resultat r ist der Rest der Division a/b
1.
Vorbereitung: Setze r:=a
2.
LOOP: Trivialfall: Falls r<b, so return r
3.
Arbeit (Problemreduktion, Ergebnisaufbau):
Setze r :=r - b
4.
goto LOOP;
•
Die goto Anweisung gibt es in C++, aber nicht in Java
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
27
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Verzweigung mit if-then-else
• Die allgemeine bedingte Anweisung lautet:
if (Bedingung) then ja-Anweisung else nein-Anweisung fi;
• In Java:
if (Bedingung) ja-Anweisung; else nein-Anweisung;
• Kurzform:
if (Bedingung) then ja-Anweisung fi;
• In Java:
if (Bedingung) ja-Anweisung;
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
28
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Beispiele
• Nach der folgenden Anweisung ist die Variable
x nicht negativ:
if x<0 then x := -x; fi;
• Die folgende Anweisung berechnet den
Absolutbetrag:
if x<0 then abs := -x; else abs:= x; fi;
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
29
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Schleifen
• Die klassiche while-Schleife:
while (Bedingung) do {Anweisungssequenz} od
• In Java:
while (Bedingung) do {Anweisungssequenz}
• Entspricht:
M: if(Bedingung)
{Anweisungssequenz;
goto M;
} fi
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
30
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Schleifen
• Die repeat-until-Schleife:
repeat {Anweisungssequenz} until
(AbbruchBedingung)
• In Java:
do {Anweisungssequenz} while (Bedingung)
• Entspricht:
M: Anweisungssequenz;
if(not AbbruchBedingung) then {Goto M;} fi
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
31
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Beispiel
• Einlesen von Zeichen, bis ein bestimmtes
Zeichen ´s´ gefunden wird:
{ //1. Initialisere.
// 2.
z:=´s´;
Iteration.
repeat { v:=read();} until (v=z);
}
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
32
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Schleifen
• Die klassiche for-Schleife:
For Laufvariable from U to O step S do
{Anweisungssequenz} od
• In Java: so nicht vorhanden, „Superkonstrukt“
• Beispiel:
// 1. Initialisiere
r:=1;
// 2. Iteriere
For i from 2 to 20 step 2 do
{ r:=r * i;}
od
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
33
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Rekursive Ansatz
• Im rekursiven Ansatz versucht man, ein
vorgelegtes Problem P(X) in zwei Teile zu
lösen:
– Basis: Gib eine direkte Lösung an, falls die Lösung
für X einfacher Natur ist.
– Schritt: Führe die Lösung fur P(X) durch einen
Schritt auf die Lösung eines einfachen Problems
P(X´) zurück, wobei X>X´ gilt, bezüglich einer
geeigneten wohlfundierte Ordnungsrelation „>“
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
34
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Rekursion für mod(a,b)
• In mathematischer Notation kann (a mod b) wie
folgt ausgerechnet werden:
• Ist das ein Algorithmus?
Spezifikation? Durchführbarkeit? Korrektheit?
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
35
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Rekursion für mod(a,b)
• Spezifikation:
– Eingabe: nehmen an: a ≥ 0, b > 0
– Ausgabe: wie ist (a mod b) definert?
(a mod b) := a – (a/b)·b, hierbei ist „/“ die
Ganzahldivision. Wir fordern also, dass das Resultat
r die Eigenschaft r=a-(a/b)·b.
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
36
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Rekursion für mod(a,b)
• Durchführbarkeit:
– Endliche Beschreibung: gegeben
– Effektivität: gegeben
– Determiniertheit: gegeben, da nur zwei Fälle, die
sich gegenseitig ausschliessen
• Korrektheit
– Partielle Korrektheit: siehe Buch
– Terminierung: siehe Buch
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
37
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Partielle Korrektheit
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
38
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Terminierung
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
39
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Rekursion für mod(a,b) in Java
Zuweisungsoperator
=
int mod (int a, int b)
// Anforderungen:
// a>=0
// b>=0
// Zusicherung:
// r= a-(a/b)*b
{
// 1. Vereinbarungen
int r;
// 2. Initialisierungen
r=a;
// 3. Einfacher Fall
if (r<b) { return r; }
// 4. Problemreduktion
r=r-b;
// 5. Rekursion
return mod(r,b);
}
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
40
J
Folien zu Kapitel 3: Abstrakte Algorithmen und Sprachkonzepte
Rekursion für ggT(a,b) in Java
Gleichheitsoperator
==
int ggt (int a,int b)
{
if(b==0)
return a;
else if (b>a)
return ggT(b,a);
else // b>0 && b<a
return
ggT(b,mod(a,b));
}
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java, Folien von D. Huson
41
J
Herunterladen