Abstrakte Algorithmen und Sprachkonzepte

Ähnliche Dokumente
Einführung in die Informatik 1

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Algorithmenkonstruktion

Algorithmen und Datenstrukturen (für ET/IT)

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme

2. Algorithmenbegriff

Programmierung für Mathematik HS11

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

5.3 Korrektheit und Verifikation

Flussdiagramm / Programmablaufplan (PAP)

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Elementare Konzepte von

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

5.3 Korrektheit und Verifikation

Einführung in die Informatik I

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

C- Kurs 04 Anweisungen

Learning Object-Oriented Programming. Algorithmen. Algorithmusbegriff. Klärung der Herkunft des Begriffs Formale Definition von Algorithmus

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

2 Teil 2: Nassi-Schneiderman

Programmieren 1 C Überblick

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

III.1 Prinzipien der funktionalen Programmierung - 1 -

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Labor Software-Entwicklung 1

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Java Anweisungen und Ablaufsteuerung

5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einführung in die Informatik I

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Einführung in die Theoretische Informatik

Informatik Algorithmen und Programme

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Tutorübungen

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

5. Elementare Befehle und Struktogramme

Einführung in die Informatik Algorithms

Logik. Ernest Peter Propädeutikum Mathematik Informatik/Wirtschaftsinformatik, Block Aussage

Abschnitt 11: Korrektheit von imperativen Programmen

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

einseitige Selektion zweiseitige Selektion

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Ideen und Konzepte der Informatik

Rekursive Funktionen

Grundlagen der Informatik I (Studiengang Medieninformatik)

1 Algorithmische Grundlagen

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Klassenvariablen, Klassenmethoden

ECDL MODUL COMPUTING. Syllabus Version 1.0

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Algorithmen und Datenstrukturen II

Verhalten. Def. und Nutzen von Verhalten. Pseudocode Schreibtischtest. Algorithmen

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen

VBA-Programmierung: Zusammenfassung

6. Iteration (Schleifenanweisungen)

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

Lösungsvorschlag Serie 2 Rekursion

Rekursive Funktionen

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

2 Programmieren in Java I noch ohne Nachbearbeitung

Programmierung für Mathematik (HS13)

Turing-Maschinen: Ein abstrakes Maschinenmodell

Software Entwicklung 1

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Algorithmen & Programmierung. Rekursive Funktionen (1)

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

System.out.println("TEXT");

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Verifizierende Testverfahren

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Transkript:

Abstrakte Algorithmen und Sprachkonzepte Thomas Röfer Begriff des Algorithmus Algorithmenaufbau Programmiersprachliche Grundkonzepte Interative und rekursive Algorithmen

Rückblick Aufbau und Funktionsweise eines Computers Hardware Software Anwendersoftware Betriebssystem Hardware Dualsystem von Neumann Architektur Schichtenmodell PI-1: Abstrakte Algorithmen und Sprachkonzepte 2

Algorithmus Ein Algorithmus ist die Beschreibung einer Methode zur Lösung einer gegebenen Aufgabenstellung. Der Begriff kann sehr allgemein gefasst werden auch Kochrezepte und Gebrauchsanweisungen zum Zusammenbau von Geräten sind Algorithmen. In der Informatik sind wir an Algorithmen interessiert, die in programmierbare Funktionen münden. Beispiele Elementare Rechenverfahren wie schriftliches Addieren, Subtrahieren, Multiplizieren und Dividieren Ein Verfahren zur Umwandlung von Dezimalzahlen in Dualzahlen (Der fundamentale Instruktionszyklus eines Prozessors) PI-1: Abstrakte Algorithmen und Sprachkonzepte 3

Algorithmus Definition Spezifikation Eingabespezifikation: Eingabegrößen, Anforderungen an diese Ausgabespezifikation: Ausgabegrößen, Eigenschaften dieser Durchführbarkeit Endliche Beschreibung: Verfahren muss in endlichem Text vollständig beschrieben sein Effektivität: jeder Schritt muss effektiv ausführbar sein Determiniertheit: Verfahrensablauf ist zu jedem Zeitpunkt fest vorgeschrieben Korrektheit partielle Korrektheit: jedes berechnete Ergebnis genügt der Ausgabespezifikation, sofern die Eingaben der Spezifikation genügt haben Terminierung: Halt nach endlich vielen Schritten mit einem Ergebnis, sofern die Eingaben der Spezifikation genügt haben PI-1: Abstrakte Algorithmen und Sprachkonzepte 4

