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 zu werden, entschied ich mich für die intellektuell anspruchsvollere Aufgabe und wurde Programmierer! Edsger W. Dijkstra (1930 2002) auf der sd&m-konferenz in Bonn, 2001 2
Organisation Vorlesung - Wöchentlich Fr. - Folien können von meiner Homepage heruntergeladen werden: www.fbi.h-da.de/~b.humm - Kurze Vorlesungsteile verschränkt mit Hörsaalübungen - Bitte Notebooks für Hörsaalübungen mitbringen. Wer kein eigenes Notebook besitzt, kann sich über das Sekretariat ein Notebook vom Fachbereich leihen - Video-Aufzeichnung der Vorlesungen Praktikum - Zweiwöchentlich - Bearbeitung der Übungsaufgaben in Zweiergruppen 3
Organisation (2) Entwicklungsumgebung - Für Hörsaalübungen und Praktika - Alle Werkzeuge sind frei verfügbar - Bitte vorab auf Notebook installieren - Installationsanleitung auf meiner Homepage www.fbi.h-da.de/~b.humm Prüfung - Praktische Programmierprüfung am Ende des Semesters 4
Was ich gerne vermitteln möchte Programmieren / Algorithmen und Datenstrukturen 1 Konzepte Programmieren Werkzeuge Systementwurf Programmiersprachen Algorithmen u. Funktionen Kontrollstrukturen Datenstrukturen Objekt-Orientierung Logo BlueJ C++ 11 Syntax & Semantik Guter Programmierstil Erweiterte Konzepte Elica Logo Environment BlueJ NetBeans IDE Praktikum, Diskussionen, Ausblicke zum Weiterdenken 5
Überblick über den Kurs Einführung Operationen Variablen Kontrollstrukturen Rekursion Objekte und Klassen C++ Unit Testing Zeiger Komposition Vektoren Verkettete Listen Sortieren und Suchen Logo BlueJ C++ 6
Vom Problem zum Programm 7 Mensch Maschine Analyse Design Compilation Programmierung Maschinenprogramm Deployment Ausführung Problem Spezifikation Design / Algorithmus Programm Laufzeitumgebung komplex mehrdeutig semi-formal nicht vollständig semi-formal nicht vollständig präzise meist normiert unabhängig vom Prozessor primitiv abhängig vom Prozessor auf konkretem Prozessor
Programmieren ist ein Problem so exakt beschreiben, dass es ein Computer lösen kann eine kreative Tätigkeit eine Ingenieurtätigkeit Nur wenige Menschen können gut programmieren Any fool can write code that a computer can understand. Good programmers write code that humans can understand. Martin Fowler, 2008 8
Familien von Programmiersprachen ALGOL, AWK, BASIC, C, COBOL, FORTRAN, Pascal, PL/1, REXX, Cyclone je Prozessortyp Assemblerund Maschinensprachen Prozedurale Sprachen Funktionale Sprachen LISP, Logo, ML, Scheme, Haskell, OPAL, Miranda 9 Auzeichnungssprachen (z.b. HTML, XML), Datenbanksprachen (zum Beispiel SQL, dbase, Clipper), etc. Sonstige Sprachen und Umgebungen Programmiersprachen Logische und regelbasierte Sprachen Objektorientierte Sprachen Prolog OPS5, XSLT Smalltalk, Eiffel, C++, Objective-C, Java, C#, Oberon, Python, Ruby
Algorithmen im Alltag: Kochrezepte 10
Algorithmen in der Geometrie: Quadrat zeichnen Wie würden Sie es tun? act Quadrat zeichnen Start (Eingabe: Länge) zeichne Linie: Länge drehe Lineal: 90 zeichne Linie: Länge drehe Lineal: 90 zeichne Linie: Länge drehe Lineal: 90 zeichne Linie: Länge 11 Ende
Und das programmieren wir nun 12
Dafür verwenden wir eine Datei (Professional Programming Style) Siehe Info Elica Environment Professional Programming Style Bitte den Code im Online Dokument unter Code Sharing Einleitung ablegen und Namen angeben. Bitte vorher prüfen, ob bereits eine identische Lösung eingetragen ist (dann Eintrag nicht nötig) 13