Algorithmen und Programmierung

Größe: px
Ab Seite anzeigen:

Download "Algorithmen und Programmierung"

Transkript

1 Algorithmen und Programmierung Skript zur Vorlesung Prof. Dr.-Ing. habil. Matthias Werner Stand: 24. November 2016

2 Dieses Skript wurde mit L A TEX unternutzungverschiedenerklassen/paketeerstellt. Eigene Grafiken sind mit TikZ/pgf, OmniGraffle oder Affinity Designer erstellt. Benutzte Versionen: pdftex: (TeX Live 2016) kpathsea version L A TEX-Format: 2016/03/31 KOMA-Script: 2016/05/10 v3.20 Beamer (beamerarticle): 3.36 TikZ/pdf: 3.0.1a OmniGraffle: Affinity Designer: Dieses Skript unterliegt der Creative Commons-Lizenz CC BY-NC-SA ( )3.0. Dies bedeutet im Wesentlichen, dass Inhalte dieses Skriptes für nichtkommerzielle Zwecke genutzt werden können, wenn das abgeleitete Werk den Autor dieses Skriptes nennt und sein Werk unter gleichen Bedingungen weitergibt. Details unter

3 Inhaltsverzeichnis 0. Organisatorisches Lehrveranstaltung Formalia Inhalt & Literatur Einführung in Algorithmen Beispiele Algorithmenbegriff Modelle Einführung in Programmiersprachen Grundsätzliches Geschichte C am Beispiel Python Fehler Aufgaben Typen und Speicher Typen Speicher Komplexe Typen Iterationen Einführung Schleifen in C und Python Iteration und Rekursion Syntax Einführung Formalisierung Anwendung Logik und Operatoren Boolesche Algebra Logik in C Automaten i

4 M. Werner: Algorithmen & Programmierung 7. Entwurf und Korrektheit von Algorithmen Idee Spezifikation Beweise Komplexität Motivation RAM Die O-Notation Besser Sortieren Von Türmen und Damen Rekursion und Backtracking Einführung Fibonacci-Zahlen Türme von Benares Backtracking Textsuche Dateien Einfache Suche Wildcards Let s play Einführung Hauptschleife & E/A Strategie Besserer Code Layout Dokumentation Portabilität Über den Tellerrand Anhang 327 A. Programmiersprachen allgemein 329 A.1. Galerie von Computerpionieren A.2. Wenn Programmiersprachen Filmcharaktere wären A.3. Zeittafel B. Die Sprache C 347 B.1. Schlüsselwörter B.2. Syntax B.3. Operatorenvorrang und Assoziativität B.4. Aus- und Eingabeformatierung ii

5 Inhaltsverzeichnis C. Python 373 C.1. Schlüsselwörter C.2. Syntax D. Code 397 D.1. Textsuche D.2. Tic Tac Toe Literatur 415 Index 417 iii

6 M. Werner: Algorithmen & Programmierung iv

7 Danksagung Ein Skript wie dieses ist sicher niemals vollständig und niemals fehlerfrei. Jedoch möchte ich mich bei folgenden eifrigen Lesern dafür bedanken, dass sie mich auf Fehler aufmerksam gemacht und damit dazu beigetragen haben, dieses Skript zu verbessern: 1 Jens Pönisch Mario Haustein Michael Kunz Martin Däumler Alexej Schepeljanski Robert Baumgartl Tobias Loose Marco Seidel Andreas Löscher Alexander Pöllmann Martin Zimniak Henrik Kretzschmar Robert Kiesel Peter Tröger 1 Namen in der Reihenfolge der Erstmeldung v

8 M. Werner: Algorithmen & Programmierung vi

9 Vorwort Dieses Skript wurde von mir begleitend zur der Vorlesung Algorithmen und Programmierung an der TU Chemnitz in den Semestern 2010/2011 und 2011/2012 erstellt. Es handelt sich im Wesentlichen nicht um einen eigenständigen Text, sondern um die aneinandergereihten Folien der Vorlesung, ergänzt um Zwischentexte, Anhänge und nicht zuletzt um die illustrierenden xkcd-comics von Randall Munroe. In diesem Vorwort möchte ich zwei didaktische Entscheidungen erläutern, die den Aufbau der Vorlesung und somit auch dieses Skriptes maßgeblich beeinflusst haben. In Kursen über Algorithmen ist es in der Regel üblich, entweder zuerst eine Programmiersprache zu vermitteln, um danach zu Betrachtungen von Algorithmen im Allgemeinen überzugehen; oder mit letzteren anzufangen und die Programmierung (falls sie überhaupt zum Kurs gehört und nicht nur in Pseudocode erfolgt) nachzuschieben. Ich habe mich für einen dritten Weg entschieden: einzelne abstrakte Betrachtungen zu Algorithmen wechseln sich mit Elementen der Programmierung ab; beides ist miteinander verzahnt. So wird z. B. das switch-statement in C im Laufe der Betrachtungen zu Automaten eingeführt. Ziel dieses Vorgehens ist die engere Verknüpfung von Theorie und Praxis, so dass die Theorie leichter durch die Praxis motiviert und schneller in der Praxis angewendet werden kann. Außerdem sollen lange Trockenstrecken vermieden werden. Eine zweite Entscheidung war, neben der durch die Curricula der Fakultät für Informatik der TU Chemnitz vorgegebene Programmiersprache C auch Elemente der Sprache Python in diesem Kurs zu präsentieren. Hier bestand das Ziel darin zu verdeutlichen, welche Konzepte der (imperativen) Programmierung von der benutzten Programmiersprache unabhängig sind und über C hinaus Gültigkeit besitzen, und welche lediglich dem Sprachdesign von C geschuldet sind. Entsprechend dient dieser Kurs nicht dazu, den Studentinnen und Studenten Python beizubringen: Viele wesentliche Elemente von Python wie z. B. die Objektorientierung finden keine Erwähnung. Vielmehr sollen Lernende ein Gespür für die Möglichkeiten von Programmiersprachen entwickeln und ermutigt werden, sich weitere anzueignen. Auch wenn es für den Kursteilnehmer durch diese beiden Entscheidungen zur Didaktik vielleicht etwas schwerer ist, gezielt Informationen zu dem einen oder anderen Thema herauszupicken, hoffe ich, dass die Entscheidungen im Gegenzug dazu beitragen, das gesamtheitliches Verständnis der Algorithmen und Programmierung zu verbessern. Chemnitz, Januar 2012 Matthias Werner vii

10 M. Werner: Algorithmen & Programmierung Vorwort 2016 Nach ein paar Jahren erhält das Skript zu Algorithmen und Programmierung zum Wintersemester 2016/2017 eine Aktualisierung, die im Wesentlichen den Entwicklungen der Sprache C geschuldet sind. Zum einen hat sich neben dem GNU-Compiler der CLANG-Compiler mit seiner moderneren Architektur etabliert, so dass er in diesem Skript ab diesem Semester als Standardcompiler eingesetzt wird. Zum anderen hat sich der C99-Standard (insbesondere die C++-artigen Kommentare und der entspanntere Umgang mit Variablendeklarationen) weitgehend durchgesetzt. Daher wird bei allen Beispielen die C99-Sprachvariante genutzt, ohne auf alle Feinheiten des C99- Standards einzugehen 2. Wir werden also überall dort C99-Features nutzen, wo diese bequemer sind. Außerdem wird auf Inkompatibilitäten zwischen den Sprachvarianten besonders hingewiesen. Außerdem wurden einige Kapitel gestrafft, während an anderer Stelle ausführlichere Erläuterungen eingefügt wurden beides in der Hoffnung, dass damit die Verständlichkeit des Stoffes gesteigert wird. Chemnitz, September 2016 Matthias Werner 2 C99 hat viele Eigenheiten eingeführt, die nur bei wenigen, speziellen Architekturen wirksam werden (z.b. Paddingbits). viii

11 Kapitel 0 Organisatorisches There is no such thing as a good or bad organizational structure; there are only appropriate or inappropriate ones. (Harold Kerzner) 0.1 Lehrveranstaltung Lehrveranstaltung Algorithmen und Programmierung Algorithmen und Programmierung ist Teil des Moduls Algorithmen und Datenstrukturen Lehrveranstaltung besteht aus: Vorlesung Übungen URL: Vorlesung Dozent: Prof. Matthias Werner matthias.werner@informatik.tu-chemnitz.de Professur Betriebssysteme Homepage: osg.informatik.tu-chemnitz.de Orte & Zeiten: 1. Montag, Uhr, Raum 1/ Freitag, Uhr, Raum 1/201 1

12 M. Werner: Algorithmen & Programmierung Hinweis Speziell WiInf: Teilnahme am Programmierpraktikum (aus Modul BM-WIINF) parallel zur Vorlesung wird empfohlen. Übungen Fünf Übungsgruppen Orte & Zeiten: 1. Montag, 09:15-10:45 Uhr, Raum 1/368A, Martin Richter 2. Dienstag, 11:30-13:00 Uhr, Raum 1/309, Michael Reißner 3. Mittwoch, 11:30-13:00 Uhr, Raum 1/367A, Michael Reißner 4. Donnerstag, 15:30-17:00 Uhr, Raum 1/375, Jafar Akhundov 5. Freitag, 09:15-10:45 Uhr, Raum 1/131, Jens Pönisch Dieser Termin ist vorrangig für Bachelor Wirtschaftsinformatik Bitte über OPAL für Gruppe anmelden Diese Woche in den (verbleibenden) Übungsterminen: Organisatorische Fragen Einweisung in die Poolräume, ggf. Uni-Account / OPAL-Einweisung, Regulärer Übungsbetrieb startet nächsten Montag 17. Oktober Inhalt: Klärung von Fragen zur Vorlesung Überprüfen von Lösungswegen von Hausaufgaben Bearbeiten von Beispielaufgaben Übungen sind (wie die Vorlesung) ein Angebot. Sie setzen Vorbereitung und Mitarbeit der Teilnehmer voraus. Bei Mangel an Interesse/Vorbereitung spielt der Übungsleiter nicht Alleinunterhalter, sondern beendet die Übung. Zur Beachtung In allen Lehrveranstaltungen ist das Handy lautlos zu stellen oder abzuschalten. 2

13 0. Organisatorisches I 0.2 Formalia Selbststudium Neben Vorlesung und Übung sollten Sie selbständig arbeiten Die EU-Richtlinien gehen davon aus, dass für jede Präsenz-Stunde in einer Lehrveranstaltung etwa zwei Stunden im Selbststudium verbracht werden Programmieren kann man nur durch Programmieren lernen Probieren Sie Ihre Erkenntnisse so oft wie möglich direkt am Computer aus! Sie können dafür die Computer-Pools der Fakultät (FRIZ) und des Universitäts- Rechenzentrums nutzen. Für die Nutzung der Pools und viele andere Dienste brauchen Sie einen Uni-Account Falls Sie diesen noch nicht haben, sollten Sie ihn schnellstmöglichst beantragen Formalia Voraussetzungen für Teilnahme Keinerlei formale Voraussetzungen (außer Studienzulassung ) Individuelle Voraussetzungen: Abstraktionsvermögen Abiturstoff, insbesondere anwendungsbereite Mathematik Logisches Denken Bereitschaft, am Rechner herumzuspielen Keine Voraussetzung (schadet aber auch nicht): Programmiererfahrungen / Kenntnis einer Programmiersprache Anerkennung und Leistungsnachweis Anerkennung in folgenden Studiengängen: Bachelor Informatik Bachelor Angewandte Informatik Bachelor MINT Bachelor Wirtschaftsinformatik 3

