Ralf Salomon
Begleitendes ¨ Ubungsmaterial zur
Einf¨ uhrung in die Praktische Informatik
Eine Einf¨ uhrung
speziell f¨ ur Elektrotechniker und andere Ingenieure
# i n c l u d e < s t d i o . h >
int m a i n ( int argc , c h a r ** a r g v ) {
p r i n t f ( " Guys , I ’ ve got f o u r w o r d s for you : \ n " ) ; p r i n t f ( " E x e r c i s e , e x e r c i s e , and e x e r c i s e ! \ n " ) ; p r i n t f ( " In o t h e r w o r d s : e x e r c i s e or p e r i s h !\ n " ) ; p r i n t f ( " G o o d l u c k . . . \ n " ) ; }
Ralf Salomon
Begleitendes ¨Ubungsmaterial zum Skript:
Praktische Informatik und die Programmiersprache C
Eine Einf¨uhrung speziell f¨ur Elektrotechniker und andere Ingenieure
ISBN 978-3-00-047148-3
Copyright c Ralf Salomon, 18119 Rostock, 2014
Alle Rechte vorbehalten. Nachdruck, ¨Ubersetzung, Vortrag,
Reproduktion, Vervielf¨altigung auf fotomechanischen oder anderen Wegen sowie Speicherung in elektronischen Medien auch auszugsweise nur mit ausdr¨ucklicher Genehmigung des Autors gestattet.
Die in diesem Werk wiedergegebenen Gebrauchsmuster, Handelsnamen, Warenbezeichnungen usw. k¨onnen auch ohne besondere Kennzeichnung Marken sein und als solche den gesetzlichen Bestimmungen unterliegen.
Haftungsausschluss: Weder die Autoren noch sonstige Stellen sind f¨ur etwaige Sch¨aden, die aus der Verwendung der in diesem Dokument enthaltenen Informationen resultieren, verantwortlich.
Der Autor haftet nicht f¨ur die Inhalte der in diesem Buch angegebenen Web-Links und macht sich diese Inhalte nicht zu eigen.
Satz: Ralf Salomon
Druck und Verarbeitung: Westarp & Partner Digitaldruck Hohenwarsleben UG Printed in Germany
Umwelthinweis: Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt.
Email:ralf.salomon@uni-rostock.de Web: www.imd.uni-rostock.de/ma/rs
Danksagung und allgemeine Referenzen
Das hier vorliegende Manuskript beinhaltet 33 einzelne ¨Ubungspakete. Diese dienen der Vertiefung sowie dem praktischen ¨Uben des Stoffes, der im vorlesungsbegleitenden Skript Praktische Informatik und die Programmiersprache C behandelt wird. Die Stoffauswahl, die Reihenfolge der einzelnen Aspekte und die gew¨ahlte Abstraktionsebene sind in erster Linie auf den Kenntnisstand und die sp¨ateren Programmierbed¨urfnisse unserer Elektro- technikstudenten des ersten Semesters zugeschnitten.
Bei der Erstellung, dem Design und der Korrektur der ¨Ubungspakete haben viele Per- sonen geholfen. In erster Linie sind die Mitarbeiter Enrico Heinrich, Matthias Hinkfoth, Ralf Joost, Ralf Warmuth und Ren´e Romann zu nennen, die durch ihre Anmerkungen, Vorschl¨age, Hinweise und teils sehr intensive und kontroverse Diskussionen zum Gelingen maßgeblich beigetragen haben. Also Jungs, vielen Dank!
Desweiteren sind alle Studenten zu nennen, die dem Fehlerteufel zu Leibe ger¨uckt sind.
Großen Dank an euch alle. Besonders hervorzuheben ist hier die Arbeit von Andrea Dorn, die das Manuskript noch einmal sehr gr¨undlich gelesen und korrigiert hat.
Eine wesentliche Voraussetzung f¨ur das Erstellen der einzelnen ¨Ubungsaufgaben war die sehr inspirierende Arbeitsumgebung, die ich in den Sommermonaten der Jahre 2013 und 2014 auf Maui vorfand. Daher geb¨uhrt großer Dank all den anonymen Besch¨aftigten fol- gender Lokalit¨aten, die mich unwissentlich vor allem durch Kaffee, Musik und ihren Spirit unterst¨utzt haben: Denny’s at South Kihei, Paia Bay Cafe at Paia, Starbucks at South Kihei und Starbucks at Kahului. Thanks guys, your help is highly appreciated!
Keine der hier vorzufindenden ¨Ubungsaufgaben ist bewusst irgendwo abgeschrieben wor- den. Nat¨urlich kann es bei aller Sorgfalt sein, dass es in der Literatur ¨ahnliche Aufgaben, Quizfragen oder Programme gibt. Doch sind diese ¨Ahnlichkeiten reiner Zufall oder Resultat von mehr als 25 Jahren Programmier- und Lehrerfahrung, in denen man viel programmiert hat und vor allem auch Open-Source Quellen sieht, an die man sich heute nicht mehr er- innert.
Nat¨urlich haben auch einige B¨ucher ihre unverkennbaren Spuren hinterlassen. Hier sind insbesondere das Buch ¨uber Algorithmen und Datenstrukturen, von Niklaus Wirth [4], die Einf¨uhrung in das Software Engineering von Kimm et al. [3], das Originalbuch ¨uber die Programmiersprache C von Kernighan und Ritchie [2] sowie das Buch ¨uber das Unix Betriebssystem von Maurice Bach [1] zu nennen.
Inhaltsverzeichnis
Vorwort
1 Grundlagen: von der Hardware zum Programmieren
Stoffwiederholung . . . 1-1 Quiz . . . 1-4 Fehlersuche . . . 1-5 Anwendungen . . . 1-8 2 Erste Kontakte mit dem PC
Motivation: Warum das alles . . . ? . . . 2-1 Kommandoeingabe unter Linux . . . 2-2 Kommandoeingabe unter Windows . . . 2-8 Die wichtigsten Befehle. . . 2-13 3 Mein erstes Programm: Fl¨ache eines Rechtecks
Stoffwiederholung . . . 3-1 Quiz . . . 3-3 Fehlersuche . . . 3-4 Anwendungen . . . 3-5 4 Klassifikation von Dreiecken
Stoffwiederholung . . . 4-1 Quiz . . . 4-3 Fehlersuche . . . 4-4 Anwendungen . . . 4-5 5 Abstrakte Programmierung
Stoffwiederholung . . . 5-1 Quiz . . . 5-3 Fehlersuche . . . 5-4 Anwendungen . . . 5-5 6 Arbeiten mit Syntaxdiagrammen
iv
Stoffwiederholung . . . 6-1 Quiz . . . 6-2 Fehlersuche . . . 6-5 Anwendungen . . . 6-6 7 Angemessenes Formatieren von C-Programmen
Stoffwiederholung . . . 7-1 Quiz . . . 7-3 Fehlersuche . . . 7-4 Anwendungen . . . 7-5 8 Datentyp int
Stoffwiederholung . . . 8-1 Quiz . . . 8-3 Fehlersuche . . . 8-4 Anwendungen . . . 8-5 9 Logische Ausdr¨ucke
Stoffwiederholung . . . 9-1 Quiz . . . 9-2 Fehlersuche . . . 9-3 Anwendungen . . . 9-4
10 Fallunterscheidungen
Stoffwiederholung . . . 10-1 Quiz . . . 10-3 Fehlersuche . . . 10-5 Anwendungen . . . 10-7
11 Schleifen
Stoffwiederholung . . . 11-1 Quiz . . . 11-3 Fehlersuche . . . 11-6 Anwendungen . . . 11-7
12 Der Datentyp char
Stoffwiederholung . . . 12-1 Quiz . . . 12-2 Fehlersuche . . . 12-3 Anwendungen . . . 12-4 13 Der Datentyp double
Stoffwiederholung . . . 13-1 Quiz . . . 13-2
v
Fehlersuche . . . 13-3 Anwendungen . . . 13-4
14 Eindimensionale Arrays
Stoffwiederholung . . . 14-1 Quiz . . . 14-2 Fehlersuche . . . 14-3 Anwendungen . . . 14-4
15 Einfaches Sortieren, Suchen und Finden
Stoffwiederholung . . . 15-1 Quiz . . . 15-3 Fehlersuche . . . 15-4 Anwendungen . . . 15-5 16 Gemischte Datentypen
Stoffwiederholung . . . 16-1 Quiz . . . 16-2 Fehlersuche . . . 16-3 Anwendungen . . . 16-4 17 Der gcc Compiler
Stoffwiederholung . . . 17-1 Quiz . . . 17-3 Fehlersuche . . . 17-6 Anwendungen . . . 17-7 18 Ausdr¨ucke
Stoffwiederholung . . . 18-1 Quiz . . . 18-3 Fehlersuche . . . 18-6 Anwendungen . . . 18-7 19 Programmieren eigener Funktionen
Stoffwiederholung . . . 19-1 Quiz . . . 19-6 Fehlersuche . . . 19-9 Anwendungen . . . 19-10 20 Zeiger und Zeigervariablen
Stoffwiederholung . . . 20-1 Quiz . . . 20-3 Fehlersuche . . . 20-6 Anwendungen . . . 20-7
vi
21 Funktionen mit Zeigern und Arrays als Parameter
Stoffwiederholung . . . 21-1 Quiz . . . 21-3 Fehlersuche . . . 21-4 Anwendungen . . . 21-5
22 Rekursive Funktionsaufrufe
Stoffwiederholung . . . 22-1 Quiz . . . 22-2 Fehlersuche . . . 22-5 Anwendungen . . . 22-6
23 Mehrdimensionale Arrays
Stoffwiederholung . . . 23-1 Quiz . . . 23-2 Fehlersuche . . . 23-3 Anwendungen . . . 23-4 24 Zeichenketten
Stoffwiederholung . . . 24-1 Quiz . . . 24-3 Fehlersuche . . . 24-4 Anwendungen . . . 24-5 25 Kommandozeilenargumente
Stoffwiederholung . . . 25-1 Quiz . . . 25-4 Fehlersuche . . . 25-5 Anwendungen . . . 25-6 26 Der Datentyp struct
Stoffwiederholung . . . 26-1 Quiz . . . 26-4 Fehlersuche . . . 26-6 Anwendungen . . . 26-7 27 Definition eigener Datentypen
Stoffwiederholung . . . 27-1 Quiz . . . 27-2 Fehlersuche . . . 27-5 Anwendungen . . . 27-6 28 Module und getrenntes ¨Ubersetzen
Stoffwiederholung . . . 28-1
vii
Quiz . . . 28-2 Fehlersuche . . . 28-3 Anwendungen . . . 28-4 29 Dynamische Speicherverwaltung: malloc() und free()
Stoffwiederholung . . . 29-1 Quiz . . . 29-3 Fehlersuche . . . 29-4 Anwendungen . . . 29-5 30 Kopieren von Dateien
Stoffwiederholung . . . 30-1 Quiz . . . 30-3 Fehlersuche . . . 30-6 Anwendungen . . . 30-7 31 Entwicklung eines einfachen Kellerspeiches (Stacks)
Stoffwiederholung . . . 31-1 Quiz . . . 31-3 Fehlersuche . . . 31-5 Anwendungen . . . 31-6 32 Einfach verkettete, sortierte Liste
Stoffwiederholung . . . 32-1 Quiz . . . 32-3 Fehlersuche . . . 32-9 Anwendungen . . . 32-10 33 Bin¨are B¨aume
Stoffwiederholung . . . 33-1 Quiz . . . 33-2 Fehlersuche . . . 33-3 Anwendungen . . . 33-5 Anh¨ange
Anhang I: Anleitung zu den ¨Ubungspaketen . . . iii Anhang II: Pr¨azedenztabelle . . . vi Anhang III: Literaturverzeichnis. . . vii
viii
Vorwort
Schon in Goethes Faust sagte Mephisto
”Grau, teurer Freund, ist alle Theorie, und Gr¨un des Lebens goldner Baum“,was der Volksmund auch h¨aufig als
”Ubung macht den Meister“¨ oder”Kunst kommt von K¨onnen“ zusammenfasst. Diese Binsenweisheiten sind wohl jedem bekannt, wurden sie doch von unseren Eltern und Lehrern immer wieder gepredigt.
”Nee, klar, jetzt fehlt nur noch ein
”Jung’, du lernst f¨ur’s Leben, nicht f¨ur die Schule!“ Wie oft musste ich mir das schon anh¨oren...“ Ja genau und jetzt schon wieder ;-)
”Aber jetzt mal im Ernst, so unter uns, ganz im Vertrauen: Warum denn noch großartig
¨uben, wir haben doch regelm¨aßig Vorlesung und ein ausf¨uhrliches Skript, da kann man doch bei Bedarf alles nachlesen?!“ Ja, das stimmt. Aber im Skript und den Vorlesungen werden neue Konzeptevorgestellt und weitergehende Zusammenh¨angeaufgezeigt. Dies wird, sofern alles gut l¨auft, Teil des eigenen Wissens. Aber es handelt sich meist um passives Wissen.
Das Anh¨oren neuer Konzepte bedeutet nicht unbedingt, dass man diese auch eigenst¨andig anwenden kann. Passives Wissen erlaubt meist nur das Nachvollziehen der Gedanken und L¨osungsschritte anderer, was aber f¨ur einen Ingenieur alles andere als ausreichend ist.
Aber gerade das eigenst¨andige Anwenden der erlernten Konzepte ist f¨ur das L¨osen neu- artiger Aufgabenstellungen unabdingbar und damit eine grundlegende T¨atigkeit des Inge- nieurs. Hier hilft einfach nur ¨Uben, ¨Uben und nochmals ¨Uben. Und genau hier haken die vorliegenden ¨Ubungspakete ein. Sie haben zum Ziel, den in der Vorlesung pr¨asentierten Stoff zu vertiefen. Jedes ¨Ubungspaket besteht aus den vier verschiedenen Elementen Syn- tax und Stoffwiederholung, Beantwortung kleiner Quizfragen, das Finden von Fehlern in vorgegebenen Programmen sowie das eigenst¨andige Entwickeln von L¨osungen, was sich in der Struktur der einzelnen ¨Ubungspakete niederschl¨agt.
Wie oben schon angedeutet, ist das Finden eines geeigneten L¨osungsansatzes bzw. -weges ein wesentliches Element des eigenst¨andigen Programmierens. Um hier eine bereits et- was strapazierte Redensart zu zitieren:
”Der Weg ist das Ziel, nicht unbedingt die fertige L¨osung.“ Entsprechend sind die einzelnen ¨Ubungsaufgaben nur leicht vorstrukturiert. Die L¨osungsans¨atze und -wege selbst zu finden und auszuarbeiten ist die Aufgabe der Stu- denten. Im Anhang befinden sich hierzu nochmals einige Erl¨auterungen, diejeder Student mindestens einmal vor dem Bearbeiten der ¨Ubungspakete gelesen haben sollte.
So, genug der Vorrede und frisch ans Werk.