1 2 Was ist Informatik ? Die Wissenschaft der Informatik umfaßt alle Modelle (Methoden, Verfahren, Konzepte, etc.), die dazu dienen eine gegebene Eingabe in eine beliebige Ausgabe zu verwandeln Kapitel 1: Einführung Input VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 3 Informatik Output VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 4 Modelle der Informatik Kochrezept Amerikanischer Wildreis Computerprogramm Modelle der 1 Tasse ergibt 3 Portionen Reis gründlich waschen 1 Tasse Reis in 3 Tassen kochendes Wasser geben kurz aufkochen lassen bei schwacher Hitze 25 min bedeckt dünsten Reis abdecken, salzen, mit Gabel auflockern restliche Flüssigkeit verdampfen Spielregeln Input Bedienungsanleitung Informatik Kochrezept Output ... Informatik VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 5 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 6 1.1 Algorithmus Definition Algorithmus - Eigenschaften (1) Eingangswerte/Ausgabewerte Unter Algorithmus versteht man die schrittweise Vorschrift zur Berechnung gesuchter aus gegebenen Größen, in dem jeder Schritt aus einer Anzahl eindeutig ausführbarer Operationen und einer Angabe über den nächsten Schritt besteht. EW sind vor, AW nach der Ausführung bekannt Eindeutigkeit Jeder Schritt der Ausführung muß eindeutig sein, keine Mehrdeutigkeiten möglich Endlichkeit statische Ursprung mit endlich vielen Zeichen formulierbar Algorithmus ≈ Berechnungsvorschrift Ben Musa Al-Chwarizmi (usbekischer Mathematiker um 825), erstes Buch über Algebra arithmos ... griechisches Wort für Zahl VO Grundlegende Algorithmen und Datenstrukturen dynamische in endlich vielen Schritten beendbar E. Schikuta VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 1 7 8 Algorithmus - Eigenschaften (2) Vollständigkeit 1.2 Algorithmus - Darstellung Graphische Darstellung sollte vollständig sein, sollte alle möglichen Fälle behandeln Ablaufdiagramme Struktogramme Korrektheit Pseudocode sollte das gewünschte Ergebnis liefern künstliche Programmiersprachenderivate Stilisierte Prosa Granularität der Operationen Spezifikationsgenauigkeit der einzelnen Beschreibungselemente Programmiersprachen VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 9 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 10 Graphische Darstellung Ablaufdiagramm gerichtete Kante Aktion Graphische Darstellung Struktogramm Blöcke Aktionen summe ← 0 n > 0 summe ← 0 nein while n > 0 ja summe ← summe + n n ← n - 1 summe ← summe + n n ← n - 1 drucke summe drucke summe VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 11 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 12 Vor- und Nachteile der Graphischen Darstellung Pro: Programmiersprachenderivate leicht erfassbar, Standardnotation, auch dem Anwender verständlich (Diskussionsbasis) Anlehnung an die Programmiersprachen Pascal oder MODULA-2, Ziel eine der natürlichen Sprache möglichst nahe Kunstsprache zu schaffen Con: große Programme unüberschaubar, schwierig direkt in Programmiersprache umsetzbar, schwer editierbar, automatische Codegenerierung eher beschränkt (meist nur Prozedurköpfe) VO Grundlegende Algorithmen und Datenstrukturen Pseudocode E. Schikuta summe = 0; while n > 0 do begin summe = summe + n; n = n - 1; end; print(summe); VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 2 13 14 Pseudocode Stilisierte Prosa Vor- und Nachteile des Pseudocodes Pro: Beschreibung der schrittweisen Ausführung Programmiersprache sehr ähnlich, direkte Umsetzung einfach Con: Schritt 1: Schritt 2: Schritt 3: ähnliche Komplexität wie Programmiersprache, für den Anwender oft schwer verständlich Initialisiere. Setze summe auf 0. Abarbeitung der Schleife. Solange n größer als 0, addiere n zu summe, ziehe 1 von n ab. Ausgabe. Drucke summe. VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 15 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 16 Programmiersprache Programmiersprachengruppen Kenneth E. Iverson, 1979 Generation Generation Typ Typder der Programmiersprache Programmiersprache erste Maschinensprachen erste Maschinensprachen “Notation as a Tool of Thought” int summe = 0; while(n > 0) { summe += n; n--; } printf(“%d\n”, summe); dritte dritte Maschinenorientierte Maschinenorientierte Sprachen Sprachen(Assembler) (Assembler) Problemorientierte ProblemorientierteSprachen Sprachen vierte vierte Datenbanksprachen Datenbanksprachen BinärBinär-und undHexadezimal Hexadezimal Programmierung Programmierung OS/370 Assembler, OS/370 Assembler,2650 2650 Assembler, Assembler,8080 8080Assembler Assembler FORTRAN, FORTRAN,COBOL, COBOL,Pascal, Pascal, MODULA-2, MODULA-2,CC SQL, SQL,Natural-2 Natural-2 fünfte fünfte Sprachen Sprachender derKI KI Lisp, Lisp,PROLOG PROLOG ?? OO OOSprachen Sprachen Smalltalk Smalltalk ?? hybride hybrideSprachen Sprachen C++ C++ zweite zweite Pro: direkt ausführbar Con: Vertreter Vertreter komplex, für Entwurf nur sehr beschränkt einsetzbar VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 17 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 18 1.3 Programmstrukturen Sequenz, Zuweisung Elemente einer prozeduralen Programmiersprache Zuweisung Sequenz Aktion 1 j ← 1 Aktion 2 j ← j + 1 Funktion/Prozedur Verzweigung Schleife repeat Form while Form for Form j = 1; j = j + 1; Aktion 1 oder Satz (Böhm / Jacopini 1966): Aktion 2 Jede berechenbare Funktion kann durch eine Kombination dieser 4 Elemente berechnet werden VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta VO Grundlegende Algorithmen und Datenstrukturen j = 1; j = j++; E. Schikuta 3 19 20 Verzweigung ja ja ? j > n Aktionsblock wird solange wiederholt, wie die Bedingung (Eintrittsbedingung) gilt nein nein j ← 0 while - Schleife nein while j < n ja nein j ← i while (Bedingung true) j ← j + 1 ja Aktion JA Bedingung erfüllt ? Teil 1 if (j > n) j = 0; else j = i; NEIN Teil 2 Eintrittsbedingung while (j < n) j = j + 1; Anweisung(en), Schleifenblock VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 21 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 22 while-Schleife (2) Spezialfall: Bedingung am Ende des Aktionsblocks, “repeat-Form” Aktionsblock wird mindestens einmal ausgeführt. Danach wird er solange wiederholt, wie die Schleifenbedingung (Wieder-Eintrittsbedingung) gilt for-Schleife Aktionsblock wird n-mal durchgeführt j ← j + 1 while j < n AnfW EndW SW nein ... Anfangswert ... Endwert ... Schrittweite for i=1 to 5 a[i] ← i ja Aktion nein for (AnfW, EndW, SW) while (Bedingung true) ja Anweisung(en), Schleifenblock Aktion do { j = j + 1; } while (j < n); for(i=1; i<=5; i++) a[i] = i; Eintrittsbedingung VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 23 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 24 Funktion / Prozedur (1) Abgeschlossene algorithmische Einheiten bestehen aus Sequenzen, Verzweigungen, Schleifen und Funktions-/Prozeduraufrufen Funktion Eingangswerte, genau ein Ausgangswert Prozedur nur Eingangswerte beide können über Parameterliste Werte zurückliefern VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta Funktion/Prozedur (2) Funktion int sum(int n) { int summe = 0; while(n > 0) { summe += n; n--; } return summe; } VO Grundlegende Algorithmen und Datenstrukturen Prozedur void sum(int n) { int summe = 0; while(n > 0) { summe += n; n--; } printf(“%d\n”, summe); } E. Schikuta 4 25 26 1.4 Rekursion Rekursive Programmteile Ein Objekt heißt rekursiv, wenn es durch sich selbst definiert ist, oder sich selbst (teilweise) enthält. Eine Prozedur/Funktion heißt rekursiv, wenn sie sich in der Folge ihrer Abarbeitung selbst referenziert. Beispiele: Eine Prozedur/Funktion P heißt direkt rekursiv, wenn sie sich explizit selbst aufruft. Hingegen ist P indirekt rekursiv, wenn sie den Aufruf einer anderen Prozedur/Funktion enthält, die ihrerseits wieder P (direkt oder indirekt) aufruft. Fernseher Mathematik (Definition der Fakultät) n = 0 n! = n > 0 → 1 → n ⋅ ( n − 1) ! VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 27 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 28 Direkte Rekursion Berechnung der Fakultät Direkte Rekursion, Beispiel int fkt(int n) { if(n == 0) return(1); else return(n*fkt(n-1)); } Berechnung von 3! Aufruf: fkt(3) ⇒ 6 // Berechnung von n! für n>=0 int fakultaet(int n) { if(n == 0) rekursiver return(1); Aufruf else return(n * fakultaet(n-1)); } fkt(2) fkt(1) fkt(0) 3*fkt(2) 2*fkt(1) 1*fkt(0) return (3*2) return (2*1) return (1*1) n==0 Berechnung der Fibonacci Zahlen // Berechnung der Fibonacci Zahlen int fibonacci(int n) { if(n <= 1) return 1; return fibonacci(n-1) + fibonacci(n-2); } VO Grundlegende Algorithmen und Datenstrukturen fkt(3) 3*2*1*1 E. Schikuta 29 return(1) 2*1*1 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 30 Indirekte Rekursion Definition eines Ausdrucks (expression) in MODULA-2 indirekte Rekursion, Beispiel Ableitung des Ausdrucks: 3 * ( 4 + 5 ) (Ausschnitt) Expr SimpleExpr Term Expr ::= SimpleExpr [RelOp SimpleExpr] Factor SimpleExpr ::= [SignOp] Term [AddOp Term] Value Term ::= Factor {MulOp Factor} MulOp Term … VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta Expr ) SimpleExpr 3 Factor ::= ‘(‘ Expr ‘)’ | NOT Factor | Value Factor ( * Expr ::= SimpleExpr [RelOp SimpleExpr] SimpleExpr ::= [SignOp] Term [AddOp Term] Term ::= Factor {MulOp Factor} Factor ::= ‘(‘ Expr ‘)’ | NOT Factor | Value + Term Value Value 4 5 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 5 31 32 Charakteristik rek. Lösungsansätze Eigenschaften Rekursiver Ansatz Drei Kriterien Ziel ist die schrittweise Entwicklung der Lösung ausgehend von einem bzw. zurückführend auf einen Fixpunkt (eine Ausgangslösung) Vorteile Verringern des Problemgrades Ein Problem der Größe n wird in eine endliche Anzahl von Problemen zerlegt, deren Größe kleiner n ist. Abbruchkriterium Spezifikation einer zu erreichenden Programmsituation, bei der das Programm die rekursiven Aufrufe beendet. knapper und prägnanter Lösungsweg oft Ansatz direkt aus der Problemdefinition ableitbar Programm einfacher lesbar Konstruktion des Endergebnisses Das Endergebnis sukkzessiv (meist beim rekursiven Aufstieg) aus den Teilergebnissen zusammensetzen. Nachteile Programme können fehlerhafter sein logische Fehler schwerer zu finden mögliche Verlangsamung der Programme Programm schwerer lesbar (vergl. Vorteile!) VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 33 VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 34 Kriterien Algorithmus Darstellung Programmstrukturen Rekursion Abbruchkriterium if(n == 0) return(1); else return(n*fakultaet(n-1)); Konstruktion des Endergebnisses VO Grundlegende Algorithmen und Datenstrukturen Was nehmen wir mit? Zerlegung der Problemgröße E. Schikuta VO Grundlegende Algorithmen und Datenstrukturen E. Schikuta 6