14 M. Werner: Algorithmen & Programmierung Bachelor Wirtschaftsmathematik Bachelor Mathematik mit Nebenfach Informatik Bachelor Informatik und Kommunikationswissenschaften Master Informatik für Gesellschaftwissenschaftler Klausur Am Ende des Semesters gibt es eine 120-minütige Klausur Studenten der Wirtschaftsinformatik: Prüfung geht zu 1 /3 in die Benotung des Moduls BM-INF ein Alle anderen: Bestehen der Klausur ist Zulassungsbedingung für die Modulprüfung des Moduls Algorithmen und Datenstrukturen Hausaufgaben Zum Kurs werden Hausaufgaben gestellt Durch das Lösen von speziell ausgewiesenen Hausaufgaben (Schlüsselaufgaben) können bis zu 10% Zusatzpunkte für die Abschlussklausur erlangt werden Abgabe über Open Submit: Achtung! Festgestellte Plagiate beihausaufgaben werden als Betrugsversuch gewertet! Bildquellen: Harald Dettenborn / Ralf Roletschek, CC 3.0 Lizenz Auch wenn das Lösen der Hausaufgaben nicht erzwungen ist, wird jede(r/m) das selbstständige Lösen zu besseren Rezeption des Stoffes dringend empfohlen Probeklausur Voraussichtlich am 12. Dezember wird in der Vorlesungszeit eine Probeklausur über den bis dahin behandelten Stoff stattfinden Bitte beachten! Die Teilnahme an der Probeklausur ist freiwillig. Die dort erzielten Noten gehen in keiner Weise in die Endnote ein, sondern dienen dazu, Ihnen eine Rückkopplung über Ihren Leistungsstand zu geben. Eine Teilnahme liegt also ausschließlich in Ihrem eigenen Interesse. 4

15 0. Organisatorisches I 0.3 Inhalt & Literatur Typische Korrelation zwischen Übungsabgabe und Klausurleistung 0.3 Inhalt und Literaturempfehlungen Themen der Vorlesung Diese Lehrveranstaltung berührt zwei große Gebiete 1 Algorithmen Programmierung Algorithmen & Programmierung Algorithmen und Programmierung Der Entwurf von Algorithmen ist vollständig unabhängig von Computern und verlangt das Verstehen von Problemen, Abstraktionsvermögen, Mathematikkenntnisse sowie Kreativität 1 Wie überraschend! 5

16 M. Werner: Algorithmen & Programmierung Programmierung ist (in der praktischen Umsetzung) an Computer gebunden und verlangt (abstraktes) Verständnis der Vorgänge im zu programmierenden Computer, Kenntnisse über Syntax und Semantik 2 von Programmiersprachen sowie über den Umgang mit Entwicklungstools. Ziele Nach erfolgreichen Absolvieren dieser Lehrveranstaltung sollten Sie einige grundlegende Algorithmen kennen und verstehen;... grundsätzliche Ansätze für algorithmische Lösungen kennen und anwenden können;... die imperative Programmiersprache C in den Grundzügen 3 beherrschen;... Algorithmen entwickeln und programmieren können. Zusätzlich sollten Sie natürlich jede Menge mehr oder weniger nützliches Wissen angesammelt und anwendungsbereit parat haben. Acknowledgment Für diese Lehrveranstaltung wurden Materialien von Prof. em. Köchel und Dr. Seifert mit freundlicher Genehmigung verwendet. Außerdem wurden die zu einschlägigen Lehrbüchern zur Verfügung gestellten Begleitmaterialien genutzt. Hinweis Nach allgemeiner Erfahrung sind die Konzepte, die in diesem Kurs die größten Schwierigkeiten bereiten Rekursion im Algorithmenentwurf Zeiger (Pointer) beim Programmieren. Bitte versuchen Sie, diese Konzepte so früh wie möglich zu verstehen, und lernen Sie, sicher damit umzugehen. 2 Diese Begriffe werden wir später noch genauer untersuchen. 3...und auch ein bißchen Python... 6

17 0. Organisatorisches I 0.3 Inhalt & Literatur Literatur Diese Veranstaltung folgt keinem einzelnen Lehrbuch Folgende Liste gibt Literatur an, die nützlich sein kann: [AHU83] [AHU75] Alfred V. Aho, John E. Hopcroft und Jeffrey D. Ullman. Data Structures and Algorithms. Addison-Wesley,1983 Alfred V. Aho, John E. Hopcroft und Jeffrey D. Ullman. Design and Analysis of Computer Algorithms. Addison-Wesley,1975 Anm: Sind (oder waren zumindest jahrelang) an vielen US-Universitäten die Standardlehrbücher für Studenten im Grund- [AHU83] bzw. Hauptstudium [AHU75]. Funktion/Bewertung von Algorithmen [Cor+01] Thomas H. Cormen u. a. Introduction to Algorithms. 2. Aufl. MIT Press, 2001 Anm: Die wahrscheinlich umfangreichste Algorithmensammlung in einem einzelnen Buch; mathematisch fundiert; gut als Nachschlagewerk [Sed90] Robert Sedgewick. Algorithms in C. Addison-Wesley, 1990 [Knu69] [Knu81] [Knu98] Anm: Das Buch diskutiert ein breites Spektrum von Algorithmen (wenn auch nicht ganz der Umfang von [Cor+01] erreicht wird). Verzichtet wird auf (zuviel) Mathematik, aber auch auf Aspekte des Algorithmenentwurfs (siehe nächster Abschnitt). Neben [Sed90] gibt es vom gleichen Autor noch die Bücher [Sed83] und [Sed03] Alle drei Bücher sind ähnlich und unterscheiden sich im Wesentlichen nur in der Programmiersprache. [Sed83] benutzt Pascal/Pseudocode, [Sed03] Java. Achtung: Viele Fehler (zumindest in älteren Ausgaben), Errata beachten! Donald E. Knuth. Fundamental Algorithms. Bd. 1. The Art of Computer Programming. Addison-Wesley, 1969 Donald E. Knuth. Seminumerical Algorithms. Bd. 2. The Art of Computer Programming. Addison-Wesley, 1981 Donald E. Knuth. Sorting and Searching. Bd. 3. The Art of Computer Programming. Addison-Wesley, 1998 Anm: Donald Knuth schreibt seit über 40 Jahren an einem Standardwerk über Informatik, das auf 5 7 Bände angelegt ist und dessen erste drei Bände (plus einiger Vorschauhefte auf Band 4 und Korrekturhefte zu den Bänden 1 3) bereits erschienen sind. Knuth ist für seine Präzision bekannt. Mathematische Betrachtungen können ggf. übersprungen werden. Benutzte Programmiersprache ist ein künstlicher Assembler. 7

18 M. Werner: Algorithmen & Programmierung [Ski08] [Man89] [Edm08] [KR88] [Oua97] [Wol16] Entwurf von Algorithmen Die folgenden Bücher legen besonderen Wert auf den Entwurf von Algorithmen ein Thema, welches in vielen Algorithmik-Büchern zu kurz kommt. Steven S. Skiena. The Algorithm Design Manual. 2.Aufl.Springer,2008 Anm: Unterhaltsam durch häufigen Bezug auf interessante Probleme aus dem wahren Leben TM ( war stories ). Udi Manber. Introduction to Algorithms. A Creative Approach. Addison- Wesley, 1989 Anm: Autor nutzt ein induktives Vorgehen beim Algorithmenentwurf. Er stellt auch falsche Lösungen vor, um sukzessive zum korrekten Entwurf zu kommen. Jeff Edmonds. How to Think About Algorithms. Cambridge University Press, 2008 Anm: Besonderer Schwerpunkt auf Schleifeninvarianten und Rekursion Programmiersprache C Bücher über C gibt es in Hülle und Fülle. Deshalb gibt es hier nur eine sehr kleine Auswahl. Nutzen Sie ruhig dasjenige Buch, das Ihnen am besten liegt. Achten Sie aber darauf, dass es mindestens die ANSI-Variante von C enthält. Brian W. Kernighan und Dennis M. Ritchie. The C Programming Language. 2. Aufl. Prentice Hall, 1988 Anm: Das Standardwerk über C, von den Erfindern der Sprache. Steve Oualline. Practical C. 3.Aufl.O Reilly,1997 Anm: Typisches O Reilly-Buch: Pragmatisch, knapp im Stil, ausführlich im Umfang. Jürgen Wolf. Grundkurs C: C-Programmierung verständlich erklärt. 2. Aufl. Rheinwerk Computing, 2016 Anm: Das aktuellest der hier aufgelisteten Bücher, habe es noch nicht vollständig gelesen, macht aber einen guten Durchblättereindruck [Reg03] Regionales Rechenzentrum Niedersachsen, Hrsg. Die Programmiersprache C. Ein Nachschlagewerk. 18. Aufl. Universität Hannover Anm: Billig (3,50 ); erhältlich über das Rechenzentrum, siehe de/urz/handbuecher_intern.html#bestellformular [Sch14] Helmut O.B. Schellong. Moderne C-Programmierung. 3. Aufl. Springer, 2014 Anm: Als E-Book über für TU-Studenten kostenlos 8

19 0. Organisatorisches I 0.3 Inhalt & Literatur [Goo04] Dan Gookin. C For Dummies. 2. Aufl. Wiley Publishing, 2004 Anm: Falls sonst nichts mehr hilft. Programmiersprache Python Auch über Python gibt es zahlreiche Bücher auch hier deshalb nur eine kurze Auswahl. [Zel03] [Chu06] John M. Zelle. Python Programming: An Introduction to Computer Science. Franklin Beedle & Associates, 2003 Wesley J. Chun. Core Python Programming. 2. Aufl. Upper Saddle River, NJ, USA: Prentice Hall PTR, 2006 Anm: Die Empfehlung von Jens Pönisch [Lut13] Mark Lutz. Learning Python. 5th.O Reilly,2013 Anm: Für TUC-Angehörige kostenlos als E-Book über die Bibliothek verfügbar: Andere Programmiersprachen Hier sind nur Bücher gelistet, die keine reine Programmiersprachlehrbücher sind, sondern (auch) Hintergrundwissen über Algorithmenentwurf etc. bieten. Jedoch sind sie so stark sprachgebunden, dass sie nicht in den allgemeinen Algorithmen-Teil gehören. [HW94] Brian Harvey und Matthew Wright. Simply Scheme: Introducing Computer Science. MIT Press, 1994 Anm: Didaktisch sehr gut, z.t. unterhaltsam. Sprache: Scheme [Wir86] Niklaus Wirth. Algorithms & Data Structures. Prentice-Hall, 1986 Anm: Niklaus Wirth ist der Guru der Strukturierten Programmierung. Sprache: Modula-2 [Har97c] [Har97a] [Har97b] Brian Harvey. Symbolic Computing. 2. Aufl. Bd. 1. Computer Science Logo Style. MIT Press, 1997 Brian Harvey. Advanced Techniques. 2. Aufl. Bd. 2. Computer Science Logo Style. MIT Press, 1997 Brian Harvey. Beyond Programming. 2. Aufl. Bd. 3. Computer Science Logo Style. MIT Press, 1997 Anm: Diese drei Bände präsentieren (nahezu) die komplette Informatik mit Hilfe der Programmiersprache Logo 9

