51
1. ¨ Ubung zum Kurs Algorithmische Mathematik II Averkov, Zeile, Peters Email: [email protected], [email protected] Fakult¨ at f¨ ur Mathematik Otto-von-Guericke-Universit¨ at Magdeburg Sommersemester 2016 13. April 2016 1 / 51

1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Embed Size (px)

Citation preview

Page 1: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

1. Ubung zum KursAlgorithmische Mathematik II

Averkov, Zeile, PetersEmail: [email protected], [email protected]

Fakultat fur MathematikOtto-von-Guericke-Universitat Magdeburg

Sommersemester 201613. April 2016

1 / 51

Page 2: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Inhalt I

OrganisatorischesScheinkriterienSonstiges und Fragen

Unterschiede zwischen C und C++

Prasenzaufgaben

Programmiergrundlagen (Backup)Variablen, Datentypen, OperationenProzedurenKontrollstrukturenRekursion

2 / 51

Page 3: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Scheinkriterien

Teil 1:

I voraussichtlich 10 Ubungsblatter,

I in denen insgesamt 50 % der Punkte zu erreichen sind.

I Die Ubungsblatter sollen in 2er Gruppen abgegeben werden.

I Ublicherweise gibt es 4 Aufgaben: eine Programmieraufgabe, dreiBeweisaufgaben.

I Alle Aufgaben sind abzugeben. Von den Beweisaufgaben sind bestimmteAufgaben als Votieraufgabe gekennzeichnet. Um fur Votieraufgaben Punkte zuerhalten, muss jeder in der Lage sein diese auch vorzurechnen.

I Fur die Programmieraufgabe(n) gelten die Hinweise aus dem ersten Semester,Abgaben an [email protected]

Teil 2:

I Ende Mai wird eine Aufgabe fur ein Programmierprojekt bekanntgegeben.

I Dieses soll in 3er Gruppen bearbeitet werden und

I Anfang Juli abgegeben werden.

I Um den Schein zu erhalten (fur die Prufung zugelassen zu werden) muss dasProgrammierprojekt erfolgreich prasentiert werden.

3 / 51

Page 4: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Sonstiges und Fragen

I Ubungsaufgaben werden immer 1 Woche nach Abgabe besprochen

I Donnerstag-Ubung am 5. Mai 2016 fallt aus (Christi Himmelfahrt) und wirdnachgeholt

I Wann wollt ihr mit der Ubung beginnen?

I Andere Fragen?

4 / 51

Page 5: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

C und C++

I C++ (erstmals 1983) ist Nachfolger bzw. eine Erweiterung von C, daher haufig

”C/C++“

I C++ ist zu C abwartskompatibel, womit sich (fast alle) C-Programme auch miteinem C++-Compiler ubersetzen lassen.

I Wichtigste Erweiterung Objektorientierte Programmierung (OOP) - auch mit Cmoglich, doch C++ hilft dem Entwickler dabei.

I Die Erweiterungen, die in C++ existieren, werden mit den gleichen Konstruktengesteuert (Entscheidungen treffen, Programmteile in Funktionen zusammenfassenund Wiederholungen durch Schleifen), die bereits C eingefuhrt hat.

I Mit Standardbibliothek deutlich komfortabler: Strings anstatt Char, bool alsDatentyp (0 oder 1) und viele weitere Optionen

I Dateiendungen: .h und .c fur C-Programme, .h/.hpp und .cpp fur C++

I Referenzen und Zeiger in C++, nur Zeiger in C

5 / 51

Page 6: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Ausgabe

Dieses C-Programm schreibt”Hallo Welt“ auf den Bildschirm und lasst sich also auf C

und C++ gleichermaßen ubersetzen, es ist also ein C/C++-Programm.

Folgendes Programm ist ein reines C++-Programm, das ebenfalls”Hallo Welt“ auf

den Bildschirm schreibt:

Ein C-Compiler wurde dieses Programm nicht ubersetzen konnen.

6 / 51

Page 7: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

OOP: Klassen und Objekte

C++ kennt Klassen und Strukturen, Hauptmerkmale

I Objekte werden durch Klassen beschrieben, sind vom gleichen Typ (z.B. Klasse

”Auto”, Objekte: verschiedene Modelle)

I Schlusselwort class

I Attribute (auch Eigenschaften, Variablen) und Methoden (Funktionen)bestimmen Objekt einer Klasse.

