Einführung in die Programmierung

Slides:



Advertisements
Ähnliche Präsentationen
Programme in C++.
Advertisements

Foliensatz von A. Weber zur Vorlesung Informatik I, Bonn, 2002/03
3. Kapitel: Komplexität und Komplexitätsklassen
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Formale Sprachen – Mächtigkeit von Maschinenmodellen
Übung 6.1Turing-Maschine 1.Machen Sie sich mit der Funktionsweise des Busy Beaver-Programms vertraut Vollziehen sie die 11 Schritte der ersten Turing-Tabelle.
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
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.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Christian Schindelhauer
Christian Schindelhauer
Einführung Inhalte dieses Kurses Generationen der Programmiersprachen
Einführung in die Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Effiziente Algorithmen
Dateien Datei = File (engl.) Mögliche Inhalte einer Datei
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Praktische Optimierung
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
2.4 Rekursion Klassifikation und Beispiele
Programmieren in C Einführung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Arne Vater Wintersemester 2006/ Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Analyse der Laufzeit von Algorithmen
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Sprachen und Programmiersprachen
Praktische Informatik 1
Programmieren in C Einführung
Praktische Optimierung
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmierung
 Präsentation transkript:

Einführung in die Programmierung Wintersemester 2017/18 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund

Zum Begriff „Informatik“ Zum Begriff „Algorithmus“ Einleitung Gliederung Zum Begriff „Informatik“ Zum Begriff „Algorithmus“ Zum Begriff „Programmieren“ G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 2

Die Informatik handelt vom maschinellen Problemlösen. Was ist Informatik? Problem Erste Näherung: Die Informatik handelt vom maschinellen Problemlösen. ? bzw. Die Informatik ist die Wissenschaft von der methodischen Beherrschung algorithmisch lösbarer Probleme. Maschine G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 3

Was ist ein Algorithmus? Problem Algorithmus Lösung Algorithmus: (anschaulich) Beschreibung eines Weges vom Problem zur Lösung. Randbedingungen: Der Weg muss formal so präzise definiert sein, dass er im Prinzip von einer Maschine (rein mechanisch) gegangen werden kann. Problem und Lösung müssen vorher formal spezifiziert werden. G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 4

Algorithmus: Beispiele Algorithmen-ähnlich: Kochrezepte Bastelanleitungen Partituren … Selten exakt ausformuliert Interpretationsspielräume Unschärfe („fuzzy“), Vagheit Algorithmen aus der Schulzeit: „schriftliche“ Addition zweier Zahlen „schriftliche“ Multiplikation zweier Zahlen … 2436 +1383 3819 G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 5

Algorithmus: Formalere Definition Ein Algorithmus gibt an, wie Eingabedaten schrittweise in Ausgabedaten umgewandelt werden. Er beschreibt also eine Abbildung f: E → A von der Menge der Eingabedaten E in die Menge der Ausgabedaten A und wie die Abbildung zu „berechnen“ ist. Ein Algorithmus wird korrekt genannt, wenn er den spezifizierten Zusammenhang zwischen E und A für alle Eingaben aus E erfüllt und wenn er terminiert. G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 6

Beispiel: „Finde jüngste Person hier im Raum“ Problemanalyse Annahme: Es sind n ≥ 1 Personen im Raum Formulierung „jüngste Person“ eindeutig?  Nein! Genauigkeit der Altersangabe in Sekunden oder Tage oder Jahre? Es könnten ≥ 2 Personen gleichen Alters im Raum sein! zu a) Annahme: Jahre zu b) Reihenfolge der Personen festlegen; wähle 1. Person, die minimales Alter hat Spezifikation Gegeben: Folge von n Altersangaben a1, a2, …, an in Jahren, n ≥ 1 Gesucht: aj = min(a1, a2, …, an), wobei j die erste Stelle in der Folge sei, an der das Minimum auftritt G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 7

Beispiel „Finde jüngste Person hier im Raum“ Algorithmenentwurf Gegeben: Folge von n Altersangaben a1, a2, …, an in Jahren, n ≥ 1 Gesucht: aj = min(a1, a2, …, an), wobei j die erste Stelle in der Folge sei, an der das Minimum auftritt [ Wähle 1. Kandidat ] Setze j = 1 und x = aj. [ Suchlauf ] Setze i = 2. Solange i ≤ n gilt, falls ai < x, dann setze j = i und x = aj. [ jetzt gilt aj = min(a1, …, ai) ] erhöhe i um 1 [ Ausgabe ] Person j mit Alter x ist eine jüngste Person G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 8