20 M. Werner: Algorithmen & Programmierung [HLW06] Vielleicht auch interessant Helmut Herold, Bruno Lurz und Jürgen Wohlrab. Grundlagen der Informatik. Pearson Studium, 2006 Anm: Auf über 700 Seiten werden theoretische, technische und praktische Grundlagen der Informatik präsentiert; gut als Nachschlagewerk. [Are+15] Tilo Arens u. a. Mathematik. 3. Aufl. Spektrum Akademischer Verlag, 2015 [Ben06] [Mit02] Anm: Auf über 1600(!) Seiten werden gut verständlich die Grundlagen der Mathematik dargestellt; allein im ca. ersten Viertel im Wesentlichen der Abiturstoff (der in dieser Vorlesung vorausgesetzt wird). Mordechai Ben-Ari. Understanding Programming Languages. Forpersonal use free available: tea/benari/books/upl.zip. John Wiley & Sons, 2006 John C. Mitchell. Concepts in Programming Languages. Cambridge University Press, 2002 Anm: Beide Bücher betrachten Programmiersprachen im Vergleich. [Har92] David Harel. Algorithmics. The Spirit of Computing. Addison-Wesley, 1992 [Bia09] Anm: Feuilletonartige Betrachtung algorithmischer Probleme (was dem Einsteiger/Fachfremden das Lesen erleichtert, manche aber stört). Enthält ein Kapitel über Programmiersprachen und viele Bibelzitate. Federico Biancuzzi. Masterminds of Programming. Conversations with the Creators of Major Programming Languages. O Reilly,2009 Anm: Interviews mit den Schöpfern berühmter Programmiersprachen. Gibt Einblicke in die Motivation und Ziele beim Entwurf von Programmiersprachen. [Ben00] Jon Bentley. Programming Pearls. 2. Aufl. Addison-Wesley, 2000 [Ben88] Jon Bentley. More Programming Pearls. Confessions of a Coder. 1. Aufl. Addison-Wesley, 1988 Anm: Keine Lehrbücher oder Monographien, sondern ausgewählte Beiträge aus der Zeitschrift Communications of the ACM über Probleme beim Entwurf von Software. Zur Beachtung Sehr unterhaltsam, trotzdem lehrreich. Außer [Sch14] und [HLW06] ist alle hier gelistete Literatur in englischer Sprache. Von vielen Büchern existiert eine Übersetzung ins Deutsche. Seien Sie aber vorsichtig: Häufig enthalten die Übersetzungen inhaltliche Fehler! 10

21 0. Organisatorisches I 0.3 Inhalt & Literatur Da Sie für Ihr Studium sowieso nicht um englische Literatur herumkommen, fangen Sie am besten gleich mit Originalliteratur an. E-Learning Neben der Web-Seite an der Professur gibt für den Kurs E-Learning-Tool über OPAL (Bildungsportal Sachsen) URL: Bisher: Login mit Uni-Accountname Einschreibung für Übungsgruppen Forum zur Diskussionen die mit der Lehrveranstaltung in Beziehung stehen Weiteres kann während des Semesters hinzukommen Aufgaben Am Ende jedes Kapitels werden ein paar Aufgaben stehen. Diese stehen nicht immer im Zusammenhang mit dem unmittelbaren Stoff dafür gibt es die Übungsaufgaben auf den Webseiten der Veranstaltung sondern sollen ergänzende Denkanstöße geben. Teilweise gehen sie über den Stoff hinaus, greifen ihm vor, und/oder verlangen unkonventionelles Denken. 11

22 M. Werner: Algorithmen & Programmierung Niemand ist verpflichtet, diese Aufgaben zu lösen (oder sie sich auch nur anzusehen). Wer es aber tut, übt durch die Beschäftigung mit diesen Aufgaben Fähigkeiten, die jede(r) Programmierer(in) nach meiner Meinung nach braucht, wenn sie oder er mehr als ein Code-Monkey 4 sein will. Aufgabe 0.1 Betrachten Sie die Reihe folgender Zahlen: (a) Streichen Sie sowenig Zahlen wie möglich, so dass die verbleibenden Zahlen eine aufsteigende Reihe bilden! (b) Lösen Sie die Aufgabe erneut, nur soll die Ergebnisreihe diesmal absteigend sein! (c) Beschreiben Sie wie man vorgehen muss, um für eine beliebige Zahlenreihe zum optimalen Ergebnis bei den beiden vorstehenden Aufgaben zu kommen! Aufgabe 0.2 Betrachten Sie die nebenstehende Figur. Finden Sie einen geschlossenen Weg (d.h. Start =Ende)entlangdergrünenLinien,sodassjeder rote Punkt genau einmal besucht wird!

23 Kapitel 1 Einführung in Algorithmen Precept may point to us the way, but it is silent continuous example, conveyed to us by habits, and living with us in fact, that carries us along. (Samuel Smiles) 1.1 Einführende Beispiele Um ein intuitives Verständnis zu erreichen, betrachten wir zu Beginn eine Anzahl von Beispielen, die (mehr oder weniger) dem Alltag entnommen sind. Beispiel 1: Bauanleitung Quelle: IKEA 13

24 M. Werner: Algorithmen & Programmierung Beispiel 2: Rezept Caipirinha Zutaten: 3 cl Zuckerrohrschnaps (Cachaca) Eine Limette Zwei Teelöffel brauner Zucker gecrushtes Eis Zubereitung: Limette in Achtelstücke schneiden, in ein Longdrinkglas geben und den braunen Zucker darüber streuen. Limettenstücke mit einem Holzmörser gut zerdrücken und mit dem Zucker vermischen Anschließend den Zuckerrohrschnaps drübergießen und das Glas mit gecrushtem Eis auffüllen Gut mischen und mit einem oder zwei Trinkhalmen servieren. 14

25 1. Einführung in Algorithmen I 1.1 Beispiele Beispiel 3: Quadratische Gleichung Gegeben: Gleichung a x 2 + b x + c =0,wobeia 6= 0 Gesucht: Alle x, diediegegebenegleichungerfüllen Algorithmus x 1,2 = b ± p b 2 4 a c 2 a Beispiel 4: Weg durch das Labyrinth Regel Gehe immer so, dass Du mit der rechten Hand die Wand berührst! Beispiel 5: Schriftliche Addition Problem: Addiere zwei mehrstellige Zahlen Algorithmus: 1. Schreibe die Zahlen rechtsbündig so hin, dass jeweils zwei Ziffern in Spalten untereinander stehen 2. Beginne mit der Spalte, die am weitesten rechts ist 3. Addiere die Zahlen in dieser Spalte 4. Schreibe die Einerstelle der Summe unter die Spalte 5. Schreibe die Zehnerstelle der Summe über die Spalte links der aktuellen 6. Wiederhole ab Schritt (3) mit nächster Spalte links der aktuellen, bis keine Spalte mehr übrig ist 7. Die unterste Zeile ist das Ergebnis 15

26 M. Werner: Algorithmen & Programmierung =? Beispiel 6: Bruch kürzen Problem: Kürze einen Bruch Algorithmus: 1. Finde den größten gemeinsamen Teiler (ggt) von Zähler (Z) undnenner(n) Berechnung des ggt zweier Zahlen x und y a) Wenn x = y gilt, so ist ggt(x, y) x b) Wenn x 6= y gilt, so ist ggt(x, y) ggt(min(x, y), abs(x y)) 2. Teile Z und N durch ggt(z, N) Beispiel: Kürze ggt(15, 25) = ggt(min(15, 25), abs(15 25)) = ggt(15, abs( 10)) = ggt(15, 10) = ggt(min(15, 10), abs(15 10)) = ggt(10, 5) = ggt(min(10, 5), abs(10 5)) = ggt(5, 5) = 5 Der Algorithmus zum Bestimmen des größten gemeinsamen Teilers stammt von Euklid (Euklid von Alexandria, ca. 360 v. Chr. bis ca. 280 v. Chr.) und gilt als der älteste (nichttriviale) Algorithmus. Er war von Euklid ursprünglich als Aussage über geometrischen Stecken gedacht und lautete etwa: Wenn CD aber AB nicht misst, und man nimmt bei AB, CD abwechselnd immer das kleinere vom größeren weg, dann muss (schließlich) eine Zahl übrig bleiben, die die vorangehende misst. 16

27 1. Einführung in Algorithmen I 1.1 Beispiele Beispiel 7: Magisches Quadrat Hexeneinmaleins Du mußt versteh n! Aus Eins mach Zehn, Und Zwei laß geh n, Und Drei mach gleich, So bist Du reich. Verlier die Vier! Aus Fünf und Sechs, So sagt die Hex, Mach Sieben und Acht, So ist s vollbracht Goethe, FaustI Beispiel 8: Geometrische Streckenhalbierung Problem: Halbieren Sie eine gegebene Strecke nur mit Hilfe eines Zirkels und eines (unbemaßten) Lineals Algorithmus: 1. Stelle am Zirkel eine Entfernung ein, die deutlich größer als die halbe Strecke ist 2. Zeichne mit dieser Einstellung um das eine Ende der Strecke einen Kreis 3. Zeichne mit der gleichen Einstellung um das andere Ende der Strecke einen Kreis 4. Verbinde mit dem Lineal die Schnittpunkte der Kreise mit einer Geraden 5. Wo die Gerade die Strecke schneidet, befindet sich die Mitte der Stecke A! AB 2 B 17

28 M. Werner: Algorithmen & Programmierung Beispiel 9: Tanzschritte Langsamer Walzer, Grundschritt Beispiel 10: Musik Beispiel 11: Ableitung einer Funktion Problem: Finde die Ableitung nach x einer Funktion f(x) Algorithmus: 1. Ist f(x) eine Summe so ist die Ableitungen die Summe der Ableitungen der Summanden 2. Ist f(x) ein Produkt so ist die Ableitung die Summe des Produkts des ersten Faktors mit der Ableitung des zweiten Faktors und des Produkts des zweiten Faktors mit der Ableitung des ersten Faktors 3. Ist f(x) eine Funktion einer anderen Funktion von x, soistdieableitungdas Produkt Ableitung der äußeren Funktion nach der inneren Funktion und der Ableitung der inneren Funktion 4. Ist f(x) nicht von x abhängig, so ist die Ableitung 0 18