Grundschema des Algorithmenaufbaus Name des Algorithmus und Liste der Parameter Spezifikationen des Ein-/Ausgabeverhaltens Schritt 1: Vorbereitung Einführung von Hilfsgrößen etc. Schritt 2: Trivialfall? Prüfe, ob ein einfacher Fall vorliegt. Falls ja, Beendigung mit Ergebnis. Schritt 3: Arbeit (Problemreduktion, Ergebnisaufbau) Reduziere die Problemstellung X auf eine einfachere Form X, mit X > X bezüglich einer wohl fundierten Ordnung >. Baue entsprechend der Reduktion einen Teil des Ergebnisses auf. Schritt 4: Rekursion bzw. Iteration Rufe zur Weiterverarbeitung den Algorithmus mit dem reduzierten X erneut auf (Rekursion), bzw. fahre mit X bei Schritt 2 fort (Iteration). PI-1: Abstrakte Algorithmen und Sprachkonzepte 5

Flussdiagramme Auch: Programmablaufpläne (PAP) Beginn / Ende des Algorithmus Anweisungen, Operationen Verzweigungen: Der weitere Verlauf hängt vom Wahrheitswert des Ausdrucks im Innern ab. PI-1: Abstrakte Algorithmen und Sprachkonzepte 6

Beispiel: Fakultät Mathematisch n! = n (n 1) 1, n, n > 0 0! = 1 Beispiele Möglichkeiten im Lotto 6 aus 49 : Möglichkeiten, 280 Studenten auf 298 Plätze zu verteilen: Allgemeinsprachliche Beschreibung Berechnung der Fakultät von n: Die Fakultät von 0 bzw. 1 ist 1. ( 49 6)! 6! Ansonsten bilde das Produkt aller Zahlen zwischen 2 und n. 49! 298! ( 298 280)! PI-1: Abstrakte Algorithmen und Sprachkonzepte 7

Beispiel: Fakultät Algorithmus: factorial(n) Anforderung: n Zusicherung: das Resultat ist n! 1. Kopiere 1 nach r. 2. Kopiere n nach i. 3. Prüfe, ob i größer als 1. 4. Falls nein, gib das Resultat r aus. 5. Falls ja, multipliziere r mit i und ziehe 1 von i ab. 6. Fahre mit Schritt 3 fort. PI-1: Abstrakte Algorithmen und Sprachkonzepte 8

Programmiersprachliche Grundkonzepte Datenspeicher und Zuweisungen Variablen und Zuweisungen zum Speichern von berechneten (Zwischen-)Ergebnissen Konstanten zum Bezeichnen fester Werte, z.b. π Ausdrücke Boolsche und arithmetische Ausdrücke zum Auswerten von Formeln und Bedingungen, z.b. a + b oder a > b Sequenzierungsanweisungen Blöcke zum Gruppieren von Daten und Anweisungen, z.b. in Java: { } Funktionsaufrufe zum mehrmaligen Wiederverwenden einmal definierter Algorithmen, z.b. x = sin() + sin() Bedingte Anweisungen zum Verzweigen im Programmfluss, z.b. if(a > b) {r = a;} else {r = b;} Iterationsanweisungen zur Realisierung von Schleifen, z.b. while(a > b) {a = a b;} Hilfskonstrukte Kommentare: /* Kommentar */ oder // Kommentar bis Zeilenende PI-1: Abstrakte Algorithmen und Sprachkonzepte 9

Sprünge (goto) Zweck Fortsetzung des Programmflusses an anderer Stelle Nachteile Sprünge führen zu sog. Spaghetti- Code In Java gibt es kein goto BASIC mit Zeilennummern 10 INPUT n 20 r = 1 30 i = n 40 IF i > 1 THEN GOTO 70 50 PRINT r 60 END 70 r = r * i 80 i = i 1 90 GOTO 40 BASIC mit Sprungmarken INPUT n r = 1 i = n loop: IF i > 1 THEN GOTO reduct PRINT r END reduct: r = r * i i = i 1 GOTO loop PI-1: Abstrakte Algorithmen und Sprachkonzepte 10