I public: Zugriff auch außerhalb der Klasse, private: nur innerhalb Klasse

7 / 51

Page 8: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

OOP: Klassen und Objekte, Beispiel

8 / 51

Page 9: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

OOP: Klassen und Objekte, Beispiel

9 / 51

Page 10: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

StrukturenEine Struktur ist nun ein benutzerdefinierter Datentyp - ein Datentyp, den Sie selbsterstellen

10 / 51

Page 11: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Aufgabe 1

Schreiben Sie ein Programm, das Vorname, Nachname und Alter in eine Struktur(person) einliest. Hinweis: Nutzen Sie zum Einlesen folgende Funktion aus derStandardbibliothek:

std :: cin >> variablenname;

Zudem soll das Programm diese eingelesene Informationen der person-Struktur ineinem Satz ausgeben.

1. Schreiben Sie zunachst alles in eine Datei (.cpp)

2. Splitten Sie dann Struktur, Funktionen (.hpp) und main (.cpp in einzelne Dateienauf

11 / 51

Page 12: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Exkurs: HeapsI Heap (englisch wortlich: Haufen oder Halde) auf Baumen basierende abstrakte

DatenstrukturI Objekte oder Elemente konnen abgelegt und aus diesem wieder entnommen

werdenI Elementen ist Schlussel zugeordnet, der die Prioritat der Elemente festlegtI Verwendung finden Heaps vor allem dort, wo es darauf ankommt, schnell ein

Element mit hochster Prioritat aus dem Heap zu entnehmen (HIFO-Prinzip),beispielsweise bei Vorrangwarteschlangen.

12 / 51

Page 13: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Aufgabe 2

Erstellen Sie eine Struktur myHeap mit den Attributen data (ganzzahliges Array),maxSize und size. Diese soll durch eine Funktion createHeap(int maxSize) initialisiertwerden. Erstellen Sie eine Funktion insertHeap (myHeap (*)heap, int value), die heapmit value befullt. Lassen Sie sich heap durch eine Funktion printHeap ausgeben.Hinweis: Das Attribut data soll als Zeiger initialisiert werden.

13 / 51

Page 14: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Programmiergrundlagen

I Variablen

I Prozeduren

I Parameterubergabe

I Kontrollstrukturen

I Rekursion

14 / 51

Page 15: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Imperative Programmierung

Definition 4.1Imperative Programmierung ist ein Programmierparadigma, in welchem ein Programmals Folge von Anweisungen (Befehlen) dargestellt wird, die im Speicher aufbewahrteRechengroßen verandern.

BemerkungAssemblersprachen und viele moderne hohere Programmiersprachen sind imperativ.

15 / 51

Page 16: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Variable

Definition 4.2Variable ist ein Behalter fur Rechnungsgroßen (Werte) die im Verlauf desRechenprozesses auftreten. Variable hat einen Namen und eine bestimmte Adresse imSpeicher. Der Wert der Variable kann sich im Verlauf der Berechnung andern. Der Typ(Datentyp) einer Variable bestimmt die Menge der moglichen Werte, welche dieVariable annehmen kann.

16 / 51

Page 17: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Variable (Fortsetzung)

Variable:

I Variablenname ist Bezeichner fur ein Objekt.

I Objekt kann durch die Verwendung des Variablennamens verandert undausgegeben werden.

I Objekt belegt einen bestimmten Bereich im Speicher (vgl. [?, § 4.9.6])

I Jede gegebene Variable darf nur innerhalb eines bestimmten Gultigkeitsbereiches(engl. scope of the variable) benutzt werden.

17 / 51

Page 18: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Deklaration von Variablen

Definition 4.3Deklaration einer Variable ist eine Anweisung, die einen Variablennamen in dasProgramm einfuhrt.

Definition 4.4Definition einer Variable ist eine Anweisung, die eine Variable in das Programmeinfuhrt.

18 / 51

Page 19: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Einfache Datentypen

Definition 4.5Ein Datentyp ist einfach, falls er nicht in andere Datentypen zerlegbar ist.

z.B.:

I Numerische Datentypen (ganze Zahlen, Gleitkommazahlen)

I Zeichen (engl. character) ist druckbares Symbol oder ein Kontrollzeichen(Tabulation, Neue Zeile usw.)

I Boolescher Typ ist der Typ, dessen Variablen zwei mogliche Werte annehmenkonnen (die Werte Wahr oder Falsch).

I Zeiger

19 / 51

Page 20: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Zeiger

I Ein Zeiger ist eine Variable, deren Wert Adresse eines Objektes ist.

I Zeiger ermoglichen Vernetzung von Objekten.

I Zeiger ermoglichen dynamische Speicherbelegung.

I Zeiger sind nicht in allen hoheren Programmiersprachen verfugbar.

I Zeiger ist ein low-level-Konzept (sie existieren in Assemblersprachen)

20 / 51

Page 21: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Zuweisung

Definition 4.6Zuweisung (Bezeichung :=) ist Operation der Form

BEZEICHNER := AUSDRUCK,

wobei BEZEICHNER der Name einer Variable ist und AUSDRUCK ein Ausdruck,der einen Wert zuruckgibt. Nach der Ausfuhrung der Zuweisung enthalt die Variableden Ruckgabewert des Ausdruckes.

Definition 4.7Ein Ausdruck ist ein Konstrukt (in einer gegeben Sprache), welches ausgewertetwerden kann.

Definition 4.8In allgemeiner Situation steht der BEZEICHNER fur einen sogenannten lvalue (einenAusdruck, der zu einem Objekt im Speicher ausgewertet wird).

21 / 51

Page 22: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Zuweisung: Beispiel

Listing 1: zuweisungen beispiel.py

1 x=122 y=23 temp=x4 x=y5 y=temp6 x=x+17 y=2∗y+x

Zeile x y temp1 12 ? ?2 12 2 ?3 12 2 124 2 2 125 2 12 126 3 12 127 3 27 12

22 / 51

Page 23: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Bemerkungen zu Zuweisungen

I Andere Bezeichnungen fur Zuweisung: = (C++ und viele weitere Sprachen;inkompatibel mit mathematischen Texten, wo = als Gleichheitzeichen benutztwird), ← (theoretische Bucher)

23 / 51

Page 24: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Zusammengesetzte Datentypen: Strukturen

Definition 4.9Eine Variable V heißt Struktur (Record) mit Attributen ATTR1, . . . ,ATTRn (n ∈ N)falls V als Ansammlung von Variablen mit den Namen ATTR1[V ], . . . ,ATTRn[V ]aufgefasst werden kann. Die vorigen Variablen heißen Attribute von V .

BemerkungIn modernen Programmiersprachen sind die BezeichnungenV .ATTR1, . . . ,V .ATTRn typisch.

24 / 51

Page 25: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Strukturen: Beispiel

Wir fuhren eine Variable p ein, die einen Punkt auf der Ebene darstellt, der durch diex- und y -Koordinaten sowie durch seine Farbe gegeben wird.

Pseudocode 4.1 Beispiel zu Strukturen

require: p - Variable mit numerischen Attributen x[p], y [p] und Farbe[p] ∈{Weiss, Schwarz}.

1: x[p] := 202: y [p] := 73: Farbe[p] := Weiss4: temp := x[p]5: x[p] := −y [p]6: y [p] := temp

25 / 51

Page 26: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Zusammengesetzte Datentypen: Array (= Feld ≈ Liste)

Definition 4.10Ein Array (Feld, Liste) A ist ein nummerierte Ansammlung von n Variablen, die mandurch A[1],. . . ,A[n] bezeichnet. Dabei heißt n die Lange von A und A[1], . . . ,A[n] dieKomponenten von A. Wir werden die Lange durch das Attribut Lange[A] fuhren.

Beispiel 4.11

1: A := [1, 3, 5, 7, 6]2: A[4] := A[1] + A[2] + A[4]3: A[A[2]] := A[5]− A[1]

BemerkungLeere Arrays (Bezeichnung: []) sind moglich.

BemerkungA[i . . j] bezeichnet Teilarray von A mit Komponenenten A[i ], . . . ,A[j]. Fur i > j giltA[i . . j] = [].

26 / 51

Page 27: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Benutzung von zusammengesetzten Datentypen: Beispiel

I Liste der Hochschulen – ist Array mit Komponenten vom Typ HochschuleI Hochschule – Struktur mit Attributen:

I Name – ZeichenketteI Standort – ZeichenketteI Art der Hochschule – (Fachhochschule/Universitat)I Wann gegrundet – DatumI Die Mitarbeiter – Array mit Komponenten vom Typ MitarbeiterI Die Studierenden – Array mit Komponenten vom Typ Studierender

I Studierender – Struktur mit Attributen:I Name – ZeichenketteI Geburtsdatum – DatumI Matrikelnummer – ???I Aktuelles Semester – ganze ZahlI usw.

I Mitarbeiter – Struktur mit Attributen:I NameI GeburtsdatumI Art des VertragesI usw.

27 / 51

Page 28: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Prozedurale Programmierung

Definition 4.12Prozedurale Programmierung ist ein Programmierparadigma, in welchem einProgramm als Ansamlung von Prozeduren dargestellt wird (jede Prozedur ist furLosung eines Teilproblems zustandig).

28 / 51

Page 29: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Prozedur (≈ Unterprogramm ≈ Routine ≈ Funktion)

Pseudocode 4.2 m = holderMittel(a, b, p)

require: a, b, p sind reelle Variablen mit a, b, p > 0ensure m ist das Holdermittel von a, b bzgl. p

1: m := 12

(ap + bp)

2: m := m1/p

I holderMittel - Name der Funktion/Prozedur

I a, b, p sind formale Eingabeparameter der Funktion holderMittel

I m ist der Ausgabeparameter der Funktion holderMittel

I Die Zeile m = holderMittel(a, b, p) heißt das Interface der FunktionholderMittel

I Hilfsvariablen, die innerhalb einer Funktion eingefuhrt und benutzt werden, heißenlokale Variablen dieser Funktion.

29 / 51

Page 30: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Formale und tatsachliche Parameter

Pseudocode 4.3 q = quadratischesMittel(x , y)

require: x , y > 0ensure q ist das quadratische Mittel von x und y

1: q := holderMittel(x , y , 2)

I Die Funktion holderMittel wird wahrend der Ausfuhrung der FunktionquadratischesMittel aufgerufen. Die Parameter x , y , 2, fur welche dieFunktion holderMittel benutzt wird, heißen tatsachliche Parameter beimAufruf von holderMittel

30 / 51

Page 31: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Parameterubergabe

Pseudocode 4.4 vertauschen(a, b)

require: a, b – Referenzen auf reelle Variablen, temp ist eine reelle Variable innerhalbder Prozedur umtausch

ensure Die Werte von a und b werden vertauscht.1: temp := a2: a := b3: b := temp

Pseudocode 4.5

1: x := 3, y := 5, z := 72: vertauschen(x , y)3: vertauschen(y , z)

I In diesem Beisipel mochten wir, dass sich die Werte von x und y nach derAusfuhrung der Prozedur vertauschen verandern. Deswegen definieren wirParameter a und b von vertauschen als Referenzen. Wahrend der Ausfurhungvon vertauschen sind die Parameter a bzw. b “Zweitnamen” fur x bzw. y .Solche Parameterubergabe heißt call by reference (Ubergabe durch die Referenz).Die Parameterubergabe in holderMittel ist call by value (Uberegabe durchden Wert).

I temp ist lokaler Parameter der Funktion vertauschen

31 / 51

Page 32: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Vereinbarung zur Parameterubergabe

I Vereinbarung: im Folgenden werden nicht zusammengesetzte Variablen durch denWert ubergeben und zusammengesetzte (Arrays oder Variablen, die Attributenbesitzten) durch die Referenz.

32 / 51

Page 33: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Beispiel zu geschachtelten Aufrufen

Funktion A wird aufgerufen (Parameter der Funktion werden generiert)In der Zeile X der Funktion A wird die Funktion C aufgerufen

Die Funktion C startet; ihre Parameter werden generiertIn der Zeile Y der Funktion C wird die Funktion D aufgerufen

Die Funktion D startet; ihre Parameter werden generiertDie Funktion D terminiert; ihre Parameter werden geloscht

Die Funktion C setzt von der Zeile Y fortDie Funktion C terminiert; ihre Parameter werden geloscht

Die Funktion A wird von der Zeile X fortgesetztFunktion A terminiert; ihre Parameter werden geloscht

33 / 51

Page 34: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Strukturierte Programmierung

Definition 4.13Strukturierte Programmierung ist ein Programmierparadigma, in welchem einProgramm folgende Kontrollstrukturen benutzt:

I Auswahl (= Verzweigung)

I Wiederholung (= Schleifen = Iterative Kontrollstrukturen)

34 / 51

Page 35: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Kontrollstrukturen: Verzweigung (= Falls-Anweisungen)

Pseudocode 4.6 m = abstimmung(a, b, c)

require: drei Personen stimmen ab, um eine Entscheidung zu treffen; a, b, c sind boo-lesche Variablen, welche darstellen, ob enstprechende Person dafur oder dagegenist.

ensure m ist das Resultat der Abstimmung; m = Wahr, falls die Mehrheit dafur ist,und m = Falsch sonst.

1: if a und b oder a und c oder b und c :2: m := Wahr3: else:4: m := Falsch5: end

I Der Sonst-Block ist nicht obligatorisch.

35 / 51

Page 36: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Kontrollstrukturen: geschachtelte Falls-Anweisungen

Pseudocode 4.7 p = relativePosition(x , a, b)

ensure x , a, b sind reelle Werte und a ≤ b.require: p := −1 falls x links von dem Segment [a, b] liegt, p = 1 falls x rechts von

dem Segment [a, b] liegt und p = 0 falls x ∈ [a, b]1: if x < a :2: p := −13: else if x ≤ b :4: p := 05: else:6: p := 17: end

36 / 51

Page 37: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Solange-Schleife

Pseudocode 4.8 s = Summe(A)

require: A ist Array mit numerischen Wertenensure s ist die Summe aller Komponenten von A

1: i := 1, s := 02: while i ≤ Lange[A] :3: s := s + A[i ]4: i := i + 15: end

37 / 51

Page 38: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Fur-Schleife

Pseudocode 4.9 s = Summe(A)

1: s := 02: for i = 1, . . . ,Lange[A] :3: s := s + A[i ]4: end

38 / 51

Page 39: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Weitere Schleifen und Kontrollstrukturen

I Repeat-Until, Do-While, Loop...

I Goto

I return

39 / 51

Page 40: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Rekursion

Definition 4.14Rekursion ist ein oder mehrere Aufrufe der Prozedur innerhalb von sich selbst.

40 / 51

Page 41: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Rekursion: Einfachstes Beispiel - Fakultat ausrechnen

Pseudocode 4.10 f = Fakultat(n)

require: n ∈ N0.ensure f = n!.

1: if n ≤ 1 :2: f := 13: else:4: f := n · Fakultat(n − 1)5: end

I Entartete Falle werden abgedeckt.

I Mit jedem weiteren rekursiven Aufruf wird der Eingabeparameter einfacher.

I Wie kann man zeigen, dass die Funktion Fakultat terminiert?

41 / 51

Page 42: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Ausfuhrung von Fakultat

Pseudocode 4.11 Verwendung von Fakultat

1: Fakultat(3) in die Standartausgabe schreiben

I Rekursionsbaum fur die Ausfuhrung von Fakultat(3):

I Fakultat(3) −→ Fakultat(2) −→ Fakultat(1)

42 / 51

Page 43: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Details der Ausfuhrung von Fakultat(3)

I Fakultat startet (erste Ausfuhrung). Parameter n, f werden generiert; n := 3.

I Fakultat startet (zweite Ausfuhrung). (Parameter n, f werden generiert; n := 2)

I Fakultat startet (dritte Ausfuhrung) Parameter n, f werden generiert; n := 1

I Fakultat terminiert (dritte Ausfuhrung). Wert 1 wird zuruckgegeben. Parametern, f werden geloscht.

I Fakultat terminiert (zweite Ausfuhrung). Wert 2 wird zuruckgegeben.Parameter n, f werden geloscht.

I Fakultat terminiert (erste Ausfuhrung). Wert 6 wird zuruckgegeben. Parametern, f werden geloscht.

43 / 51

Page 44: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Bemerkungen zur rekursiven Version der Fakultat

I Fur die Ausfurhung von Fakultat(n) brauchen wir O(n) Einheiten im Speicher(ohne es direkt im Programm zu sehen)

44 / 51

Page 45: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Rekursion: Praktisches Beispiel - schnelles Potenzieren; nichtrekursiveVersion

Pseudocode 4.12 p = PotenzNichtRekursiv(a, n)

require: a > 0, n ∈ N0

ensure p = an

1: p := 12: while n > 0 :3: p := p · a4: n := n − 15: end

I Anzahl der Arithmetischen Operationen Θ(nk ) mit k =??.

45 / 51

Page 46: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Rekursion: Praktisches Beispiel - schnelles Potenzieren

Pseudocode 4.13 p = Potenz(a, n)

require: a > 0, n ∈ N0.ensure p = an.

1: if n = 0 :2: p := 13: else if n ist gerade :4: temp := Potenz(a, n/2)5: p := temp · temp6: else:7: temp := Potenz(a, bn/2c)8: p := a · temp · temp9: end

I Schneller als direkte iterative Losung (leichtes Beispiel: n ist Potenz von 2; aberauch fur andere Instanzen)

I Iterative variante ist moglich.

I Rekursive Variante ist naheliegend und einfach.

46 / 51

Page 47: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Rekursion: großter gemeinsamer Teiler

Pseudocode 4.14 g = ggT(a, b)

require: a, b ∈ Z.ensure g ist der großte gemeinsamer Teiler von a, b.

1: a := |a|, b := |b|2: if a > b :3: vertauschen(a, b)4: end5: if a = 0 :6: g := b7: else:8: g := ggT(a, b − a)9: end

I Sehr ineffizient.

I Wir setzen ggT(0, 0) = 0.

47 / 51

Page 48: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Rekursion: Fibonacci-Zahlen

Definition 4.15Die Folge der Fibonacci-Zahlen: F0 = 0, F1 = 1, und Fi = Fi−1 + Fi−2 fur i ≥ 2 miti ∈ N.

Pseudocode 4.15 f = fibonacci(i)

require: i ∈ N0.ensure f ist die i-te Fibonacci Zahl.

1: if i ≤ 1 :2: f := i3: else:4: f := fibonacci(i − 1) + fibonacci(i − 2)5: end

I Rekursionsbaum fur der Ausfuhrung von fibonacci(4) enthalt mehrfache Aufrufevon fibonacci(2), fibonacci(1) und fibonacci(0).

I Daher: nicht effizient.

48 / 51

Page 49: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Rekursion: die Turme von Hanoi

I Gegeben sind drei Stabe (S= Start, Z = Ziel, H - Hilfstab).

I Auf dem Stab S befinden sich n ∈ N gelochte Scheiben verschiedener Große dievon oben nach unten nach der Große aufsteigend sortiert sind.

I Die obersten Scheiben konnen von einem Stab verlegt werden (falls dabei dieScheiben auf jedem Stab sortiert bleiben)

I Ziel: Alle Stabe von S nach Z zu verlegen.

49 / 51

Page 50: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Rekursive losung fur “Turme von Hanoi”

Pseudocode 4.16 LoseTHanoi(n, S ,Z ,H)

require: n ∈ N, S,Z ,H haben verschiedene Werte.ensure Die Losung der Aufgabe “Turme von Hanoi” wird ausgegeben.

1: if n = 1 :2: Ausgeben: Verlege die Scheibe der Große n von S nach Z3: else:4: LoseTHanoi(n − 1,S ,H,Z)5: Ausgeben: Verlege die Scheibe der Große n von S nach Z6: LoseTHanoi(n − 1,H,Z , S)7: end

50 / 51

Page 51: 1. Übung zum Kurs Algorithmische Mathematik II fileZudem soll das Programm diese eingelesene Informationen der person-Struktur in einem Satz ausgeben. 2.Splitten Sie dann Struktur,

Weitere Bemerkungen zur Rekursion

I Indirekte rekursive Aufrufe sind moglich (z.B:Funktion1 −→ Funktion2 −→ Funktion3 −→ Funktion1).

I Ausgangsbedingung (die den entarteten Fall behandelt) ist entscheidend fur dieTerminierung.

I Rekursionstiefe ist die maximale Anzahl der geschachtelten rekursiven Aufrufe.

I Rekursion ist eine Alternative zu den Schleifen.

I Rechenprobleme, die man mit Arrays und iterativen Strukturen, lost, kann manmit Rekursion ohne Arrays und ohne iterative Strukturen losen (die Effizienz kannein Problem sein).

I Manche rekursive Algorithmen haben naheliegende nichtrekursive Analoga (z.B.:schnelles Potenzieren)

I Manche Compiler konnen erkennen, wo die Rekursion durch Iteration ersetztwerden kann, und generieren dabei entsprechenden iterativen ausfuhrbaren Code.

I Rekursion ist ein naturliches Mittel fur manche wichtige Klassen der Probleme(Formale Sprachen, Lexikalische Scanner, Suchalgorithmen auf Graphen)

51 / 51