29 1. Einführung in Algorithmen I 1.1 Beispiele 5. Ist f(x) =x k,soistdieableitungk x k 1 6. Ist f(x) =a x,soistdieableitunga x ln a 7. Ist f(x) =sin(x), soistdieableitungcos(x) 8. Ist f(x) = log a (x), soistdieableitung 1 x log a e Man beachte: Wie bei Beispiel 6 wird der Algorithmus von sich selbst aufgerufen (Regeln 1, 2 und 3) Beispiel 12: Sortieren Problem: Sortiere folgende Spielkarten nach ihrem Wert beim Skat 1 : B 7 K 10 B D 8 7 D 9 Algorithmus: 1. Man beginnt mit den beiden Karten, die am weitesten links liegen 2. Wenn die größere der beiden Karten rechts liegt, vertauscht man beide Karten 3. Gehe eine Karte nach rechts und wiederhole Schritt 2 4. Wenn man bei den beiden Karten ganz rechts angelangt ist, beginnt man wieder bei Schritt 1, falls mindestens einmal getauscht wurde Runde 1: B 7 K 10 B D 8 7 D 9 getauscht: 7 Runde 1: B 7 K 10 B D 8 7 D 9 getauscht: 7 Runde 1: B 7 K 10 B D 8 7 D 9 getauscht: 7 Runde 1: B K 7 10 B D 8 7 D 9 getauscht: 4 Runde 1: B K 7 10 B D 8 7 D 9 getauscht: 4 1 Etwas vereinfacht: Kartenwert über Farbwert, Kartenwertreihenfolge: B,A,10,K,D,9,8,7; Farbreihenfolge: Kreuz, Pik, Herz, Karo 19

30 M. Werner: Algorithmen & Programmierung Runde 1: B K 10 7 B D 8 7 D 9 getauscht: 4 Runde 1: B K 10 7 B D 8 7 D 9 getauscht: 4 Runde 1: B K 10 B 7 D 8 7 D 9 getauscht: 4 Runde 1: B K 10 B 7 D 8 7 D 9 getauscht: 4 Runde 1: B K 10 B D D 9 getauscht: 4 Runde 1: B K 10 B D D 9 getauscht: 4 Runde 1: B K 10 B D D 9 getauscht: 4 Runde 1: B K 10 B D D 9 getauscht: 4 Runde 1: B K 10 B D D 9 getauscht: 4 Runde 1: B K 10 B D D 9 getauscht: 4 Runde 1: B K 10 B D 8 7 D 7 9 getauscht: 4 Runde 1: B K 10 B D 8 7 D 7 9 getauscht: 4 Runde 1: B K 10 B D 8 7 D 9 7 getauscht: 4 Runde 2: B K 10 B D 8 7 D 9 7 getauscht: 7 Runde 2: B K 10 B D 8 7 D 9 7 getauscht: 7 Runde 2: B 10 K B D 8 7 D 9 7 getauscht: 4 Runde 2: B 10 K B D 8 7 D 9 7 getauscht: 4 20

31 1. Einführung in Algorithmen I 1.1 Beispiele Runde 2: B 10 B K D 8 7 D 9 7 getauscht: 4 Runde 2: B 10 B K D 8 7 D 9 7 getauscht: 4 Runde 2: B 10 B K D 8 7 D 9 7 getauscht: 4 Runde 2: B 10 B K D 8 7 D 9 7 getauscht: 4 Runde 2: B 10 B K D 8 7 D 9 7 getauscht: 4 Runde 2: B 10 B K D 8 D getauscht: 4 Runde 2: B 10 B K D 8 D getauscht: 4 Runde 2: B 10 B K D 8 D getauscht: 4 Runde 2: B 10 B K D 8 D getauscht: 4 Runde 3: B 10 B K D 8 D getauscht: 7 Runde 3: B 10 B K D 8 D getauscht: 7 Runde 3: B B 10 K D 8 D getauscht: 4 Runde 3: B B 10 K D 8 D getauscht: 4 Runde 3: B B 10 K D 8 D getauscht: 4 Runde 3: B B 10 K D 8 D getauscht: 4 Runde 3: B B 10 K D 8 D getauscht: 4 Runde 3: B B 10 K D D getauscht: 4 21

32 M. Werner: Algorithmen & Programmierung Runde 3: B B 10 K D D getauscht: 4 Runde 3: B B 10 K D D getauscht: 4 Runde 3: B B 10 K D D getauscht: 4 Runde 3: B B 10 K D D getauscht: 4 Runde 4: B B 10 K D D getauscht: 7 Runde 4: B B 10 K D D getauscht: 4 Runde 4: B B 10 K D D getauscht: 4 Runde 4: B B 10 K D D getauscht: 4 Runde 4: B B 10 K D D getauscht: 4 Runde 4: B B 10 K D D getauscht: 4 Runde 4: B B 10 K D D getauscht: 4 Runde 4: B B 10 K D D getauscht: 4 Runde 4: B B 10 K D D getauscht: 4 Runde 4: B B 10 K D D getauscht: 4 Runde 5: B B 10 K D D getauscht: 7 Runde 5: B B 10 K D D getauscht: 7 Runde 5: B B 10 K D D getauscht: 7 22

33 1. Einführung in Algorithmen I 1.2 Algorithmenbegriff Runde 5: B B 10 K D D getauscht: 7 Runde 5: B B 10 K D D getauscht: 7 Runde 5: B B 10 K D D getauscht: 7 Runde 5: B B 10 K D D getauscht: 7 Runde 5: B B 10 K D D getauscht: 7 Runde 5: B B 10 K D D getauscht: 7 Runde 5: B B 10 K D D getauscht: Begriff und Eigenschaften Abu Jafar Muhammad ibn Mūsā al-chwārizmī, lateinisiert:algoritmi Universalgelehrter 780 ca. 842 Stammte aus Chwarizm (Gebiet in Zentralasien südl. des Aral) Wirkte in Persien (heute Iran) Führte die (indische) Null ins arabische Zahlensystem ein Rechenregeln mit diesem modernen Zahlensystem legte er in einem Buch vor, dessen lateinische Version den Titel Algoritmi de numero indorum (Das Werk des Al-gorismus über indische Zahlen) trägt Daher stammt der Begriff Algorithmus für Rechenregeln, später allgemeiner gebraucht 23

34 M. Werner: Algorithmen & Programmierung Bildquelle: Alain Juhel Allerdings existieren schon vor al-chwarizmi Rechenregeln (Algorithmen), vermutlich seit etwa 1800 v. Chr. Seite aus dem lateinischen Text zu indischen Zahlen, die mit DIXIT algorizmi (Algorithmus hat gesagt) beginnt. Bildquelle: Cambridge, University Library, Ii Definition Es gibt verschiedene Formalisierungen des Algorithmen-Begriffs Benutzen zunächst recht allgemeinen Begriff2 : 2 Es 24 gibt derzeit keine allgemein akzeptierte formale Definition von Algorithmus.

35 1. Einführung in Algorithmen I 1.2 Algorithmenbegriff Definition 1.1: Algorithmus Ein Algorithmus ist Handlungsvorschrift, die aus einer endlichen Anzahl von wohldefinierten und effektiven Einzelschritten besteht, und die dazu dient, ein bestimmtes Ziel zu erreichen. Endliche Anzahl: DieBeschreibungderAlgorithmusbesitztendlicheLänge Finitheit Wohldefinierter Schritt: AlleSchrittemüsseneindeutigsein Definiertheit Effektiver Schritt: AlleElementemüssendirektausführbarsein Effektivität, Ausführbarkeit Quelle: xkcd - A webcomic of romance, sarcasm, math, and language Finitheit Algorithmen können auf verschiedene Weise beschrieben werden siehe Beispiele weiter vorn Aber: Esmussstetsgewährleistetsein,dasszurDarstellungnureineMaximalmenge Datenträger verbraucht wird Text Platz Größe Zeichnung etc. Definiertheit Betrachten folgenden Algorithmus zur Übernahme von Google: 25

36 M. Werner: Algorithmen & Programmierung 1. Gehe nach New York 2. Mache eine Million Dollar 3. Spekuliere an der Börse bis Du 500 Milliarden Dollar zusammen hast 4. Kaufe alle Aktien von Alphabet Inc. 3 auf Die Schritte 2 und 3 sind nicht genau definiert (und wahrscheinlich auch nicht definierbar) Ausführbarkeit Jeder Teil eines Algorithmus sollte direkt oder mit Hilfe eines anderen Algorithmus ausführbar sein Test: Prinzipiell muss alles mit Stift und Papier nachvollziehbar sein Betrachten folgenden Algorithmus zu Primzahlzwillingen: 1. Lese zwei Zahlen x 1 und x 2 ein 2. Wenn x 1 keine Primzahl ist oder wenn x 2 keine Primzahl ist, dann gebe Keine zwei Primzahlen aus und gehe zu 5 3. Wenn abs(x 1 x 2 ) 6= 2, dann gebe Keine Primzahlzwillinge aus und gehe zu 5 4. Wenn x 1 und x 2 die größten Primzahlzwillinge sind, gebe größteprimzahlzwillinge aus, sonst gebe Primzahlzwillinge aus 5. Beende Algorithmus Alle Schritte sind exakt definiert Aber: Bisheute(Herbst2016)weißniemand,ob es ein größtes Primzahlzwillingspaar gibt oder wie man dieses ggf. bestimmt Weitere Eigenschaften Mitunter werden noch mehr Eigenschaften verlangt Abstrahierung: Der Algorithmus soll nicht nur ein Problem lösen, sondern eine Klasse von Problemen 3 Alphabet Inc. ist die Muttergesellschaft aller Google-Unternehmen 26

37 1. Einführung in Algorithmen I 1.2 Algorithmenbegriff Terminierung: Nach einer endlichen Anzahl von Schritten ist der Algorithmus beendet Determinismus: Zu jedem Zeitpunkt gibt es höchstens eine Möglichkeit der Fortsetzung Determiniertheit: Unter den gleichen Anfangsbedingungen gelten am Ende stets die gleichen Endbedingungen Dynamische Finitheit, Ressourcenbeschränkung: EinAlgorithmusdarfstets nur eine endliche Menge von Ressourcen benutzen Merke Es gibt Algorithmen, die eine oder mehrere dieser Eigenschaften nicht haben Für uns sind (hier) aber nur die Algorithmen interessant,dieabstrahierend, terminierend, determiniert, deterministisch und ressourcenbeschränkt sind (... und natürlich aus einer endlichen Menge von wohldefinierten und effektiven Schritten bestehen) Außerdem: Uns interessieren Algorithmen, die (vor allem) auf einem Computer ausgeführt werden Betrachten diese Eigenschaften im Folgenden genauer Computeralgorithmen Computer: der, von lat. ( computare = zusammenrechnen) eng. ( to compute = rechnen) Computer können Daten manipulieren, aber nicht ohne weiteres Objekte der realen Welt Objekte der realen Welt benötigen eine Daten-Repräsentation ( Abbildung) Abbildung erfolgt über Computerperipherie (Ein-/Ausgabegeräte) Eigentlicher Algorithmus betrachtet nur Daten Struktur der Daten kann sehr komplex sein siehe Vorlesung Algorithmen und Datenstrukturen 27

