1 Inf 1 Hochschule Darmstadt Prof.Dr. H.P.Weber Informatik 1
2 Inhalt von Informatik 1 1 Einführung 2 Grundelemente der C Programmierung 3 Kontrollanweisungen: Teil 1 4 Kontrollanweisungen: Teil 2 5 Funktionen und eine Einführung in Rekursion 6 Arrays, Suchen und Sortieren 7 Zeiger 8 Strukturierte Datentypen (struct) 9 Dateiverarbeitung
3 1 Einführung
4 1.1 Organisatorisches 1.2 Programmiersprachen 1.3 Geschichte von C und C++ 1.4 C/C++ Standardbibliothek 1.5 Typische C/C++ Entwicklungsumgebung
5 1.1 Organisatorisches Stellung von Informatik 1 im Studium 1. Semester: Informatik 1 Prozedurale und strukturierte Programmierung Programmiersprache C 2. Semester: Informatik 2 Objektorientierte und generische Programmierung Programmiersprache C++
6 1.1 Organisatorisches Literatur H.M.Deitel,P.J.Deitel: C How To Program,7th ed (oder auch: 6th-5th ed); Prentice-Hall; 2013/2009/2006 Basistext der Vorlesung, deshalb primär empfohlen. Goll, Dausmann: C als erste Programmiersprache, 8. Auflage; Springer Vieweg; 2014 Deutschsprachiges Standardwerk zu Sprachsyntax und -nutzung. Außerdem: www.cplusplus.com Gute Referenz für die Bearbeitung der Aufgaben im Praktikum.
7 1.1 Organisatorisches Software Für eingeschriebene Studenten der Hochschule Darmstadt sind im Rahmen des Microsoft DreamSpark -Programms die professionellen Versionen von Visual Studio 2015 oder 2013 kostenlos erhältlich. Quelle: Anmelden im Intranet der h_da: https://intranet.h-da.de Dort navigieren zu: Hochschule -> Servicebereiche -> IT-Dienste -> Software -> Microsoft DreamSpark Microsoft Visual Studio 2013 Professional ist auch auf den Rechnern im Praktikum vorhanden
8 1.1 Organisatorisches Vorlesung, Praktikum, individuelles Üben Programmieren ist ein Handwerk, das geübt werden muss. Üben heißt zunächst: Sich allein mit Aufgabenstellung und Entwicklungsumgebung um eine Lösung bemühen. Teamarbeit macht erst Sinn, wenn jeder für sich die Aufgabe im wesentlichen gelöst hat. Das gilt uneingeschränkt für die Programmierausbildung; in der beruflichen Praxis sind durchaus andere Modelle möglich ( pair-programming ).
9 1.1 Organisatorisches Vorlesung, Praktikum, individuelles Üben Kalkulieren Sie ausreichend Zeit zum individuellen Üben in Ihren Zeitplan ein in der Vorlesung ist dafür keine Zeit und im Praktikum nur eingeschränkt. Notebooks in der Vorlesung sind nicht verboten, aber erfahrungsgemäß (außer bei großer Selbstdisziplin) eher kontraproduktiv.
10 1.1 Organisatorisches Vorlesung, Praktikum, individuelles Üben In der Vorlesung wird der Stoff systematisch zunächst begrifflich und dann an konkreten Beispielen dargestellt. Für Studenten mit wenig Programmiererfahrung drei Phasen: Vorbereitung der Vorlesung anhand der vorher bereitgestellten Folien Vorlesung mit Möglichkeit zur Diskussion der Begriffe und Beispiele Nachbereitung durch eigenes Üben und Bearbeiten der Praktikumsaufgaben
11 1.1 Organisatorisches Ablauf eines Praktikumstermins Ausgabe der Aufgabenstellung (Download von meiner Website) ca. 14 Tage vor Praktikumstermin Vorbesprechung in der Vorlesung Zu Hause: Programmcode entwerfen und eintippen Am besten schon mit Visual Studio 2015 oder 2013 Code für komplettes Projekt ins Praktikum mitbringen Im Praktikum: Übersetzung, Inbetriebnahme mit Visual Studio, Testen, evtl. mit Praktikumspartner durchsprechen / abgleichen (Zeitrahmen: maximal 90 Minuten) Abnahme/Testierung durch Betreuer
12 1.1 Organisatorisches Regeln zum Praktikum 5 von 5 möglichen Testaten sind Pflicht für erfolgreiche Praktikumsteilnahme Testate gibt es grundsätzlich nur zum jeweiligen Termin Bewertung: teilgenommen als Eintrag im QIS Dies ist die Voraussetzung für die Zulassung zur Klausur. Gruppeneinteilung für das Praktikum beim ersten Vorlesungstermin Termine und Aufgabenstellungen auf meiner Website Durchführung in Zweiergruppen
13 1.1 Organisatorisches Praktikum / Netzzugang Studierende setzen ihr Passwort für Labor und WLAN im OBS ('Online-Belegsystem') des FB Informatik Laborzugang vor dem ersten Praktikum von zu Hause aus aktivieren Dazu im OBS einloggen mit Matrikelnummer und Geburtsdatum als Initialpasswort; dann bei 'Passwort ändern' ein 'Passwort für Labors' eingeben 'Passwort für Labors' merken und beim Praktikumstermin zum Einloggen in Laborrechner verwenden https://obs.fbi.h-da.de/obs/
14 1.1 Organisatorisches Leistungsnachweis Klausur (90 Minuten) Zulassungsvoraussetzung: 5 Testate Inhalt: 'Papierklausur' mit Fragen zur Vorlesung und einzelnen Aspekten der Programmieraufgaben aus dem Praktikum
15 1.2 Programmiersprachen Maschinensprachen prozessorabhängige Codierung von Befehlen, Adressen und Daten als Bitmuster Maschinenorientierte Programmiersprachen (Assembler-Sprachen) prozessorabhängige mnemonische Codierung von Befehlen, Adressen und Daten; ein Assembler-Befehl ergibt einen Maschinenbefehl Problemorientierte Programmiersprachen den zu bearbeitenden (z.b. nummerischen, kommerziellen, technischen,...) Problemen angepasste Formulierung von Programmen eine Anweisung ergibt viele Maschinenbefehle portabel, da prozessorunabhängig
16 1.2 Programmiersprachen Problemorientierte Programmiersprachen An englischer Umgangssprache orientiert Benutzen übliche mathematische Schreibweise Beispiel: area = PI * radius * radius; Einzelne Anweisungen bewältigen substanzielle Aufgaben. Müssen durch Übersetzungsprogramme in Maschinensprache übersetzt werden ( Compiler ) Das komplett übersetzte Programm wird dann ausgeführt. Andere Möglichkeit: Interpreter Führen Hochsprachen-Programme direkt (d.h. Anweisung für Anweisung) aus Ausführung ist langsamer als bei compiliertem Programm
17 1.2 Programmiersprachen Prozedurale Programmiersprachen: FORTRAN (FORmula TRANslator) COBOL (COmmon Business Oriented Language) ALGOL (ALGOrithmic Language) PASCAL C Funktionale Programmiersprachen: LISP, Haskell, ML Scala, F# Logische Programmiersprachen: PROLOG
18 1.2 Programmiersprachen Objektorientierte Programmiersprachen: SMALLTALK EIFFEL C++ Java C# Skriptsprachen: Perl (Practical Extraction and Report Language) Python PHP (Hypertext Preprocessor, Personal Home Page Tools) Javascript Ruby
19 1.3 Geschichte von C und C++ Geschichte von C Entstanden aus CPL ( Combined Programming Language, Cambridge und London, Anfang der 1960er) Über BCPL ( Basic CPL, Martin Richards, 1967) und B (Ken Thompson, 1970) Ungetypte Sprachen Entwickelt von Dennis Ritchie (Bell Laboratories, 1972) Ergänzung von Datentypen Sprache, in der UNIX entwickelt wurde Unabhängig von der eingesetzten Hardware portable Programme können geschrieben werden ANSI und ISO Standard für C wurde 1990 veröffentlicht und 1999 sowie 2011 ergänzt ( C99, C11 )
20 1.3 Geschichte von C und C++ Geschichte von C++ Erweiterung von C Entwickelt von Bjarne Stroustrup (Bell Laboratories) seit Anfang der 1980er Stellt neue Eigenschaften zur Verfügung, um C auf ein höheres Niveau zu heben Ergänzung: objektorientierte Programmierung Objekte: wiederverwendbare Softwarekomponenten Modellieren Dinge der realen Welt Ergänzung: generische Programmierung Parametrisierte Funktionen und Datentypen Im August 2011 wurde ein in vielen Punkten erweiterter und ergänzter ISO Standard für C++ verabschiedet ( C++ 11 ). Die aktuelle Version ( C++ 14 ) gilt seit Ende 2014 und unterscheidet sich von C++11 nur durch kleinere Korrekturen und Ergänzungen.
21 1.4 C/C++ Standardbibliothek C/C++ Programme Aufgebaut aus Teilen, die Funktionen und Klassen (im Fall von C++) genannt werden C/C++ Standardbibliothek Reichhaltige Sammlung von existierenden Funktionen und Klassen Wiederverwendbar in neuen Anwendungen
22 Betrachtung zum Software Engineering Verwende einen Baukasten -Ansatz, um Programme zu schreiben. Vermeide, das Rad neu zu erfinden. Benutze vorhandene Teile, wann immer möglich. Diese sogenannte Wiederverwendung von Software ist ein zentrales Element der prozeduralen, objektorientierten und generischen Programmierung.
23 Betrachtung zum Software Engineering Beim Programmieren in C/C++ werden üblicherweise die folgenden Bausteine benutzt: Funktionen und Klassen der C/C++ Standardbibliothek, Funktionen und Klassen der verschiedensten Fremdanbieter, selbstdefinierte Funktionen und Klassen.
24 Tipp zur Performanz Die Nutzung von Funktionen und Klassen der C/C++ Standard-Bibliothek anstelle des Schreibens von eigenen Versionen wird meist die Performanz des Programms verbessern, da die Standardbibliothek auf Effizienz optimiert wurde. Diese Vorgehensweise verkürzt auch die Entwicklungszeit für ein Programm.
25 Portabilitäts-Tipp Die Nutzung von Funktionen und Klassen der C/C++ Standard-Bibliothek anstelle von eigenen Versionen verbessert die Portabilität des Programms, da die Standardbibliothek Bestandteil jeder C/C++ Implementierung ist.
26 Betrachtung zum Software Engineering Umfangreiche Klassenbibliotheken wiederverwendbarer Softwarekomponenten sind im Internet verfügbar. Viele dieser Bibliotheken sind kostenlos: -.NET-Klassenbibliothek - Qt-Klassenbibliothek - Boost-Klassenbibliothek (Teile davon sind zukünftige Erweiterungen des C++-Standards)
1.5 Typische C/C++ Entwicklungsumgebung C/C++ Programme werden in 6 Phasen entwickelt Editieren Programmierer schreibt Programm (und speichert Quellcode auf Festplatte) Präprozessor Ergänzungen und Ersetzungen auf Textebene Compilieren Compiler übersetzt C/C++ Programm in Maschinensprache Linken Objektcode mit weiteren Funktionen und Daten verbinden Laden Übertragen des ausführbaren Programms in den Arbeitsspeicher Ausführen Das (Maschinensprachen-)Programm Befehl für Befehl ausführen 27
28 Fig. 1.1 TypischeC/C++ Entwicklungsumgebung.
29 Praxis-Tipp C/C++ Programme sollten auf möglichst einfache und unkomplizierte Weise geschrieben werden. Man spricht vom KISS-Prinzip ( keep it small and simple ). Die Programmiersprache sollte nicht durch bizarre Verwendungen und Konstruktionen überansprucht werden.
30 Praxis-Tipp Es ist wichtig, die Dokumentation für die Version von C/C++ zu lesen, die man verwendet. Man sollte dies möglichst häufig tun, um ein Gefühl für die Möglichkeiten von C/C++ und den korrekten Gebrauch dieser Möglichkeiten zu bekommen.
31 Praxis-Tipp Rechner und Compiler sind gute Lehrer: Falls man nach dem Studium der C/C++-Dokumentation noch nicht sicher ist, wie eine Eigenschaft von C/C++ funktioniert, sollte man mit einem kleinen Testprogramm experimentieren und schauen was passiert. Jede Compilermeldung sollte genau studiert werden und mit Hilfe des Debuggers die Zusammenhänge klargemacht werden.