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 Folien: http://home.htw-berlin.de/~kamphans Email: tom.kamphans@htw-berlin.de 2
Organisatorisches Bestehen des Moduls: Erfolgreiche Teilnahme an den Übungen Anwesenheit Mitarbeit / Aufgaben erfolgreich absolviert KLAUSUR 1. Zeitraum: 30.01. bis 18.02.2017 Vorschlag: 15.02.2017 2. Zeitraum: 27.03. bis 08.04.2017 3
Literatur Jürgen Wolf: C von A bis Z (Galileo Computing) Openbook: http://openbook.galileocomputing.de/c_von_a_bis_z/ Brian W. Kernighan, Dennis Ritchie: The C Programming Language. (Prentice Hall) deutsch: Programmieren in C (Hanser Verlag) 4
Fragen Wer hat noch NIE...... Email benutzt?... einen Computer bedient?... im Web gesurft?... eine Textverarbeitung benutzt?... mit Windows 10 gearbeitet?... mit MacOS gearbeitet?... mit Linux gearbeitet? 5
Fragen Wer hat schon einmal programmiert?... in C?... in C++ oder Java? weiß, was ein Algorithmus ist? kennt das P/NP Problem? 6
Inhalte Programmieren C Handwerkszeug Algorithmen und Datenstrukturen: "Programmieren" auf höherer Ebene Vorüberlegungen beim Entwurf eines Programms 7
C Entwickelt 1972 von Dennis Ritchie Wird seitdem weiterentwickelt Sehr hohe Bedeutung Basis für C++, Java, C#, Perl, Ruby,... Systemnah (ermöglicht Programmierung von Betriebssystemen, Treibern, Embedded Devices,...) 8
C Imperativ Programme bestehen aus einer Folge von Anweisungen, die vorgeben, in welcher Reihenfolge was vom Computer getan werden soll (im Ggs: objektorientiert, deskriptiv) Strukturiert erlaubt "übersichtliche" Anordnung der Anweisungen in Blöcken mit Hilfe von Kontrollstrukturen und Prozeduren ermöglicht größere Softwareprojekte 9
Was heißt Programmieren? 10
Programmieren Problem Algorithmus Implementierung Programm 11
Algorithmus Ein Algorithmus ist eine aus endlich vielen Schritten bestehende eindeutige Handlungsvorschrift zur Lösung eines Problems oder einer Klasse von Problemen. (Wikipedia) Beispiel: nimm Bockwurst aus der Dose koche Wasser lasse Bockwurst 5 Minuten im Wasser ziehen 12
Vom Problem zum Algorithmus ein Problem Was heißt berechenbar? berechenbar? Was heißt effizient? JA effizient berechenbar? JA NEIN Was können wir tun? Wie gut ist unsere Lösung? Geht es besser? 13
Berechenbarkeit Computermodell Speicherzellen zum Speichern von Zahlen Zeiger auf "aktuelle Speicherzelle" Befehle: Verschiebe Zeiger nach rechts/links Erhöhe/Erniedrige Wert um 1 Wiederhole Anweisungsfolge, bis Zeiger auf Speicherzelle mit Wert 0 zeigt Eingabe/Ausgabe einer Speicherzelle 14
Nicht-Berechenbarkeit Conways Game of Life Gegeben zweidimensionales Spielfeld (Zellen) Jede Zelle kann einen von zwei Zuständen (lebend, tot) annehmen Folgegeneration entsteht nach folgenden Regeln: Zelle wird lebendig, wenn drei ihrer acht Nachbarn leben Zelle mit 4 lebenden Nachbarn stirbt (Übervölkerung). Zelle mit 1 lebenden Nachbar stirbt (Vereinsamung). Frage: Gegeben eine Anfangspopulation im Game of Life, wird diese ewig leben? Nicht berechenbar! 15
Effizienz Gegeben ein Graph (z.b.: Straßennetz mit Orten und Entfernungen) Finde kürzeste Rundtour, die alle Orte besucht 8 7 2 5 2 2 3 3 5 5 4 6 7 16
Effizienz Lösung: berechne alle möglichen Touren wähle die billigste aus kann sehr lange dauern nicht effizient! nicht effizient berechenbar? man weiß nicht, ob eine effiziente Lösung existiert! Vermutung: existiert nicht 17
Wie beschreibt man Algorithmen? Programmcode: max=0; for(i=0; i<n; i++) if ( a[i] > max ) max=a[i]; Pseudocode: durchlaufe Array a, bestimme das maximale Element auch möglich: Flußdiagramme Einzige Regel: es muss klar werden, was gemacht werden soll Technik für Algorithmenentwurf: Schrittweise Verfeinerung 18
Vom Algorithmus zum Programm Elemente von Programmiersprachen Operatoren Kontrollstrukturen Bibliotheksfunktionen 19
Beispiel: Turtlegraphik Turtlegraphik: bewegt Zeiger ("Turtle") über den Bildschirm, zeichnet Spur des Zeigers Befehle: Bewege Zeiger (MOVE schrittweite) Drehe Zeiger (TURN winkel) Problem: Zeichne Quadrat mit Kantenlänge 100 Erstmal kein C, sondern Scratch (http://scratch.mit.edu) 20
Quadrat mit Turtlegraphik MOVE 100 TURN 90 MOVE 100 TURN 90 MOVE 100 TURN 90 MOVE 100 TURN 90 Befehl Parameter 21
Geht's einfacher? Wiederhole 4 mal: MOVE 100 TURN 90 22
Kontrollstruktur! "Klammer" für Befehle auch selbst Befehl! 23
Neue Befehle definiert neuen Befehl Anwendung: 24
Neue Befehle Ziel: Befehl zum Zeichnen eines Quadrates definieren, unabhängig von der Seitenlänge Die Seitenlänge ist ein Parameter des neuen Befehls Quadrat Neuer Befehl kann genau wie geg. Befehl verwendet werden 25
Neue Befehle mit Parameter 26
Kontrollstrukturen Kontrollstrukturen erlauben, den Programmablauf zu steuern Kontrollstrukturen Schleifen Verzweigungen nichtbedingt bedingt 27
Beispiel: Verzweigungen Problem: Zeichne Quadrat in blau, falls Space-Taste gedrückt wurde, sonst rot Befehle: Setze Farbe für Spur Frage, ob bestimmte Taste gedrückt wurde 28
Beispiel: bedingte Schleifen Problem: laufe zufällig, bis Space-Taste gedrückt wird Befehle: Zufallszahl zwischen n und m 29
Beispiel: Variablen und Operatoren Problem: wie oben, aber zähle zurückgelegte Wegstrecke Speicher benötigt (Variable) Operatoren: Zuweisung: Variable = Wert Addition: Wert + Wert Befehle: Gib Wert von Variable aus Algorithmus? Wert: Zahl oder Variable 30
Beispiel: Variablen und Operatoren Algorithmus: Wichtig!! setze summe auf 0 Wiederhole, bis Space gedrückt: x = Zufallszahl summe = summe + x MOVE x TURN Zufallszahl Gib Wert von summe aus 31
Beispiel: Variablen und Operatoren 32