38 M. Werner: Algorithmen & Programmierung Abstrahierung Um den gleichen Algorithmus für eine Vielzahl von Fällen nutzen zu können, wird der Algorithmus parameterisiert Parameterisierung erfolgt über die Eingabedaten Ergebnis des Algorithmus wird in den Ausgabedaten dargestellt Eingabe Algorithmus Ausgabe Dies entspricht dem Modell einer mathematischen Funktion: A = f(e) E entspricht der Eingabe, A der Ausgabe, und f dem Algorithmus Durch die Äquivalenz mit einer Funktion wird ein Computeralgorithmus zu einem Berechnungsproblem Lässt sich also alles berechnen (also programmieren)? Nein! Z.B. gibt es keinen Algorithmus, der für zwei beliebige andere Algorithmen berechnen kann, ob sie dieselbe Funktion berechnen Es gibt noch nicht mal einen Algorithmus, der stets berechnen kann, ob ein beliebig gegebener anderer Algorithmus zum Ende kommt (terminiert) oder nicht Solche Probleme der Grenzen der Machbarkeit sind Gegenstand der theoretischen Informatik Terminierung Betrachten folgenden Algorithmus: 1. Gehe zu Schritt 2 2. Gehe zu Schritt 1 3. Beende Algorithmus Obwohl die Beschreibung des Algorithmus endlich ist, ist die Ausführung nie beendet Schritt 3 wird nie erreicht 28

39 1. Einführung in Algorithmen I 1.2 Algorithmenbegriff Falls ein Algorithmus Ausgaben produziert, weiß man bei einem nichtterminierenden Algorithmus nicht, wann die Ausgabe vollständig/gültig ist Es gibt nichtterminierende Algorithmen, die aber hier nicht betrachtet werden Quelle: xkcd - A webcomic of romance, sarcasm, math, and language Effizienz In der Praxis sollen Algorithmen nicht nur nicht unendlich lange laufen, sondern sogar nicht sehr lange Die Dauer der Ausführung wird als Gütekriterium eines Algorithmus angesehen Die Dauer hängt typischerweise von der Größe des Problems ab Beispiel: Der Sortieralgorithmus aus Beispiel 12 dauert für 20 Spielkarten in der Regel länger als für 10 Karten Um den Algorithmus unabhängig von der ausführenden Hardware beurteilen zu können, wird meist ein normiertes Maß benutzt: (Zeit-)Komplexität Später mehr darüber Determinismus und Determiniertheit Betrachten folgenden Algorithmus: 1. Lasse Dir eine Zahl geben 2. Werfe eine Würfel 3. Wenn der Würfel mehr als 3 anzeigt, multipliziere die Zahl mit 2 und gehe zu Schritt 2 29

40 M. Werner: Algorithmen & Programmierung 4. Gebe die Zahl aus Dieser Algorithmus ist nicht deterministisch: Es ist nicht (a priori) klar, welcher Schritt nach Schritt 3 ausgeführt wird Er ist auch nicht determiniert: Auch bei gleichem Eingabewert können unterschiedliche Ausgangswerte vorkommen Nichtdeterministische Algorithmen werden auch randomisierte Algorithmen genannt Ein deterministischer Algorithmus kann mit einem Zufallswert gefüttert werden Merke Ein terminierender und deterministischer Algorithmus ist stets auch determiniert Aber: Das Ergebnis eines randomisierten Algorithmus kann auch determiniert sein Randomisierte Algorithmen bilden eine wichtige Klasse von Algorithmen Mitunter sind sie schneller oder effizienter als deterministische Algorithmen mehr bei Prof. Lefmann Ressourcenbeschränkung Theoretisch kann ein Algorithmus fast unendlich viel Ressourcen nutzen, in der Praxis steht immer nur eine beschränkte Anzahl zur Verfügung Betrachten folgenden Fall: Sie erhalten einen Kettenbrief mit 8 Namen und folgenden Instruktionen: Schicke an die Person, die oben auf der Liste steht, einen Eurocent. Nun streiche den obersten Namen und füge Deinen unten an die Liste an. Dann fertige 12 Kopien dieses Briefes und schicke ihn an 12 Menschen, die noch nicht an diesem Spiel teilgenommen haben. Nach einiger Zeit wirst Du Eurocents im Wert von fast 5 Millionen Euro erhalten. Selbst, wenn derjenige, der sich dieses Spiel ausgedacht hat, Ihnen einen der ersten zwölf Briefen geschickt hat, wären (ca. 5,6 Milliarden 4 )verschiedenemenschen nötig, die sich am Spiel beteiligen, damit dieses Schneeballsystem funktioniert und Sie ihren Gewinn 5 erhielten 4 Zum Vergleich: Die Gesamtbevölkerung der Erde wurde zum Jahresbeginn 2016 auf ca. 7,4 Mrd. geschätzt. 5 Der übrigens auch nur ca. 4,3 Millionen betragen würde. 30

41 1. Einführung in Algorithmen I 1.3 Modelle Das Beispiel zeigt, dass der Ressourcenverbrauch auch scheinbar einfacher Algorithmen sehr schnell steigen kann Bei Computeralgorithmen bezieht sich der Ressourcenverbrauch auf den benötigten Speicher Wie die Ausführungsdauer wird auch der Speicherverbrauch normiert, um Algorithmen vergleichen zu können (Speicher)-Platzkomplexität Die Platzkomplexität ist neben der Zeitkomplexität das wichtigste Bewertungsmaß für Algorithmen 1.3 Modelle Ein Modell für Algorithmen haben wir bereits kennengelernt: die mathematische Funktion Ausgangsdaten als Funktion von Eingangsdaten Die Eingangsdaten sind von den Ausgangsdaten unabhängig Alternativer Ansatz: Es wird nicht zwischen Eingangsdaten und Ausgangsdaten unterschieden Daten werden durch den Algorithmus bearbeitet Zu jedem gegebenen Zeitpunkt während des Ablauf des Algorithmus besitzen die Daten einen bestimmten Zustand Die folgenden Abbildungen zeigt den konzeptionellen Unterschied zwischen beiden Modellen: Funktion: Eingabe Algorithmus Ausgabe Zustandsänderung: Algorithmus Daten 31

42 M. Werner: Algorithmen & Programmierung Zustandsänderung als Zeitreihe Im Zustandsmodell 6 können die Werte der Daten als Reihe d 1,d 2,d 3,..., bzw. als Zeitreihe: d t1,d t2,d t3,... aufgefasst werden Ein einzelner Schritt des Algorithmus kann wieder als Funktion aufgefasst werden: d t+1 = f St (d t ) Um nicht ständig Indizes zu schreiben, lässt man sie bei der Beschreibung von Algorithmen häufig weg und schreibt: d f St (d) Dabei ist auf der linken Seite der neue und auf der rechten Seite der alte Wert von d gemeint Interpretation: Folgezustand ist Funktion des Vorzustandes Achtung Viele Programmiersprachen (u.a. auch C und Java) nutzen die Schreibweise wenn eigentlich gemeint ist. d d=f(d) f(d) Das Gleichheitszeichen = ist hier nicht als mathematisches Gleichheitszeichen zu verstehen Bei anderen Programmiersprachen wird versucht, diese Verwirrung zu vermeiden, indem dort :=, <- o.ä. benutzt wird Konditionalmodell Prinzipiell kann jeder Algorithmus ausschließlich aus einer Menge von Wenn-Dann- Regeln (Konditionalklauseln) bestehen: Wenn A gilt, dann geschehe X Wenn B gilt, dann geschehe Y Wenn C gilt, dann geschehe Z 6 Achtung, der Begriff Zustandsmodell hat in anderen Gebieten eine z.t. völlig andere Bedeutungen, z.b. in der Regelungtechnik 32

43 1. Einführung in Algorithmen I 1.3 Modelle Die Reihenfolge der Regeln ist dabei nicht (unbedingt) entscheidend Die Bedingung kann sowohl von einem Zustand als auch von einer Eingabe abhängen, ist also mit dem Funktionsmodell und dem Zustandsmodell kompatibel Das Konditionalmodell ist orthogonal 7 zu Funktions- und Zustandsmodell Beispielalgorithmus 11 (Ableitung) ist nach diesem Modell gestaltet Diskussion Alle drei Modelle sind gleichmächtig Programmiersprachen nutzen in der Regel alle drei Modelle, jedoch in unterschiedlicher Ausprägung Welches Modell zur Formulierung eines Algorithmus tatsächlich genutzt wird, hängt von ab der Art des Problems (manche lassen sich besser in einem bestimmten Modell ausdrücken) den vorgegebenen Möglichkeiten zur Problembeschreibung (z.b. Programmiersprache) persönlichen Vorlieben Elemente eines Algorithmus Computeralgorithmen bestehen aus wenigen Klassen von abstrakten Elementen: Was machen? Ausdrücke auswerten, z.b.: b+ p b 2 4 a c 2 a...die Spielkarte, die am weitesten links liegt... der erste Buchstabe im Wort Zustandsänderungen, z.b.: Linken Fuß an den rechten Fuß heranziehen i i +1 Tausche zwei Karten Andere Algorithmen nutzen, z.b.: 7 Eigentlich: rechtwinklig; wird im Sinne des orthogonalen Koordinatensystems für frei kombinierbare Parameter genutzt. 33

44 M. Werner: Algorithmen & Programmierung berechne den ggt... Funktionsruf Wie zusammensetzen? Sequenzen, z.b.: erst Limette in Achtelstücke schneiden, dann in ein Longdrinkglas geben... Verzweigungen, z.b.: Wenn x>y,dann...sonst... Wiederholungen, z.b.: 10 mal wiederholen wiederholen bis keine Spalte mehr übrig ist Starten Sie den Algorithmus erneut mit den Parametern... Aufgaben Aufgabe 1.1 Überlegen Sie sich, wie oft sie im Algorithmus aus Beispiel 12 jeweils im günstigsten und im ungünstigsten Fall zwei Karten miteinander tauschen müssen, wenn Sie auf diese Weise n Karten sortieren wollen. Aufgabe 1.2 Beweisen Sie, dass der Algorithmus aus Beispiel 8 tatsächlich die Strecke AB halbiert! Aufgabe 1.3 Formulieren Sie die Algorithmen aus den Beispielen 4 und 8 in der Konditionalform! 34

45 Kapitel 2 Einführung in Programmiersprachen C is quirky, flawed and enormous success. (Dennis Ritchie) 2.1 Grundsätzliches Die Ausführung eines Algorithmus auf einem Computer setzt voraus, dass der Computer den Algorithmus interpretieren kann: Er muss verstehen, was jeder Schritt bedeutet Er muss die jeweilige Operation ausführen können Jeder Prozessor 1 kann ein Bitmuster interpretieren Dieses Bitmuster wird Maschinencode genannt Der Maschinencode ist typisch für jede Prozessorfamilie Beispiel: Im Maschinencode der x86-prozessorfamilie bedeutet das Bitmuster dass der Prozessor sich nicht ablenken lassen soll, d.h., dass keine Interrupts 2 beachtet werden sollen 1 Präziser: jeder digitale Prozessor 2 Das Konzept des Interrupts wird in den Fächern der technischen Informatik genauer behandelt 35

