Programmieren in C / C++ Einführung Hochschule Fulda – FB AI Wintersemester 2016/17 http://c.rz.hs-fulda.de Peter Klingebiel, HS Fulda, FB AI Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Zur Vorlesung • Peter Klingebiel – – – – – – – – Dipl. Ing. Maschinenbau 10/1995 bis 9/2016 Leiter DVZ HS Fulda Seit 4/2016 FB AI – Lehrkraft für besondere Aufgaben Raum 43.008 (C008) Telefon 0661/9640-3024 Sprechstunde: dienstags 12:30 bis 14:00 nach Vereinbarung http://www.hs-fulda.de/~klingebiel mailto:[email protected] • Webseite der Vorlesung – Folien, Aufgaben, Demoprogramme, Links usw. – http://c.rz.hs-fulda.de Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 3 Programmieren in C 1 • Programmieren • in • C ??? Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmieren in C 2 • Quelle: Eines Tages - Spiegel Online Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 5 Programmieren in C 3 • Quelle: Eines Tages - Spiegel Onlin Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 6 Programmieren !?!?!? Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmieren • Wikipedia: http://de.wikipedia.org/wiki/Programmierung • Definition: „Programmieren ist eine Tätigkeit, bei der versucht wird, durch systematischen Einsatz einer gegebenen Programmiersprache ein gestelltes Problem zu lösen.“ aus: H. Balzert, Lehrbuch Grundlagen der Informatik, 1999 Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programm • Wikipedia: http://de.wikipedia.org/wiki/Computerprogramm • Definition: „Algorithmen, die von einem automatischen Prozessor abgearbeitet werden, bezeichnet man als Programme. Ein Programm stellt die Realisierung eines Algorithmus dar. Im Gegensatz zu einem Algorithmus ist ein Programm konkreter und eingeschränkter.“ aus: Balzert, Lehrbuch ... Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Algorithmus • Wikipedia: http://de.wikipedia.org/wiki/Algorithmus • Definition: „Algorithmus (Plural: Algorithmen), Problemlösungsbeschreibung, die festlegt, wie ein Problem gelöst werden soll.“ aus: Balzert, Lehrbuch ... Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Euklidischer Algorithmus 1 • Wikipedia: http://de.wikipedia.org/wiki/Euklidischer_Algorithmus • „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.“ aus: Euklid, Die Elemente, hrg. v. C. Thaer • Algorithmus zur Bestimmung des größten gemeinsamen Teilers (ggT) Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Euklidischer Algorithmus 2 • Alter Algorithmus, iterativ, Pseudocode euklid(a, b) wenn a = 0 dann liefere b sonst solange b ≠ 0 wenn a > b dann a = a – b sonst b = b – a liefere a Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Euklidischer Algorithmus 3 /* * * * * */ euklid1.c Euklidischer Algorithmus Alt, Iteration klin, Sat Mar 20 20:38:22 2010 #include <stdio.h> int eu(int a, int b) { static int n = 0; n++; printf("%3d a=%9d b=%9d\n", n, a, b); Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Euklidischer Algorithmus 4 • Alter Algorithmus, rekursiv, Pseudocode euklid(a, b) wenn b = 0 dann liefere a sonst wenn a = 0 dann liefere b sonst wenn a > b dann liefere euclid(a-b, b) sonst liefere euklid(a, b-a) Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Euklidischer Algorithmus 5 /* * * * * */ euklid2.c Euklidischer Algorithmus Alt, Rekursion klin, Sat Mar 20 20:38:22 2010 #include <stdio.h> int eu(int a, int b) { static int n = 0; n++; printf("%3d a=%9d b=%9d\n", n, a, b); Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Euklidischer Algorithmus 6 • Neuer Algorithmus, iterativ, Pseudocode euklid(a, solange h = a a = b b = h liefere b) b ≠ 0 modulo b a Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Euklidischer Algorithmus 7 /* * * * * */ euklid3.c Euklidischer Algorithmus Neu, Iteration klin, Sat Mar 20 20:38:22 2010 #include <stdio.h> int eu(int a, int b) { static int n = 0; int h; while(b != 0) { Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Euklidischer Algorithmus 8 • Neuer Algorithmus, rekursiv, Pseudocode euklid(a, b) wenn b = 0 dann liefere a sonst liefere euklid(b, a modulo b) Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Euklidischer Algorithmus 9 /* * * * * */ euklid4.c Euklidischer Algorithmus Neu, Rekursion klin, Sat Mar 20 20:38:22 2010 #include <stdio.h> int eu(int a, int b) { static int n = 0; n++; printf("%3d a=%9d b=%9d\n", n, a, b); Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Kochrezept 1 Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 20 Kochrezept 2 Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 21 Montageanleitung Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 22 Kaffee kochen 1 Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 23 Kaffee kochen 2 Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 24 Kaffee kochen 3 Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 25 Temperaturregelung Bügeleisen 1 Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 26 Temperaturregelung Bügeleisen 2 • Schematischer Aufbau Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 27 Temperaturregelung Bügeleisen 3 • Wirkungsplan / Regelkreis Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 28 Temperaturregelung Bügeleisen 4 • Temperaturverlauf Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 29 Algorithmus Temperaturregelung ? ????? Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Temperaturregelung in Assembler ; ; ; ; ; ; ; ; ; ; ; temperaturregelung.asm Simulation einer einfachen Temperaturregelung, z.B. bei Bügeleisen. AD- und DA-Wandler werden über Tastatur und Display simuliert: Temperatur wird von Tastatur mit '0' .. '9' gelesen, wobei '5' 100 Grad entspricht. Temperatur < 100 Grad -> Heizung ein -> '+' Temperatur > 100 Grad -> Heizung aus -> '-' klin, 20. März 2010 title Temperatur_Regelung ; ; AD-Wandler ; Simulation: Temperatur von Tastatur lesen Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Temperaturregelung in C /* * * * */ temperatur.c Simuliere einfache Temperaturregelung klin, Fri Mar 19 14:45:15 2010 #include <stdlib.h> #include <stdio.h> #define #define #define #define TMIN TMAX TDIF TEMP 100 120 (TMAX-TMIN) 110 /* /* /* /* Minimaltemperatur Maximaltemperatur Maximale Temperaturdiff Solltemperatur /* Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmiersprachen 1 • Wikipedia: http://de.wikipedia.org/wiki/Programmiersprache • Definition: „Um Problemlösungen in einem Formalismus niederschreiben zu können, legt man Programmiersprachen fest.“ aus: Balzert, Lehrbuch ... Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmiersprachen 2 • Eine Programmiersprache ist eine formale Sprache (im Gegensatz z.B. zur Umgangssprache) • Programmiersprachen haben ein exakt definiertes Alphabet (i.d.R. Buchstaben, Ziffern und Sonderzeichen) • Programmiersprachen haben einen meist sehr kleinen Wortschatz (C etwa kennt nur 32 Worte!) • Programmiersprachen haben i.d.R. eine exakt einzuhaltende Syntax Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmiersprachen 3 Problemstellung Hochsprachen (z.B. Fortran, Pascal, C, C++, Java, SQL, PHP) Assemblersprachen (für reale oder virtuelle Maschine / CPU) Maschinensprachen (Bitcode, Bytecode, Microcode) Hardware / Rechner / CPU Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmiersprachen 4 • Skriptsprachen werden während der Ausführung vom Sprachinterpreter in Maschinencode übersetzt. Beispiele: Shell, Perl, PHP, SQL, Basic • Compilersprachen müssen vor der Ausführung von einem Übersetzersystem (Compiler, Linker) in Maschinencode übersetzt werden. Beispiele: Pascal, C, C++, C#, Java Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmiersprachen 5 • Paradigmata – – – – Imperative Sprachen (Fortran, Pascal, C, Ada) Deklarative Sprachen (SQL, Lisp) Objektorientierte Sprachen (Java, C++) Nebenläufige Sprachen (Ada, Java, Par C) • Typisierung – Typenlose Sprachen (JavaScript, PHP) – Stark typisierte Sprachen (Ada) – Schwach typisierte Sprachen (C, C++) Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmiersprachen 7 • Beispiele Typisierung $ cat typetest.php <?php // typetest.php $string = "Hallo, Welt!"; $zahl = 4; $unsinn1 = $string + $zahl; $unsinn2 = $string / $zahl; echo "string=[" . $string . "] zahl=[" . $zahl echo "unsinn1=[" . $unsinn1 . "] unsinn2=[" . $ ?> $ php typetest.php • Stammbaum Programmiersprachen (Wikipedia) Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmentwicklung 1 • Problem analysieren Modell entwerfen Algorithmus entwickeln • Programm kodieren • Programm übersetzen (bis syntaktisch fehlerfrei) • Programm testen (bis semantisch fehlerfrei ?) • Programm produktiv Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI Programmentwicklung 2 • Friedemann Weise: Doppelkaffeetasse (auf youtube) Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 40 Programmentwicklung 3 • Beispiel: Entwicklungsumgebungen für C – Kommandozeile mit Systemtools • Unix / Linux / Windows / iOS: • Editor, Systemcompiler (gcc), Debugger, usw. • GCC (http://gcc.gnu.org/) – Integrierte Entwicklungsumgebung (IDE) • • • • • NetBeans (https://netbeans.org/) z.B. mit Cygwin (http://www.cygwin.com/) Code::Blocks (http://www.codeblocks.org/) z.B. mit MinGW (http://www.mingw.org/) u.v.a.m. Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 41 Mikrokontroller 1 • Beispiel: Arduino Uno Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 42 Mikrokontroller 2 • Beispiel: Arduino Nano Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 43 Mikrokontroller 3 Programmieren in C / C++ - Peter Klingebiel - HS Fulda - FB AI 44