Beispiel „Finde jüngste Person hier im Raum“ Gegeben: Folge von 8 Altersangaben 20, 21, 20, 19, 18, 19, 18, 20 1 2 3 4 5 6 7 8 j (1) 20 (2) 21 19 18 G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 9

Beispiel „Finde jüngste Person hier im Raum“ Korrektheit Behauptung: Der Algorithmus ist korrekt. Beweis: Wenn der Algorithmus anhält, dann ist aj = min(a1, …, ai) mit 1 ≤ i ≤ n. Das gilt für i = 1 nach Schritt (1) und während des Suchlaufs invariant für alle i an der angegeben Stelle. j ist die erste Stelle, an der (a) gilt, weil im Fall ai = x kein Austausch mehr stattfindet, sondern nur bei ai < x. Der Algorithmus hält an, nachdem i = n war. q.e.d. G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 10

Beispiel „Finde jüngste Person hier im Raum“ Effizienz Wir messen den Zeitaufwand in Einheiten E. Aktion Aufwand Häufigkeit der Aktion Setze j = 1, x = aj 2 E 1 Setze i = 2 1 E Test i ≤ n n Test ai < x n - 1 Setze j = i, x = aj A Erhöhe i Insgesamt also: T(n) = 2 + 1 + n + (n-1) + 2A + (n-1) E = (3n + 2A + 1) E G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 11

Beispiel „Finde jüngste Person hier im Raum“ Effizienz T(n) = (3n + 2A + 1) E  Welche Werte kann A annehmen? Schlimmster Fall (engl. worst case): A = n – 1 d.h., das Alter aller Personen ist paarweise verschieden und es ist in der Aufzählung absteigend sortiert  Tmax(n) = (5n – 1) E Bester Fall (engl. best case): A = 0 d.h., erste Person in der Aufzählung ist bereits eine jüngste Person  Tmin(n) = (3n + 1) E Hier: zwei Szenarien G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 12

Erfahrung & Kreativität Vom Problem zur Maschine … Algorithmus Problem Erfahrung & Kreativität Programm #include <iostream> using namespace std; int main() { cout << “Hi!“; return 0; } „Handwerk“ Maschine Compiler G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 13

Schwerpunkte der Veranstaltung Vorlesung + Übung + Praktikum Problemanalyse Spezifikation Algorithmenentwurf Korrektheit / Verifikation Effizienzuntersuchungen Programmieren (kodieren) Testen / Fehlerbeseitigung Wartung / Pflege → BSc Informatik → DAP 2 Vorlesung + Praktikum Übung + Praktikum ― G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 14

Programmiersprachen Vorbemerkungen Denken  Sprache Fachsprachen für komplexe Sachverhalte mit akzeptablen Aufwand für Fachleute Programmiersprache syntaktische Form, um Problemlösungen zu beschreiben muss von Maschine interpretiert werden können der Programmierer muss genau wissen, wie die Maschine die vereinbarte Sprache interpretiert! G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 15

Programmiersprachen Historisches in Kürze: In den 1930er Jahren: Präzisierung von berechenbaren Funktionen, Algorithmus, Turing-Maschine, -rekursive Funktion, -Kalkül, … In den 1940er Jahren: reale technische Realisierung von Rechenmaschinen (von-Neumann) → Konrad Zuse (Z3), Howard Aiken (Mark I), Eckert/Mauchly (ENIAC), … zuerst: Programmierung in Maschinensprache (oder mit Kabeln) dann: Assemblersprachen → Ersetzung von Zahlen (Maschinencode) durch mnenomische Bezeichnungen → leichter zu merken, z.B. ADD, JMP, BNE, … darauf aufbauend: höhere Programmiersprachen → sind abstrakter, ermöglichen komplexe Sachverhalten einfacher auszudrücken → Übersetzungsalgorithmen erlauben Rückführung auf niedere Sprachen → Compiler, Assembler, … G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 16

Programmiersprachen Klassifikation nach Denkweisen (Paradigmen) Imperativ / prozedural → FORTRAN, BASIC, PASCAL, C, … Funktional → LISP, SCHEME, HASKELL, F#, … Relationen- oder Logik-bezogen → PROLOG, … Objektorientiert → Smalltalk, C++, Java, C#, … Mehr dazu am Semesterende, wenn Sie C und C++ kennen gelernt haben! G. Rudolph: Einführung in die Programmierung ▪ WS 2017/18 17