Strukturierte Verzweigungen Verzweigung mit Sprüngen IF NOT(Bedingung) THEN GOTO else // Anweisungen, falls Bedingung wahr GOTO ende else: // Anweisungen, falls Bedingung falsch ende: // Weiter im Programmfluss Strukturierte Verzweigungen IF Bedingung THEN // Anweisungen, falls Bedingung wahr ELSE // Anweisungen, falls Bedingung falsch END IF // Weiter im Programmfluss In Java if(bedingung) // Anweisung, falls Bedingung wahr else // Anweisung, falls Bedingung falsch Tipps else-zweig kann fehlen Falls mehr als eine Anweisung: { } Einrückungen! PI-1: Abstrakte Algorithmen und Sprachkonzepte 11

Strukturierte Schleifen Schleifen mit Sprüngen loop: IF NOT(Bedingung) THEN GOTO ende // Anweisungen, solange Bedingung wahr GOTO loop ende: // Weiter im Programmfluss Strukturierte Schleifen WHILE Bedingung DO // Anweisungen, solange Bedingung wahr END WHILE // Weiter im Programmfluss In Java while(bedingung) // Anweisung, solange Bedingung wahr Verschiedene Schleifen-Typen Abweisend: while( ) Annehmend: do while( ) Zählen: for( ; ; ) PI-1: Abstrakte Algorithmen und Sprachkonzepte 12

Struktogramme (Nassi-Shneiderman) Fakultät Programmablaufplan Struktogramm PI-1: Abstrakte Algorithmen und Sprachkonzepte 13

Beispiel Primzahlberechnung PI-1: Abstrakte Algorithmen und Sprachkonzepte 14

Beispiel: Fakultät in Java (iterativ) In Java class Factorial { static int factorial(int n) { // Vorbereitung int r = 1; int i = n; // Problemreduktion while(i > 1) { r = r * i; i = i - 1; } // Trivialfall return r; } } Testfälle Trivialfälle: n = 0, 1 Sonstige Fälle, z.b. n = 3, 6 Verhalten in Fehlerfällen, z.b. n = -1, 13 Gültige Eingabewerte n {0 12} Fakultät nur für natürliche Zahlen definiert Maximal 12! lässt sich noch mit 32-Bit- Integers repräsentieren! Tipp static-funktionen sind Klassen-Methoden, d.h. sie beziehen sich nicht auf ein bestimmtes Objekt Daher muss keine Instanz der Klasse existieren, um sie aufrufen zu können Aufruf von außen: Klassenname.methodenname(parameterliste) PI-1: Abstrakte Algorithmen und Sprachkonzepte 15

Programmentwicklung in BlueJ Schema 1. Prototyp erstellen, der zumindest die richtige Signatur hat und sich kompilieren lässt 2. Testklasse samt der Testfälle erstellen (Trivialfall + weitere) 3. Prototyp zu vollständiger Implementierung erweitern, immer wieder testen Vorteile Automatisches Testen ist viel einfacher als manuelles Testen Wahl der Testfälle muss wohlüberlegt sein Testen ist Pflicht! Ohne dokumentierte Tests gibt s Punktabzug Bewertung: Programm 40%, Dokumentation 40%, Tests 20% PI-1: Abstrakte Algorithmen und Sprachkonzepte 16

Rekursion Rekursiver Ansatz der Problemlösung Versucht, ein Problem P(X) nach folgendem Schema zu lösen: Basis: Direkte Lösung, falls Problemstellung (Eingabe) X einfacher Natur ist (Trivialfall) Schritt: Führe eine Lösung für das Problem P(X) für komplexere Problemstellungen X durch einen Schritt der Problemreduktion auf die Lösung des gleichen Problems für eine einfachere Problemstellung P(X ) zurück. Dabei muss X > X gelten für eine wohlfundierte Ordnungsrelation >. Beispiel factorial ( n) 1 = n factorial ( n 1) falls n sonst = 0 PI-1: Abstrakte Algorithmen und Sprachkonzepte 17

Beispiel: Fakultät in Java (rekursiv) In Java class Factorial { static int factorial(int n) { if(n == 0) { // Trivialfall return 1; } else { // Problemreduktion return n * factorial(n - 1); } } } PI-1: Abstrakte Algorithmen und Sprachkonzepte 18