46 M. Werner: Algorithmen & Programmierung Compiler und Interpreter Für den Menschen ist Maschinencode nicht besonders handlich Daher gibt es Programmiersprachen, die dem Denken des Menschen entgegenkommen Programmiersprachen benutzen verschiedene Modelle und Abstraktionen Z.B. gibt es für jeden Maschinencode (mindestens) eine sogenannte Assembler- Sprache,diedenMaschinencodeinleicht(er)merkbarenAbkürzungen(Mnemonics) darstellt cli (für clear interrupt) Programme werden entweder in Maschinencode übersetzt, oderdurcheinanderes Programm interpretiert Übersetzer = Compiler Interpreter Varianten der Programmausführung Programmiersprache Programmiersprache Programmiersprache Programmiersprache Compiler Compiler Compiler Programmiersprache 2 Zwischencode Compiler Übersetzungszeit Laufzeit VM Interpreter Maschinencode Maschinencode Maschinencode Maschinencode VM: Virtuelle Maschine: Simulation eines Prozessors, der den Zwischencode versteht Neben den hier dargestellten Formen der Programmausführung gibt es zahlreiche Mischformen und Zwischenvarianten 36

47 2. Einführung in Programmiersprachen I 2.1 Grundsätzliches Tabelle 2.1: Einige Programmierparadigmen Eigenschaft (vereinfachte) Erläuterung typische Beispiele imperativ funktional betont das Zustandsübergangsmodell der Programmausführung betont das Funktionsmodell der Programmausführung deklarativ ermöglicht die Beschreibung eines Programmziels, stattdeswegesdorthin modular ein Programm kann aus verschiedenen Teilen komponiert werden, wobei von den externen Teilen nur bestimmte Informationen bekannt werden objektorientiert betont die Zusammengehörigkeit von Daten und Operationen C, C++, C#, Java, Pascal Haskell, Scheme, Logo, ML SQL, Prolog Modula 2, C#, Simula, Smalltalk, Eiffel, Java, C++ strikt Ausdrücke werden bei Zuweisung berechnet C, Java, Ada nicht-strikt Ausdrücke werden bei Bedarf berechnet Miranda, Haskell reflexiv Programm kann sich selbst modifizieren Lisp, C#, Python Bei allen Varianten wird aber am Ende ein Maschinencode ausgeführt, der dem Hochsprachenprogramm entspricht Paradigmen Häufig werden Sie hören, dass eine Programmiersprache diesem oder jenem Paradigma folgt Paradigma Paradigma, das,pl:paradigmen,griech., " µ : Beispiel,Muster Gemeint ist, dass die Sprache gewisse Eigenschaften hat oder bestimmte Programmierstile (besonders gut) unterstützt Typischerweise unterstützen Sprachen mehrere Paradigmen Die Befolgung eines Paradigma sagt nichts über die Ausdrucksmächtigkeit einer Sprache Tabelle 2.1 listet einige Programmierparadigmen auf 37

1.1 Einführende Beispiele. Beispiel 2: Rezept. Beispiel 1: Bauanleitung. Algorithmen und Programmierung. 1. Kapitel Einführung in Algorithmen

1.1 Einführende Beispiele. Beispiel 2: Rezept. Beispiel 1: Bauanleitung. Algorithmen und Programmierung. 1. Kapitel Einführung in Algorithmen Algorithmen und Programmierung Wintersemester 2016/2017 Algorithmen und Programmierung 1. Kapitel Einführung in Algorithmen Beginnen mit 12 Beispielen für Algorithmen, mehr oder weniger aus dem Alltag

Mehr

1.1 Einführende Beispiele. Beispiel 1: Bauanleitung. Beispiel 2: Rezept. Algorithmen und Programmierung. 1. Kapitel Einführung in Algorithmen

1.1 Einführende Beispiele. Beispiel 1: Bauanleitung. Beispiel 2: Rezept. Algorithmen und Programmierung. 1. Kapitel Einführung in Algorithmen Algorithmen und Programmierung Wintersemester 2018/2019 1.1 Einführende Beispiele Algorithmen und Programmierung 1. Kapitel Einführung in Algorithmen Beginnen mit 12 Beispielen für Algorithmen, mehr oder

Mehr

Kapitel 1. Einführung in Algorithmen. 1.1 Einführende Beispiele

Kapitel 1. Einführung in Algorithmen. 1.1 Einführende Beispiele Kapitel 1 Einführung in Algorithmen Precept may point to us the way, but it is silent continuous example, conveyed to us by habits, and living with us in fact, that carries us along. (Samuel Smiles) 1.1

Mehr

Kapitel 1. Einführung in Algorithmen. 1.1 Einführende Beispiele

Kapitel 1. Einführung in Algorithmen. 1.1 Einführende Beispiele Kapitel 1 Einführung in Algorithmen Precept may point to us the way, but it is silent continuous example, conveyed to us by habits, and living with us in fact, that carries us along. (Samuel Smiles) 1.1

Mehr

0.1 Lehrveranstaltung. Vorlesung. Übungen

0.1 Lehrveranstaltung. Vorlesung. Übungen Algorithmen und Programmierung Wintersemester 2016/2017 Algorithmen und Programmierung 0. Kapitel Organisatorisches Lehrveranstaltung Algorithmen und Programmierung (Wer nicht diese Veranstaltung besuchen

Mehr

Übungen. Vorlesung. Algorithmen und Programmierung. 0. Kapitel Organisatorisches

Übungen. Vorlesung. Algorithmen und Programmierung. 0. Kapitel Organisatorisches Algorithmen und Programmierung Wintersemester 2017/2018 Algorithmen und Programmierung 0. Kapitel Organisatorisches Lehrveranstaltung Algorithmen und Programmierung (Wer nicht diese Veranstaltung besuchen

Mehr

Algorithmen und Programmierung

Algorithmen und Programmierung Algorithmen und Programmierung Skript zur Vorlesung Prof. Dr.-Ing. habil. Matthias Werner Stand: 25. Oktober 2017 Dieses Skript wurde mit L A TEX unter Nutzung verschiedener Klassen/Pakete erstellt. Eigene

Mehr

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

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 - n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik n "Informatik" = Kunstwort aus Information

Mehr

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

Theoretische Informatik: Berechenbarkeit und Formale Sprachen Theoretische Informatik: Berechenbarkeit und Formale Sprachen Prof. Dr. F. Otto Fachbereich Elektrotechnik/Informatik, Universität Kassel 34109 Kassel, Germany E-mail: otto@theory.informatik.uni-kassel.de

Mehr

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

Theoretische Informatik: Berechenbarkeit und Formale Sprachen Theoretische Informatik: Berechenbarkeit und Formale Sprachen Prof. Dr. F. Otto Fachbereich Elektrotechnik/Informatik, Universität Kassel 34109 Kassel, Germany E-mail: otto@theory.informatik.uni-kassel.de

Mehr

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

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

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

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

1. Einführung Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

1. Einführung Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt 1. Einführung Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt 1 Ein Zitat zu Beginn Vor der Wahl, ein theoretischer Physiker oder ein Programmierer

Mehr

Informatik I: Einführung in die Programmierung

Informatik I: Einführung in die Programmierung Informatik I: Einführung in die Programmierung 30. Ausblick Albert-Ludwigs-Universität Freiburg Bernhard Nebel 13.02.2016 1 13.02.2016 B. Nebel Info I 3 / 17 Programmieren jedenfalls ein bisschen Python-Programme

Mehr

Algorithmen und Programmierung

Algorithmen und Programmierung Skript zur Vorlesung Algorithmen und Programmierung Rohfassung (Stand: 21. Februar 2012) Prof. Dr.-Ing. habil. Matthias Werner Wintersemester 2011/2012 Dieses Skript wurde mit L A TEX unter Nutzung verschiedener

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Organisation Dr. Dennis Pfisterer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/pfisterer Ziele dieser Veranstaltung Ziel: Wissen, wie man Computerprogramme

Mehr

III.1 Prinzipien der funktionalen Programmierung - 1 -

III.1 Prinzipien der funktionalen Programmierung - 1 - 1. Prinzipien der funktionalen Programmierung 2. Deklarationen 3. Ausdrücke 4. Muster (Patterns) 5. Typen und Datenstrukturen 6. Funktionale Programmiertechniken III.1 Prinzipien der funktionalen Programmierung

Mehr

Wintersemester 2007/2008 Helmut Seidl Institut für Informatik TU München

Wintersemester 2007/2008 Helmut Seidl Institut für Informatik TU München Informatik 1 Wintersemester 2007/2008 Helmut Seidl Institut für Informatik TU München 1 0 Allgemeines Inhalt dieser Vorlesung: Einführung in Grundkonzepte der Informatik; Einführung in Denkweisen der Informatik;

Mehr

ADS. 1. Vorlesung. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

ADS. 1. Vorlesung. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm ADS 1. Vorlesung Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm 6.10.2016 ORGANISATORISCHES Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm Der Dozent 2 Prof. Dr. Wolfgang Schramm

Mehr

Informatik I. Informatik I Was haben wir gelernt? 28.2 Algorithmusbegriff Was geht nicht? 28.1 Was haben wir gelernt?

Informatik I. Informatik I Was haben wir gelernt? 28.2 Algorithmusbegriff Was geht nicht? 28.1 Was haben wir gelernt? Informatik I 14.02.2014 28. Ausblick Informatik I 28. Ausblick Bernhard Nebel Albert-Ludwigs-Universität Freiburg 28.1 28.2 28.3 Was geht nicht? 14.02.2014 Bernhard Nebel (Universität Freiburg) Informatik

Mehr

A1.1 Organisatorisches

A1.1 Organisatorisches Algorithmen und Datenstrukturen 28. Februar 2018 A1. Organisatorisches Algorithmen und Datenstrukturen A1. Organisatorisches A1.1 Organisatorisches Marcel Lüthi and Gabriele Röger Universität Basel A1.2

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen A1. Organisatorisches Marcel Lüthi and Gabriele Röger Universität Basel 28. Februar 2018 Organisatorisches Personen: Dozenten Marcel Lüthi Gabriele Röger Dozenten Dr. Marcel

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Einleitung Gliederung Einführung in die Programmierung Wintersemester 08/09 Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering

Mehr

Informatik I. Grundlagen der systematischen Programmierung. Peter Thiemann WS 2007/08. Universität Freiburg, Germany

Informatik I. Grundlagen der systematischen Programmierung. Peter Thiemann WS 2007/08. Universität Freiburg, Germany Informatik I Grundlagen der systematischen Programmierung Peter Thiemann Universität Freiburg, Germany WS 2007/08 Literatur Herbert Klaeren, Michael Sperber. Die Macht der Abstraktion. Teubner Verlag,

Mehr

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Einleitung Gliederung Einführung in die Programmierung Wintersemester 2017/18 Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT) Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2016 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute 1 Einführung 2 Grundlagen von Algorithmen

Mehr

Programme erstellen in Java

Programme erstellen in Java Programmieren mit Java Modul 0 Programme erstellen in Java Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Schreiben von Computerprogrammen 3 2.1 Computerprogramme bestehen aus Daten und Instruktionen.......

Mehr

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele. 1. Einführung in die Informatik Inhalt 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele Peter Sobe 1 Einführende Beispiele 2. Algorithmen Täglich werden Verarbeitungsvorschriften

Mehr

Einführung in die Programmierung Wintersemester 2016/17

Einführung in die Programmierung Wintersemester 2016/17 Einführung in die Programmierung Wintersemester 2016/17 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Einleitung Gliederung Zum Begriff Informatik Zum

Mehr

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

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen? Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2015 1 Einführung Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 2 Grundlagen von Algorithmen

Mehr

Modul Algorithmik, T-Katalog

Modul Algorithmik, T-Katalog Modul Algorithmik, T-Katalog Sommersemester 2017 Steffen Lange 1/1, Folie 1 2017 Prof. Steffen Lange - HDa/FbI - Algorithmik Organisatorisches u Vorlesung Folien im Netz u Übung eine Übung alle 14 Tage

Mehr

Lernziele Ablauf Übungsaufgaben Formalitäten. Programmierpraktika. Einführung in das Programmieren und Weiterführendes Programmieren

Lernziele Ablauf Übungsaufgaben Formalitäten. Programmierpraktika. Einführung in das Programmieren und Weiterführendes Programmieren Programmierpraktika Einführung in das Programmieren und Weiterführendes Programmieren Prof. H. G. Matthies, Dr. Elmar Zander Präsentation: Dr. Th. Grahs 7.4.2016 Programmierpraktika 7.4.2016 1/15 Lernziele

Mehr

Lernziele Ablauf Übungsaufgaben Formalitäten. Programmierpraktika. Einführung in das Programmieren und Weiterführendes Programmieren

Lernziele Ablauf Übungsaufgaben Formalitäten. Programmierpraktika. Einführung in das Programmieren und Weiterführendes Programmieren Programmierpraktika Einführung in das Programmieren und Weiterführendes Programmieren Prof. H.G. Matthies, Dr. R. Niekamp 3.4.2013 Programmierpraktika 3.4.2013 1/15 Lernziele und Voraussetzungen Einführung

Mehr

Einführung in die Informatik

Einführung in die Informatik Einführung in die Informatik Christian Rössl Wintersemester 2017/18 Einführung in die Informatik Christian Rössl EinfInf 2017: Übersicht 2 Berechenbarkeit Rekursion Java Analyse Theoretische Grundlagen

Mehr

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

Theoretische Informatik: Berechenbarkeit und Formale Sprachen Theoretische Informatik: Berechenbarkeit und Formale Sprachen Prof. Dr. F. Otto Fachbereich Elektrotechnik/Informatik, Universität Kassel 34109 Kassel, Germany E-mail: otto@theory.informatik.uni-kassel.de

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Einführung in die Programmierung Organisatorisches Prof. Dr. Peer Kröger, Florian Richter, Michael Fromm Wintersemester 2018/2019 Allgemeine Informationen zum Studium Studiengangskoordinator (Hauptfach

Mehr

Einführung in die Objektorientierte Programmierung Vorlesung 2: Mikroskopisches und Makroskopisches Computational Thinking.

Einführung in die Objektorientierte Programmierung Vorlesung 2: Mikroskopisches und Makroskopisches Computational Thinking. Einführung in die Objektorientierte Programmierung Vorlesung 2: Mikroskopisches und Makroskopisches Computational Thinking Sebastian Küpper Das makroskopische Modell: Objekte Objekt: Abbild konkreter individuell

Mehr

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung Teil I Einführung Überblick 1 Vorbemerkungen 2 Algorithmen 3 4 Historischer Überblick Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 1 1 Vorbemerkungen Was ist Informatik? Informatik

Mehr

Grundlagen der Programmierung

Grundlagen der Programmierung Grundlagen der Programmierung Dr. Tom Kamphans 1. Vorlesung 12.10.2016 1 Organisatorisches Vorlesung: Mittwochs 14:00 15:30, Raum F 201 Übung: Mittwochs 15:45 19:00, Raum F 225 Übung: alle zwei Wochen

Mehr

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele. 1. Einführung in die Informatik Inhalt 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele Peter Sobe 1 Einführende Beispiele 2. Algorithmen Täglich werden Verarbeitungsvorschriften

Mehr

Kapitel 1: Einleitung. Gliederung. Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren

Kapitel 1: Einleitung. Gliederung. Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren Kapitel 1: Einleitung Wintersemester 2006/07 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Gliederung Zum Begriff Informatik

Mehr

Praktische Informatik I

Praktische Informatik I Praktische Informatik I WS 2005/2005 Prof. Dr. Wolfgang Effelsberg Lehrstuhl für Praktische Informatik IV Universität Mannheim 1. Einführung 1-1 Inhaltsverzeichnis (1) 1. Einführung 1.1 Was ist Informatik?

Mehr

Definitionen/Vorarbeit zum Thema Java

Definitionen/Vorarbeit zum Thema Java Definitionen/Vorarbeit zum Thema Java Programmiersprachen: System von Wörtern und Symbolen, die zur Formulierung von Programmen für die elektronische Datenverarbeitung verwendet werden. Arten: z.b. Javascript

Mehr

Einführung in die Informatik I (autip)

Einführung in die Informatik I (autip) Einführung in die Informatik I (autip) Dr. Stefan Lewandowski Fakultät 5: Informatik, Elektrotechnik und Informationstechnik Abteilung Formale Konzepte Universität Stuttgart 24. Oktober 2007 Was Sie bis

Mehr

Informatik 1. Teil 1 - Wintersemester 2012/2013. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

Informatik 1. Teil 1 - Wintersemester 2012/2013. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik Informatik 1 Teil 1 - Wintersemester 2012/2013 Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik Dieser Foliensatz wurde z.t. von Herrn Prof. Grossmann übernommen 0. Rechner und Programmierung

Mehr

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

Übung zu Algorithmen und Datenstrukturen (für ET/IT) Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2015 Matthias Wieczorek Computer-Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45

Mehr

Einführung. Lehrveranstaltung. Vorlesung. Übungen. Einführung in die Funktionsweise von Computersystemen (565090)

Einführung. Lehrveranstaltung. Vorlesung. Übungen. Einführung in die Funktionsweise von Computersystemen (565090) Wintersemester 218/219 Lehrveranstaltung (5659). Kapitel Einführung Prof. Matthias Werner Professur Betriebssysteme ehem: Grundlagen der Anwendungsunterstützung Wer in einer anderen Veranstaltung sitzen

Mehr

Lineare Algebra I (WS 12/13)

Lineare Algebra I (WS 12/13) Lineare Algebra I (WS 12/13) Alexander Lytchak Nach einer Vorlage von Bernhard Hanke, Universität Augsburg 15.10.2013 Alexander Lytchak 1 / 14 Organisation Alle wichtigen organisatorischen Information

Mehr

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

Übung zu Algorithmen und Datenstrukturen (für ET/IT) Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2017 Rüdiger Göbl, Mai Bui Computer Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45

Mehr

1 Vom Problem zum Program

1 Vom Problem zum Program Ein Problem besteht darin, aus einer Menge von Informationen eine weitere (unbekannte) Information zu bestimmen. mathematisch: Ein Problem beschreibt eine Funktion f : E A, mit E = zulässige Eingaben und

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm 1 Vom Problem zum Programm Ein Problem besteht darin, aus einer Menge von Informationen eine weitere (unbekannte) Information zu bestimmen. mathematisch: Ein Problem beschreibt eine Funktion f : E A, mit

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Einführung in die Programmierung Prof. Dr. Peer Kröger, Janina Bleicher, Florian Richter Ludwig-Maximilians-Universität München, Institut für Informatik, LFE Datenbanksysteme Wintersemester 2016/2017 Peer

Mehr

Informatik. Teil 1 Wintersemester 2011/2012. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

Informatik. Teil 1 Wintersemester 2011/2012. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik Informatik Teil 1 Wintersemester 2011/2012 Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik Dieser Foliensatz wurde z.t. von Herrn Prof. Grossmann übernommen Inhalt 1. Algorithmen -

Mehr

1 Einführung: Algorithmen. Algorithmen und Datenstrukturen WS 2012/13. Pro f. Dr. Sán do r Fe k e te

1 Einführung: Algorithmen. Algorithmen und Datenstrukturen WS 2012/13. Pro f. Dr. Sán do r Fe k e te 1 Einführung: Algorithmen Algorithmen und Datenstrukturen WS 2012/13 Pro f. Dr. Sán do r Fe k e te Literatur 1.1 Was ist ein Algorithmus? Ein Algorithmus ist eine aus endlich vielen Schritten bestehende

Mehr

Angewandte Mathematik am Rechner 1

Angewandte Mathematik am Rechner 1 Angewandte Mathematik am Rechner 1 SOMMERSEMESTER 2017 Kapitel 3 [Bildquellen: Wikipedia User David Madore, Inductiveload ] Grundlagen 2: Funktionen, Berechenbarkeit und emergente Komplexität Michael Wand

Mehr

Ideen und Konzepte der Informatik

Ideen und Konzepte der Informatik Ideen und Konzepte der Informatik Programme und Algorithmen Antonios Antoniadis 23. Oktober 2017 Algorithmen und Programme Algorithmus Schritt-für-Schritt Vorschrift zur Lösung eines Problems. Formuliert

Mehr

Informatik 1 für Studiengang Elektrotechnik/Kommunikationstechnik

Informatik 1 für Studiengang Elektrotechnik/Kommunikationstechnik Informatik 1 für Studiengang Elektrotechnik/Kommunikationstechnik Wintersemester 2018/19 Prof. Dr. Peter Sobe Prof. Dr. Jens Schönthier HTW Dresden, Fakultät Informatik / Mathematik Informatik-Ausbildung

Mehr

Grundlagen der Algorithmen und Datenstrukturen

Grundlagen der Algorithmen und Datenstrukturen Grundlagen der Algorithmen und Datenstrukturen Christian Scheideler + Helmut Seidl SS 2009 01.04.09 Kapitel 0 1 Vorlesung: Organisatorisches Di 12:00 13:30 MI HS 1 Do 12:00 12:45 MI HS 1 Übungen: 34 Alternativen

Mehr

Informatik II Algorithmen & Datenstrukturen

Informatik II Algorithmen & Datenstrukturen lausthal Informatik II Algorithmen & Datenstrukturen Organisatorisches. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Ziel der Vorlesung 1. Eine (kleine) Anzahl von sehr grundlegenden Algorithmen

Mehr

Algorithmen und Datenstrukturen (AuD) Prof. Dr. Claudia Eckert und Dr. Thomas Stibor

Algorithmen und Datenstrukturen (AuD) Prof. Dr. Claudia Eckert und Dr. Thomas Stibor Algorithmen und Datenstrukturen (AuD) Prof. Dr. Claudia Eckert und Dr. Thomas Stibor Organisatorisches: Vorlesung 4 SWS, Zentralübung 2 SWS: 6 Credit Points Mi 9:45 11:15 Raum 1200 (Vorlesung) Do 8:00

Mehr

Abschnitt 11: Korrektheit von imperativen Programmen

Abschnitt 11: Korrektheit von imperativen Programmen Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961

Mehr

Diskrete Strukturen WS 2010/11. Ernst W. Mayr. Wintersemester 2010/11. Fakultät für Informatik TU München

Diskrete Strukturen WS 2010/11. Ernst W. Mayr. Wintersemester 2010/11.  Fakultät für Informatik TU München WS 2010/11 Diskrete Strukturen Ernst W. Mayr Fakultät für Informatik TU München http://www14.in.tum.de/lehre/2010ws/ds/ Wintersemester 2010/11 Diskrete Strukturen Kapitel 0 Organisatorisches Vorlesungen:

Mehr

Vorlesung Programmierung

Vorlesung Programmierung - 1 - Vorlesung Programmierung Inhalt der Vorlesung Was ist ein Programm? Was sind grundlegende Programmierkonzepte? Wie konstruiert (entwickelt) man ein Programm? Welche Programmier-Paradigmen gibt es?

Mehr

Klausur Informatik II

Klausur Informatik II Klausur Informatik II Sommersemester 23 Bearbeitungszeit 2 Minuten Name: Vorname: Matrikelnummer: Bei der Klausur sind keine Hilfsmittel (Skripten, Taschenrechner, etc.) erlaubt. Schreiben Sie bitte mit

Mehr

Propädeutischen Fächer

Propädeutischen Fächer Studienplan für die Propädeutischen Fächer und die Zusatzfächer angeboten von der Math.-Natw. Fakultät im Rahmen eines Bachelor of Science oder für andere Studiengänge mit diesen Programmen Zusatzfächer

Mehr

Kapitel 1 Einleitung. Definition: Algorithmus nach M. Broy: aus: Informatik: Eine grundlegende Einführung, Band 1, Springer-Verlag, Berlin

Kapitel 1 Einleitung. Definition: Algorithmus nach M. Broy: aus: Informatik: Eine grundlegende Einführung, Band 1, Springer-Verlag, Berlin Kapitel 1 Einleitung 1.1. Begriff des Algorithmus Eine der ältesten Beschreibungstechniken für Abläufe: Benannt nach dem Mathematiker Al-Khwarizmi (ca. 780...840), der am Hof der Kalifen von Bagdad wirkte.

Mehr

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn Ideen und Konzepte der Informatik Programme und Algorithmen Kurt Mehlhorn Algorithmen und Programme Algorithmus Schritt-für-Schritt Vorschrift zur Lösung eines Problems. Formuliert man umgangssprachlich,

Mehr

Automaten und Formale Sprachen

Automaten und Formale Sprachen Automaten und Formale Sprachen Einführung Ralf Möller Hamburg Univ. of Technology Übung Fr. 14:30-15:15 Max Berndt, D1025 Literatur Gottfried Vossen, Kurt-Ulrich Witt: Grundkurs Theoretische Informatik,

Mehr

Informatik II: Algorithmen und Datenstrukturen SS 2013

Informatik II: Algorithmen und Datenstrukturen SS 2013 Informatik II: Algorithmen und Datenstrukturen SS 2013 Vorlesung 1a, Dienstag, 16. April 2013 (Organisatorisches, Programmierumgebung, Sortieren) Prof. Dr. Hannah Bast Lehrstuhl für Algorithmen und Datenstrukturen

Mehr

Vorlesung Programmierung

Vorlesung Programmierung - 1 - Vorlesung Programmierung Inhalt der Vorlesung Was ist ein Programm? Was sind grundlegende Programmierkonzepte? Wie konstruiert (entwickelt) man ein Programm? Welche Programmier-Paradigmen gibt es?

Mehr

Theoretische Informatik

Theoretische Informatik Theoretische Informatik Sommersemester 2004 Christoph Kreitz Theoretische Informatik, Raum 1.18, Telephon 3060 kreitz@cs.uni-potsdam.de http://www.cs.uni-potsdam.de/ti/kreitz 1. Themen und Lernziele 2.

Mehr

Ingenieurinformatik. Einführung in die Programmiersprache C

Ingenieurinformatik. Einführung in die Programmiersprache C Ingenieurinformatik Einführung in die Programmiersprache C 1 Das Modul Ingenieurinformatik wird in den Bachelorstudiengängen Maschinenbau, Fahrzeugtechnik, Luft- und Raumfahrt angeboten Teil 1: Grundlagen

Mehr

Liste MI / Liste I Programmieren in C++

Liste MI / Liste I Programmieren in C++ Liste MI / Liste I Programmieren in C++ Fachhochschule Wiesbaden, FB Design Informatik Medien Studiengang Medieninformatik WS 2007/2008 Kapitel 1-4 1 Ziele Kennenlernen einer weiteren objektorientierten

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Überblick Grundlagen Definitionen Eigene Entwicklungen Datenstrukturen Elementare Datentypen Abstrakte Datentypen Elementare

Mehr

2. JAVA-Programmierung. Informatik II für Verkehrsingenieure

2. JAVA-Programmierung. Informatik II für Verkehrsingenieure 2. JAVA-Programmierung Informatik II für Verkehrsingenieure Problem-Algorithmus-Umsetzung Problemstellung Algorithmus Umsetzung 2 Beispiele für Algorithmen 3 Definitionsversuch Algorithmus Anleitung, wie

Mehr

Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Wintersemester 2012/13. Dr. Tobias Lasser. 1 Organisation

Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Wintersemester 2012/13. Dr. Tobias Lasser. 1 Organisation Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute 1 Organisation 2 Einführung Ziele und

Mehr

Grundlagen der Programmiersprachen

Grundlagen der Programmiersprachen GPS-0-1 Grundlagen der Programmiersprachen Prof. Dr. Uwe Kastens Sommersemester 2016 Vorlesung Grundlagen der Programmiersprachen SS 2016 / Folie 001 Anfang Begrüßung Ziele GPS-0-2 Die Vorlesung soll Studierende

Mehr

Programmiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 -

Programmiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 - Programmiersprachen: Klassifizierung und Methoden Programmier-Paradigmen Grundlagen der Programmierung 2 (1.C) - 1 - Programmiersprachen: Begriffe Syntax Beschreibung der Programme als Texte let xyz =

Mehr

Vorlesung Programmierung

Vorlesung Programmierung - 1 - Vorlesung Programmierung n Inhalt der Vorlesung l Was ist ein Programm? l Was sind grundlegende Programmierkonzepte? l Wie konstruiert (entwickelt) man ein Programm? l Welche Programmier-Paradigmen

Mehr

Inhalte des Moduls Programmieren 1

Inhalte des Moduls Programmieren 1 Inhalte des Moduls Programmieren 1 Einführung: Algorithmus und Programm, Programmiersprache Erste Schritte in Java Grundlagen der Sprache: Datentypen, Ausdrücke und Anweisungen, imperative Programmierung

Mehr

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn Ideen und Konzepte der Informatik Programme und Algorithmen Kurt Mehlhorn November 2016 Algorithmen und Programme Algorithmus = Schritt-für-Schritt Vorschrift zur Lösung eines Problems. Formuliert man

Mehr

Vorlesung Programmierung

Vorlesung Programmierung - 1 - Vorlesung Programmierung Inhalt der Vorlesung Was ist ein Programm? Was sind grundlegende Programmierkonzepte? Wie konstruiert (entwickelt) man ein Programm? Welche Programmier-Paradigmen gibt es?

Mehr

FORMULIEREN VON AUSSAGEN KONSTANTEN VARIABLEN MENGEN DEFINITIONEN SÄTZEN BEWEISEN LOGIK VERSTEHE, WIE ES FUNKTIONIERT

FORMULIEREN VON AUSSAGEN KONSTANTEN VARIABLEN MENGEN DEFINITIONEN SÄTZEN BEWEISEN LOGIK VERSTEHE, WIE ES FUNKTIONIERT FORMULIEREN VON AUSSAGEN KONSTANTEN VARIABLEN MENGEN DEFINITIONEN SÄTZEN BEWEISEN LOGIK VERSTEHE, WIE ES FUNKTIONIERT Dirix Workbooks, Seefeld am Pilsensee Autor: Martin Dirix ISBN 978-3-7347-7405-8 1.

Mehr

Informatik 1. Sommersemester Helmut Seidl. Institut für Informatik TU München

Informatik 1. Sommersemester Helmut Seidl. Institut für Informatik TU München Informatik 1 Sommersemester 2011 Helmut Seidl Institut für Informatik TU München 1 0 Allgemeines Inhalt dieser Vorlesung: Einführung in Grundkonzepte der Informatik; Einführung in Denkweisen der Informatik;

Mehr

Algorithmen & Datenstrukturen

Algorithmen & Datenstrukturen Algorithmen & Datenstrukturen Prof. Dr. Gerd Stumme Universität Kassel FB Elektrotechnik/Informatik FG Wissensverarbeitung Sommersemester 2009 Ziele der Veranstaltung 1 Kennenlernen grundlegender Algorithmen

Mehr

Programmierung 1 für Wirtschaftsinformatik Wintersemester 2017/18

Programmierung 1 für Wirtschaftsinformatik Wintersemester 2017/18 Programmierung 1 für Wirtschaftsinformatik Wintersemester 2017/18 Prof. Dr.-Ing. habil. Peter Sobe Fakultät Informatik / Mathematik Programmierung 1: Programmierung 1 - Ziele Vermittlung von Grundkenntnissen

Mehr

Informatik 1 (WS 2018/2019)

Informatik 1 (WS 2018/2019) Informatik 1 (WS 2018/2019) Klaus Berberich (klaus.berberich@htwsaar.de) Wolfgang Braun (wolfgang.braun@htwsaar.de) 0. Organisatorisches Dozenten Klaus Berberich (klaus.berberich@htwsaar.de) Sprechstunde

Mehr

Das Studium im Fach Informatik

Das Studium im Fach Informatik [Projekttage Studien- und Berufsorientierung der Jgst. 12] Fachbereich Informatik Fakultät für Mathematik und Informatik FernUniversität Hagen 17. Februar 2009 Was Informatik nicht ist Was ist Informatik?

Mehr

Clevere Algorithmen programmieren

Clevere Algorithmen programmieren ClevAlg 2017 Theoretische Informatik Clevere Algorithmen programmieren Dennis Komm, Jakub Závodný, Tobias Kohn 06. Dezember 2017 Die zentralen Fragen sind... Was kann man mit einem Computer nicht machen?

Mehr

Algorithmen und Datenstrukturen CS1017

Algorithmen und Datenstrukturen CS1017 Algorithmen und Datenstrukturen CS1017 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Organisatorisches und Einführung Lehrpersonal Dozent Dr. Letschert Tutoren Alissia Sauer Jonas

Mehr