Grundlagen der Informatik für Ingenieure

Ähnliche Dokumente
Grundlagen der Informatik für Wissenschaftliche Anwendungen

Einführung. Rechnerarchitekturen Entwicklung und Ausführung von Programmen Betriebssysteme

Teil IV. Grundlagen der Programmierung

Geschichte der Informatik

Überblick. 1 Was ist Informatik? 2 Bereiche der Informatik. 3 Geschichte der Informatik

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/

Aufbau von Programmen/Dateien

Grundlagen der Informatik für Ingenieure

Grundlagen der Informatik für Ingenieure

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Grundlagen der Informatik für Ingenieure

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Unterlagen. CPP-Uebungen-08/

Grundlagen der Informatik 2. Typen

Einführung in die Programmierung Wintersemester 2011/12

Teil IV. Grundlagen der Programmierung

Java I Vorlesung Imperatives Programmieren

Einführung in C. EDV1-04C-Einführung 1

5. Elementare Befehle und Struktogramme

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Algorithmen zur Datenanalyse in C++

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

3. Anweisungen und Kontrollstrukturen

Die Programmiersprache C Eine Einführung

Variablen, Konstanten und Datentypen

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Programmieren I. Kapitel 5. Kontrollfluss

Einführung in die Programmierung mit VBA

Pseudo-Programmiersprache

Javakurs für Anfänger

Motivation und Überblick

4.2 Programmiersprache C

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Programmieren lernen mit Perl

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Kontrollstrukturen -- Schleifen und Wiederholungen

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Einstieg in die Informatik mit Java

2. Programmierung in C

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

4.4 Imperative Algorithmen Prozeduren

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

5. Übung - Kanalkodierung/Programmierung

Ingenieurinformatik. Einführung in die Programmiersprache C

Funktionales C++ zum Ersten

Grundlagen von C# - 1

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

RO-Tutorien 15 und 16

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Einstieg in die Informatik mit Java

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Werkzeuge zur Programmentwicklung

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

Einführung in die C-Programmierung

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

RO-Tutorien 17 und 18

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Einstieg in die Informatik mit Java

2. Programmierung in C

Informatik I - Einstiegskurs

Programmierkurs C++ Variablen und Datentypen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Einführung in die C++ Programmierung für Ingenieure

Programmieren in C/C++ und MATLAB

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung

RO-Tutorien 3 / 6 / 12

Eine praktische Einführung in die Programmierung mit der Programmiersprache C

6. Grundlagen der Programmierung

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Einstieg in die Informatik mit Java

2 Teil 2: Nassi-Schneiderman

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

C++ Teil 1. Sven Groß. 9. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 1 9. Apr / 19

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

1 Einführende Bemerkungen

Dr. Monika Meiler. Inhalt

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Transkript:

Grundlagen der Informatik für Ingenieure Dr.-Ing. Eike Schallehn OvG Universität Magdeburg Fakultät für Informatik Institut für Technische und Betriebliche Informationssysteme 2016/2017 Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 1/715

Organisatorisches zu Vorlesung und Übung

Zum Inhalt... 1. Semester (Planung) Einführung: Begriffe und Geschichte der Informatik Grundlagen der Programmierung in C++ Technische Grundlagen der Informatik Daten, Informationen, Kodierung Grundlagen der Computergrafik Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 3/715

Zum Inhalt... 2. Semester (Planung) Objekorientierte Programmierung mit C++ Eigenschaften von Algorithmen Datenstrukturen Grundlagen von Datenbanken Grundlagen von Rechnernetzen Grundlagen des Software Engineering Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 4/715

Zugrundeliegende Literatur Grundlagen der Informatik für Ingenieure Einführung in die Programmierung mit C / C++ Von: Paul, Georg / Hollatz, Meike / Jesko, Dirk / Mähne, Torsten B.G. Teubner Verlag ISBN: 3-519-00428-3 Einführung in die Informatik für Naturwissenschaftler und Ingenieure Levi, Paul / Rembold, Ulrich Hanser Fachbuchverlag; Auflage: 4., aktualis. u. überarb. A. (Januar 2003) ISBN: 978-3446219328 Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 5/715

Zum Ablauf... Alle Infos, Folienkopien und Aufgabenblätter unter http://gif.cs.uni-magdeburg.de/ec/lehre/ Veranstaltung besteht aus: Wintersemestersemester: wöchentliche Vorlesung 14-tägliche Übung Sommersemester: wöchentliche Vorlesung wöchentliche Übung Übungen Tutorien Schriftliche Klausur am Ende des Sommersemesters Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 6/715

Tutorien Tutorien dienen der selbständigen Arbeit an Übungsaufgaben und Erweiterung der Programmierkenntnisse Hilfestellung durch anwesende Tutoren auf Anfrage Besuch freiwillig, aber empfohlen, insbesondere für Programmierneulinge Termine entsprechend LSF bzw. auf der Webseite. Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 7/715

Prüfungen Zweistündige (Bearbeitungszeit 120 Minuten) schriftliche Prüfung in der vorlesungsfreien Zeit am Ende des Sommersemsters Inhaltlich abgedeckt durch Vorlesung und Übung Zuvor genannte Prüfungsvoraussetzung notwendige Bedingung für Zulassung Keine Hilfsmittel erlaubt! Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 8/715

Sprechstunde Eike Freitag, 10:00 Uhr in Raum 29/125 (Vorsicht! Versteckte Tür im Vorzimmer 29/126...) Weitere Termine nach Vereinbarung per Email möglich: eike@iti.cs.uni-magdeburg.de Jederzeit auch gerne Anregungen, Kritik, technische oder organisatorische Fragen, Verbesserungsvorschläge, Hinweise zu Fehlern auf Folien, Probleme, etc. per Email oder nach der Vorlesung an mich! Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 9/715

Sprechstunde Sven Generell: in der Übung Probleme ansprechen Alternativ: per Mail schreiben und ggfs. Termin ausmachen, ich bin im Raum G29-312 zu finden. Weitere Termine nach Vereinbarung per Email möglich: sven.gerber@ovgu.de Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 10/715

Alles klar?

Teil I Einführung

Überblick 1 Was ist Informatik? 2 Bereiche der Informatik 3 Geschichte der Informatik Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 13/715

Was ist Informatik? Informatik=? Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 14/715

Computer als Arbeitsmittel In der Informatik geht es genauso wenig um Computer wie in der Astronomie um Teleskope. Edsger Wybe Dijkstra Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 15/715

Der Begriff Informatik Kunstwort aus den 60ern Informatik Information + Technik oder Informatik Information + Mathematik oder Informatik Information + Automatik... Definition (Informatik) Informatik ist die Wissenschaft von der systematischen und automatischen Verarbeitung von Informationen, insbesondere mit Hilfe von Computern. Im Englischen: Computer Science + Information Science Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 16/715

Bereiche der Informatik Angewandte Informatik Entwicklung und Verwendung von speziellen Informationsverarbeitungslösungen für bestimmte Anwendungen: Ingenieurinformatik, Wirtschaftsinformatik, Geoinformatik, Bioinformatik, Medieninformatik, etc. Praktische Informatik Techniken der Programmierung und Entwicklung von Lösungen zur Informationsverarbeitung (Software): Programmiersprachen, Algorithmen, Datenstrukturen, Betriebssysteme, Datenbanken, etc. Technische Informatik Struktur, Aufbau und Funktionsweise von Computern (Hardware): Elektround Schalttechnik, Speicher, Prozessoren, Bussysteme, Schnittstellen und Peripherie Theoretische Informatik Theoretische und mathematische Modelle der Informationsverarbeitung: Entscheidbarkeit und Komplexität von Problemen, Eigenschaften von Berechnungsmodellen und Sprachen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 17/715

Warum... Informatik für Ingenieure? 1 Grundlage und Ergebnis von Ingenieurtätigkeiten sind Informationen, welche in der Entwicklung, der Simulation und dem Test sowie im Betrieb von technischen Produkten verwendet werden. 2 Der Computer wird zunehmend zum Hauptarbeitsmittel von Ingenieuren, der unter dem Einsatz spezieller Software und Verfahren zur Lösung von Problemen im Ingenieurbereich eingesetzt wird. 3 Die Lösung konkreter Probleme in einem gegebenen Anwendungsszenario kann die Entwicklung spezieller Programme durch Informatiker in Kooperation mit Ingenieuren erfordern, wozu ein Austausch von Spezialisten aus beiden Bereichen möglich sein muss. Die Verarbeitung von Information und der Einsatz von Computern durch Ingenieure setzt ein grundlegendes Verständnis der informationstechnischen Grundlagen voraus.

Inhalte der Vorlesung Fokus auf Technische Informatik Grundlegendes Verständnis der Funktionsweise von Computern Praktische Informatik Grundprinzipien von Programmiersprachen Lösung von Problemen mittels des Computers Grundlagen der Software-Entwicklungen Betriebsysteme, Datenbanksysteme, Rechnernetze Angewandte Informatik Ingenieurtechnische Anwendungen und Problemstellungen Computergrafik als Grundlage von Computer Aided Design (CAD) Simulation Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 19/715

Typische Informatik-Anwendungen für Ingenieure Spezielle Anwendungen für Ingenieure Computer Aided Design (CAD) Computer Aided Manufacturing (CAM) Computer Aided Planning (CAP) Produktionsplanung und Steuerung (PPS) Produktdatenmanagement (PDM)... Allgemeine Anwendungen im Berufsalltag von Ingenieuren System zur Lösung mathematischer und statistischer Probleme Simulationssysteme Workflow-Systeme Enterprise Resource Planning (ERP)... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 20/715

Warum... reicht es nicht, wenn ich als Ingenieur weiß, wie ich diese Systeme anwende? 1 Der effiziente Einsatz von Ingenieuranwendungen wird durch ein Verständnis der zugrunde liegenden Technologie erleichtert. 2 In Übergangsbereichen werden Spezialisten mit Fachwissen aus beiden Bereichen (Quereinsteiger oder Ausbildung im Übergangsbereich) benötigt, z.b. Entwicklung von Ingenieuranwendungen, Entwicklung von Produkten mit eingebetteten Systemen (Hard-, Software), Automatisierungstechnik, und Mechatronik. 3 Die Anwendungssysteme bieten Lösungen für allgemeine Problemstellungen, weshalb spezielle Verarbeitungsschritte über Erweiterungsschnittstellen ergänzt werden können.

Zusammenfassung: Überblick Informatik Ingenieurwissenschaften sind aus Sicht der Informatik Anwendungsbereich Informatik ist aus Sicht der Ingenieurwissenschaften Grundlage für aktuelle Lösungen Computer ist Hauptarbeitsmittel für Ingenieure (genau wie für Informatiker) Ingenieure verwenden von Informatikern entwickelte Anwendungssoftware Im folgenden: Wie entstand Informatik als Wissenschaft? Was sind die technischen Grundlagen der Datenverarbeitung? Wie werden Informationen zu verarbeitbaren Daten? Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 22/715

Geschichte der Informatik Entwicklung von Informationstechnik und Durchdringung des Alltags seit der 2. Hälfte des 20 Jahrhunderts explosionsartig Informationsgesellschaft Zunehmende Bedeutung und Wert von Informationen Schnelle Entwicklung von Technologien zur Verarbeitung und Kommunikation Historische Wurzeln der Informatik reichen zum Teil erheblich weiter Zurück Rechenautomaten programmierbare Maschinen Grundlagen aus Mathematik, Elektrotechnik, Linguistik, Kodierungs- und Informationstheorie Seit 50er Jahren: Relativ schnelle Folge von Rechnergenerationen Immer mehr Anwendungen der Informationstechnik in Wirtschaft und Privatbereich Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 23/715

Warum... Geschichte der Informatik? Mehr als die Vergangenheit interessiert mich die Zukunft, denn in ihr gedenke ich zu leben. Die Vergangenheit ist ein Prolog Albert Einstein Unbekannt

Geschichte der Informatik bis 1950 vor 17. Jh. 1100 v. Chr.: erste mechanische Rechenhilfen in Indien/China, z.b. bis heute benutzter Abakus auf Basis des Dezimalsystems Beschreibung von reproduzierbaren Rechenverfahren, z.b. größter gemeinsamer Teiler durch Euklid (300 v. Chr). Al-Chwarizmi (820) beschreibt Grundlagen von Rechenvorschriften, die nach ihm als Algorithmen bezeichnet werden (aus lateinischer Übersetzung Dixit Algorismi... - Al-Chwarizmi hat gesagt... ) Boethius (um 1500) und Adam Riese (ab 1518) veröffentlichen Vorschriften für das schriftliche Rechnen im Dezimalsystem Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 25/715

Geschichte der Informatik bis 1950 17. Jh. Erste mechanische Rechenmaschinen zur Erleichterung der durch technischen Fortschritt und zunehmende Industrialisierung häufigeren Rechenaufgaben Wilhelm Schickard (1623): Addition und Subtraktion für astronomische Berechnungen Pascal (1641): patentiert Pascaline als Rechenmaschine für Steuerwesen und Händler, welche ebenfalls Addieren und Subtrahieren kann Gottfried Wilhelm Leibniz (1673): Rechenmaschine für 4 Grundrechenarten Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 26/715

Geschichte der Informatik bis 1950 Abbildung: Blaise Pascals Pascaline Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 27/715

Geschichte der Informatik bis 1950 1679 Gottfried Wilhelm Leibniz beschreibt erstmals Dualsystem (Binärsystem), welches im Gegensatz zum heute und damals gebräuchlichen Dezimalsystem (Ziffern 0 bis 9) als Ziffern nur 0 und 1 verwendet Ist heute Grundlage für elektronische Rechner (Speicher, Prozessoren), welche auf unterster Ebene nur die Schaltzustände an (1, Spannung liegt an) oder aus (0, Spannung liegt nicht an) kennen 1110 = 14 2 10 0 0 x 2 + 1 x 21 2 + 1 x 2 3 + 1 x 2 0 4 x 10 + 1 x 101 Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 28/715

Geschichte der Informatik bis 1950 19. Jh. Entwicklung mechanischer, programmgesteuerte Maschinen Programmsteuerung erlaubt durch Folge von Befehlen Durchführung komplexerer Berechnungen Joseph-Marie Jacquard (1805): Entwicklung eines lochkartengesteuerten Webstuhl Charles Babbage (1822): entwickelt Konzept für programmgesteuerte Analytical Engine mit Speicher, Steuereinheit und Verarbeitungseinheit, deren Konstruktion wegen hohem Aufwand jedoch nie vollendet wird Hollerith (1886): System zur Erfassung von Daten auf Lochkarten Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 29/715

Geschichte der Informatik bis 1950 Abbildung: Analytical Engine von Charles Babbage Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 30/715

Geschichte der Informatik bis 1950 1854 George Boole entwickelt Boolsche Logik und Algebra, welche grundlegende logische Operatoren UND, ODER und NICHT umfasst Angewandt auf binäre Zustände (1=wahr, 0=falsch) bilden diese die Grundlage für Funktionsweise von heutigen Prozessoren Operationen wie Rechenoperationen im Binärsystem werden auf diese logischen Grundbausteine zurückgeführt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 31/715

Geschichte der Informatik bis 1950 1936 Alan Turing entwickelt basierend auf mathematischer Logik Automatenmodell (theoretische Turingmaschine) und schafft theoretische Grundlagen für Algorithmen Konzepte der Entscheidbarkeit, Komplexität und Berechenbarkeit von Problemen Begründet damit Theoretische Informatik und zeigt Grenzen der Informatik auf Unendliches, beschriebenes Band Schreib-/ Lese Kopf Programm- Tafel (Regeln) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 32/715

Geschichte der Informatik bis 1950 20. Jh. Entwicklung erster elektronischer Rechenmaschinen Konrad Zuse (1941): mechanisch-elektronische, programmgesteuerte Rechenmaschine Z3 auf Basis des Dualsystems und erste High-Level-Programmiersprache Plankalkül (1941-1945) Howard Hathaway Aiken (1944): erster ebenfalls relais-basierter Großrechner Mark I J. Presper Eckert und John W. Mauchly (1946): ENIAC erster voll elektronischer Rechner auf Basis von Röhrentechnologie Ab 1949: industrielle Produktion von elektronischen Rechnern Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 33/715

Geschichte der Informatik bis 1950 Abbildung: ENIAC - Electronic Numerical Integrator and Computer Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 34/715

Geschichte der Informatik bis 1950 1946 John von Neumann entwirft grundlegende Von-Neumann-Architektur als bis heute aktuelle Referenz für Aufbau von speicherprogrammierbaren Rechnersystemen Prinzip des Stored Program, d.h. Programm ist mit Daten zusammen im Speicher des Rechners, erlaubt flexible Programmierung für verschiedene Anwendungen Zentrale Vearbeitungseinheit Rechenwerk Steuerwerk Bus Ein-/Ausgabe Speicherwerk Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 35/715

Entwicklung von Hardware seit 1950 Erste Rechnergeneration: 1953-1958 Technologie auf Röhrenbasis Stapelverarbeitung Zweite Rechnergeneration: 1958-1966 Transistoren Entwicklung erster Betriebssysteme und Compiler für Programmiersprachen Interaktivität durch Bildschirm-Terminals für Mainframes Dritte Rechnergeneration: 1966-1974 Integrierte Schaltungen: Mikrochips Erste Kleinrechner und Netzwerke Vierte Rechnergeneration: 1974-1982 Hochintegrierte Schaltungen: Mikroprozessoren Halbleiterspeicher Erste Super-Computer und Parallelverarbeitung Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 36/715

Entwicklung von Hardware seit 1950 Entwicklungen 1982 - heute Zunehmender Integrationsgrad von Schaltungen Stetig wachsende Geschwindigkeit und Speicherkapazitäten Verbreitung von Multiprozessorsystemen Zunehmede Vernetzung Computer durchdringen alle Lebensbereiche Home Computer, PCs, Laptops, Handhelds Genutz für Anwendungsprogramme, Internet, Spiele, Unterhaltungsmedien Eingebettete Systeme Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 37/715

Entwicklung wichtiger Software/Technologien 1961 erstes Betriebssystem CTSS 1962 Erstes Computerspiel: Spacewar! 1968 Erste Grafische Benutzeroberfläche: NLS (on-line System) 1969 Unix als Mehrbenutzer-/Multitasking-Betriebssystem (freie Variante Linux 1991) 1969 Arpanet mit TCP/IP Grundlage für heutiges Internet 1970 Relationales Datenmodell bis heute Standard für Datenbanken 1985 Microsoft Windows 1.0 als grafische Oberfläche für MS/DOS wird schrittweise zum eigenständigen Betriebssystem ausgebaut (ca. ab Windows 95/Windows NT) 1990 Grundlagen des World Wide Web: HTML und erster Web Browser Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 38/715

Zusammenfassung: Geschichte der Informatik Wurzeln der Informatik Algorithmen Rechentechnik Mathematische Grundlagen reichen weit zurück Seit 1950 sprunghafte Entwicklung Aber: trotz stetiger Neuerungen Grundlagen heutiger Technik seit Jahrzehnten relativ stabil Informatik ist nicht so schnelllebig, wie man vielleicht denkt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 39/715

Teil II Programmierung mit C++ (1) Grundlagen

Überblick 1 Grundlagen der Programmierung 2 Die Programmiersprachen C und C++ 3 Aufbau von C++ Programmen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 41/715

Programmentwicklung: Problem Programm muss von Menschen geschrieben werden und auch für andere Menschen verständlich sein Programm muss vom Prozessor ohne Mehrdeutigkeiten und effizient ausgeführt werden können Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 42/715

Programmentwicklung: Lösung C++ #include <iostream> int main() { cout << Hallo! << endl; } Programmierer verfaßt Programm in sogenannter Hochsprache Machine Code Assembler FA CLI 33C0 XOR AX,AX 8ED0 MOV SS,AX BC007C MOV SP,7C00 8BF4 MOV SI,SP 50 PUSH AX 07 POP ES 50 PUSH AX 1F POP DS FB STI... Für die Ausführung durch den Prozessor wird das Programm auf eine dem Prozessor eigene Maschinensprache umgesetzt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 43/715

Hochsprache vs. Maschinensprache Programm wird in sogenannten Hochsprachen geschrieben Für die Ausführung durch den Prozessor wird das Programm auf eine dem Prozessor eigene Maschinensprache umgesetzt Zwei Möglichkeiten: Compilierung von Programmen: spezielles Programm (Compiler) übersetzt Programm vor der Ausführung in Maschinensprache eines gegebenen Prozessors und testet dabei dessen syntaktische (aber nicht inhaltliche) Korrektheit Interpretation von Programmen: spezielles Programm (Interpreter) setzt Programmbefehle zur Ausführungszeit auf Prozessorbefehle um Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 44/715

Compiler vs. Interpreter /1 Compiler Allgemein schnellere Ausführung Ursprünglicher Code in der Regel nicht mehr rekonstruierbar Schutz des Quelltextes Breiter Einsatz für Programmierung von Betriebssystemen, Anwendungsprogrammen, etc. C, C++, Pascal/Delphi, FORTRAN und zahlreiche weitere Interpreter Langsamere Ausführung wegen Aufwand für Übersetzung Laufzeitfehler durch Syntaxfehler möglich Quelltext des Programmes bleibt sichtbar: kein Schutz, aber offen für beliebige Anpassungen durch dritte Aber: plattformunabhängige Programme (überall wo Interpreter läuft) Einsatz im Web, als Skriptsprachen zur Ausführungssteuerung, etc. Perl, PHP, JavaScript, Python und viele andere Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 45/715

Compiler vs. Interpreter /2 In letzten Jahren Mischformen populär, wie z.b. Java (Sun) und.net (Microsoft) Compiler übersetzt Programme in maschinennahen, aber plattformunabhängigen Code Laufzeitumgebung (JRE bei Java, CLR bei.net) übernimmt letzten Schritt der Umsetzung Zum Teil auch Compiler für interpretierte Sprachen vorhanden Technisch unproblematisch Dient der Steigerung der Performance und/oder dem Schutz der Quelltexte Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 46/715

Algorithmen Aber: was genau macht das Programm? Rückblick: Definition (Informatik) Informatik ist die Wissenschaft von der systematischen und automatischen Verarbeitung von Informationen, insbesondere mit Hilfe von Computern. Die systematische und automatische Verarbeitung wird durch den Begriff Algorithmus präzisiert. Definition (Algorithmus) Ein Algorithmus ist eine eindeutige Beschreibung eines in mehreren Schritten durchzuführenden Vorgangs zur Lösung einer bestimmten Klasse von Problemen. Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 47/715

Algorithmusbeispiel: Kuchen Backen Problem: Kuchen Backen Algoritmus: Backrezept Input: Eier, Mehl,... Output: Kuchen 1. Zutaten vermengen 2. Teig kneten 3. Teig in Backform 4. Backform in Backofen 5. Kuchen 1h backen 6. Kuchen entnehmen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 48/715

Vom Problem zur Lösung Problemanalyse Algorithmus Programmierung Von der Entwicklung bis Zur Ausführung compilierter Programme Programm in Hochsprache Compilierung Programm in Maschinen- Sprache Ausführung Durch Prozessor Arbeitsschritt Ergebnis Prozess mit Ausgabe des Resultats Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 49/715

Die Programmiersprachen C und C++ C als Weiterentwicklung der Programmiersprache B Anfang 1971 für Unix entwickelt C++ als objektorientierte Erweiterung aus dem Jahr 1983 Andere populäre Sprachen wie Java, C#, Perl, PHP, etc. orientieren sich am Syntax von C/C++ C/C++ Heutzutage verbreitetste Sprachen zur Entwicklung von Anwendungsprogrammen und Betriebssystemen Compiler und Entwicklungsumgebungen existieren für alle Plattformen Beide Sprachen sind offiziell standardisiert, wobei Abweichungen vom Standard bei C++ häufiger (C-Programme deshalb besser portierbar zwischen verschiedenen Compilern oder Plattformen) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 50/715

Eigenschaften von C und C++ C ist eine imperative Programmiersprache: ein Algorithmus ist dargestellt als Sequenz von hintereinander auszuführenden Befehlen C ist eine prozedurale Programmiersprache: zur Strukturierung des Quelltextes kann der Gesamtalgorithmus in inhaltlich zusammenhängende und an verschiedenen Stellen (durch Aufruf) verwendbare Prozeduren (in C Funktionen) zerlegt werden C++ ist eine objekt-orientierte Programmiersprache: zur weiteren Strukturierung können Daten von Objekten (Anwendungsobjekte wie Zeichenketten, Postadressen etc., aber auch z.b. Fenster der GUI oder Programmkomponenten) sowie die zugehörige Funktionalität als Methoden (objekt-spezifische Funktionen) in Klassen zusammengefaßt werden Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 51/715

Verhältnis/Unterschiede von C und C++ C++ konzipiert als kompatible Erweiterung (Obermenge) von C Eigentlich sollte jedes C-Programm auch von einem C++-Compiler übersetzt werden können Im Detail jedoch problematisch, z.b. Variablennamen in C-Programmen können Schüsselwörter in C++ sein, z.b. class, new, etc. Typkonvertierung wegen Objekt-orientierung unterschiedlich Standards entwickeln sich parallel weiter, aber gegenseitige Berücksichtigung C++ bietet alternative, objekt-orientierte Bibliotheken für Standardaufgaben, z.b. stdio vs. iostream Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 52/715

MATLAB Spezialsoftware für numerische und symbolische Mathematik Umfasst eigene Programmiersprache Bedeutung in zahlreichen ingenieurtechnischen Anwendungsfeldern und entsprechend auch in verschiedenen Studiengängen Erweiterung Simulink häufig Grundlage für Simulation in Ingenieuranwendungen MATLAB in dieser Vorlesung/Übung Kurze Hinweise im Handout bzgl. Syntax An einigen Stellen verwendet zu Illustrationszwecken MATLAB-Programmierung nicht Teil der Prüfung

MATLAB Entwicklungsumgebung

MATLAB als Programmiersprache Vollständige Programmiersprache Stark ausgerichtet auf Arbeit mit Feldern und Matrizen Zahlreiche vordefinierte Bibliotheken für mathematische Funktionen und Nutzerinteraktion Einfaches Typsystem, das, wo immer möglich, Typen automatisch impliziert Objektorientierung unterstützt ähnlich zu C++ Kopplung mit anderen Programmiersprachen möglich Intertpretierte Skriptsprache, aber Kompilierung möglich Hello World-Programm: disp( Hello, World! ); Variablen: x=7; & numerische Variable str= Hallo ;% Stringvariable

Aufbau von Programmen/Dateien Typen von Dateien Header-Dateien (.h): enthalten Deklarationen (auch Signatur, Prototyp, Rumpf) von Funktionen, Variablen, Konstanten und in C++ auch Klassendefinitionen eines Programms oder einer Bibliothek, welche in anderen Programm(datei)en genutzt werden können, in der Regel jedoch nicht deren Definition (Implementierung) /* Deklaration einer Funktion */ int sum(int x, int y); Code-Dateien (auch Source- oder Quelldateien,.cpp,.C,.c, etc.): enthalten die Definition von Funktionen (oder Methoden in C++) und ggf. die spezielle Funktion main als Einstiegspunkt für ein ausführbares Programm /* Definition einer Funktion */ int sum(int x, int y) { return x+y }; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 56/715

Aufbau von Programmen/Dateien /2 Programme können aus zahlreichen Code- und Header-Dateien bestehen Header-Dateien als Schnittstelle zwischen verschiedenen Code Dateien: in einer inkludierten Datei deklarierte Funktionen können benutzt werden, sind aber in einer anderen Code-Datei implementiert Code-Dateien werden zuerst separat übersetzt Ergebnis: Objektdateien.obj oder.o Linker: statische Verbindung verschiedener Objektdateien zu einer Programmbibliothek oder zu einem ausführbaren Programm Standardbibliotheken der Programmiersprache oder des Betriebssystems sowie Teile komplexer Programme werden meist dynamisch (zur Laufzeit) gelinkt/geladen Windows: Dynamic Load Libraries (DLL) Unix: zum Beispiel Shared Objects (.so) Vermeidet Aufblähung ausführbarer Programme und ständige Neuübersetzung immer wieder verwendeter Programmteile Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 57/715

C++ Übersetzungsprozeß gif.h stdio.h math.h prog.cpp gif.cpp prog.obj Compiler gif.obj Als Teil des Betriebsystems oder der Laufzeitumgebung der Programmiersprache implementiert und vorübersetzt Linker prog.exe msvcrtxxx.dlll system32.dll...... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 58/715

Struktur der Hauptdatei Im folgenden Fokus auf einfache Programme bestehend aus einer Hauptdatei: #include <...> /* Einzubettende Programmbibliotheken */ #define... /* Definitionen und Makros */ /* Globale Variablen */ int i; char c[] =...; /* Funktionen */ int f1(int a, int b) {... }; void f2() {...}; /* Hauptprogramm */ int main() {... } Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 59/715

Der Präprozessor Mit # beginnende Zeilen sind Anweisungen für den Präprozessor (Teilprogramm des Compilers) zur Durchführung einfacher Transformationen des Quelltextes vor der eigentlichen Übersetzung, z.b. #include-statements: Einbettung anderer Quelltextdateien (vor allem Header-Dateien von Programmteilen oder Standardbibliotheken) #include <...> /* Datei im INCLUDE-Pfad */ #include... /* relativer Pfad */ #define-statements: Festlegung von Werten für Ausdrücke, die z.b. im Quelltext in der Folge ersetzt werden können oder für die Steuerung des Präprozessors verwendet werden können #define MAXVERSUCHE 100 #define prompt Eingabe: Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 60/715

Programmblöcke Inhaltlich zusammengehörige Befehlsfolgen werden durch geschweifte Klammern {... } zu Programmblöcken zusammengefaßt Verwendung zum Beispiel für Definition von Funktionen int f(int x, int y) {...}; Steueranweisungen wie Schleifen while (<bedingung>) {...}; Innerhalb eines Programmblocks definierte Variablen, können nur dort verwendet werden Verwendung geschweifter Klammern auch zur Definition zusammengesetzter Datentypen ( z.b. struct, enum, union) sowie zur Definition von Klassen in C++ Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 61/715

Sequenzen Sequenzen von Befehlen (entsprechend imperativem Programmierparadigma) werden durch Verkettung mit Semikolon ; gebildet Dabei können einzelne Befehle Definition/Deklaration von Variablen Steueranweisungen (Schleifen, Bedingungen, Fehlerbehandlung, etc.) Ausdrücke (haben immer ein Ergebnis und einen Ergebnistyp) sein Literale Werte Variablen Funktionsaufrufe Komplexe Ausdrücke: Verknüpfung von Teilausdrücken durch Operatoren Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 62/715

Beispiel: Mittelwert (C++) #include <iostream> using namespace std; float mittelwert(float a, float b) { return (a+b)/2; } int main() { float x,y,m; cout << x = ; cin >> x; cout << y = ; cin >> y; m = mittelwert(x,y); cout << Mittelwert = << m << endl; return 0; } Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 63/715

MATLAB Beispiel: Mittelwert Datei mittelwert.m function m = mittelwert(a,b) m = (a+b)/2; end Datei mittelwertmain.m x = input( x = ); y = input( y = ); z = mittelwert(x,y); fprintf( Mittelwert: %f \n,z);

Variablendeklarationen Grundlegender Syntax: <datentyp> <variablennamen> [, <variablenname>...]; Datentyp ist: Basisdatentyp wie int, float, etc. (siehe Abschnitt Kodierung) Feld von Variablen eines Datentyps ( ) Zusammengesetzter, nutzerdefinierter Datentyp ( ) Nutzerdefinierter Objekttyp (C++ ) Zeiger auf Adresse eines Objektes oder Wertes von Datentyp ( ) Erlaubt Deklaration mehrerer Variablen eines Typs in einem Statement, z.b. int x, y, z; Erlaubt Zuweisung initialer Werte, z.b. int solution=42; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 65/715

Ganzahlige C++ Datentypen Wertebereich unterschiedlich für verschiedene Plattformen, hier Win32 Ausführlicher im Abschnitt Kodierung ( ) Datentyp Speicherplatz Wertebereich char 1 Byte 0... 255 signed char 1 Byte -128... 127 short 2 Byte -32768... 32767 unsigned short 2 Byte 0... 65535 int 4 Byte -2147483648... 2147483647 unsigned int 4 Byte 0... FFFFFFFF 16 long 8 Byte... unsigned long 8 Byte... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 66/715

Gleitkommazahlen in C++ In C++ laut Standard zwei grundlegende Typen für Gleitkommazahlen Datentyp Speicherplatz Charakteristik Mantisse float 32 Bit 8 23 double 64 Bit 11 52 Außerdem long double mit 80 Bit Ausführlicher im Abschnitt Kodierung ( ) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 67/715

Zeichen und Zeichenketten in C++ /1 Zeichen werden in C++ durch Datentyp char abgebildet Mögliche Zustände 0-255 werden für erweiterten ASCII Code benutzt (Kodierung ) Wird entsprechend Programmkontext als Zeichen oder Wert interpretiert Zeichenketten fester Länge in C durch Feld (Array ) mit bestimmter Größe, z.b. char login[9]; für Zeichenkette der Länge 8 und 1 Byte Ende-Markierung Zeichenketten beliebiger Länge in C durch Zeiger (Pointer ) auf Sequenz von Zeichen im Speicher mit Endemarkierung char* message = Hello, World! ; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 68/715

Zeichen und Zeichenketten in C++ /2 Zeichenketten beliebiger Länge in C++ durch spezielle Klasse string (in der Vorlesung und Übung verwendet) #include <string> using namespace std; int main() { string m1 = Hello ; string m2 = World! ; string message = m1 + m2;... } Klasse bietet zusätzliche Funktionalität für Operatoren und Funktionen auf Zeichenketten an Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 69/715

Ausdrücke Zusammengesetzt aus Variablen, literalen Werten und Funktionsaufrufen Verbunden durch Operatoren Beispiele: x=1; /* Zuweisung eines literalen Wertes */ x++; /* Inkrementierung (postfix) */ x=x+1; /* Zuweisung und arithemtische Verknüpfung */ x=(x==4); /* Zuweisung und geklammerter Vergleich */ x=quadrat(x+1); /* Zuweisung und Funktionsaufruf */ x & 1; /* Logische Operation, Ergebnis ignoriert */ Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 70/715

Ausdrücke /2 Können durch Kombination und Klammerung beliebig komplex werden VORSICHT: Lesbarkeit! VORSICHT: Typ-Kompatibilität der Operanden Implizite Konvertierung manchmal unproblematisch, z.b. int float Teilweise Verlust von Information, z.b. float int durch Abschneiden der Nachkommastellen Nur zum Teil Fehlermeldungen oder Warnungen bei inkompatiblen Typen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 71/715

Ausdrücke: Arithmetische Operatoren Operator Beispiel Bedeutung + x+y Addition - x-y Subtraktion * x*y Multiplikation / x/y Division % x%y Rest bei ganzzahliger Division ++ y=x++ Inkrementierung (postfix) x um eins erhöht y hat alten Wert von x y=++x Inkrementierung (prefix) x um eins erhöht y hat neuen Wert von x x Dekrementierung entsprechend x als pre- und postfix anwendbar......... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 72/715

Ausdrücke: Zuweisungsoperatoren Operator Beispiel Bedeutung = x=7 Standardzuweisungsoperator += x+=7 Selbstzuweisung mit Addition entspricht x=x+7 -= x-=7 Selbstzuweisung mit Subtraktion *= x*=7 Selbstzuweisung mit Multiplikation /= x/=7 Selbstzuweisung mit Division %= x%=7 Selbstzuweisung des Divisionsrestes......... Ergebnis einer normalen oder prefix-zuweisung ist der neue Wert des linken Operanden Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 73/715

Ausdrücke: Vergleichsoperatoren Da in C lange ein boolean-datentyp fehlte, ist Ergebnis ganzzahliger Wert 1, wenn Vergleich erfolgreich (TRUE) 0, andernfalls (FALSE) Operator Beispiel Bedeutung == x==y Test auf Wertegleichheit!= x!=y Test auf Ungleichheit > x>y... größer als... < x<y... kleiner als... >= x>=y... größer als oder gleich... <= x<=y... kleiner als oder gleich............ Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 74/715

Ausdrücke: Logische Operatoren /1 Zwei Sichtweisen für logische Operationen 1 Bitweises Verknüpfen für Bytes 2 Logische Verknüpfungen von 1 (TRUE) und 0 (FALSE) kann auf 1. zurückgeführt werden Bei Operatoren für logische Verknüpfung: Abbruch (short cut) der Auswertung, wenn möglich Bei AND: Abbruch, wenn erste Bedingung FALSE, da Ergebnis nur FALSE sein kann Bei OR: Abbruch, wenn erste Bedingung TRUE, da Ergebnis nur TRUE sein kann Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 75/715

Ausdrücke: Logische Operatoren /2 Operator Beispiel Bedeutung!!x Logische Negation (NOT) && x&&y Logische Konjunktion (AND) x y Logische Disjunktion (OR) & x&y Bitweises AND x y Bitweises OR x y Bitweises XOR x Bitweise Negation......... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 76/715

Ausdrücke: Sonstige Operatoren Zur Arbeit mit speziellen Datentypen wie zum Beispiel Feldern, Zeigern, Strukturen und Objekten ( ) Operator Beispiel Bedeutung [] a[7] Zugriff auf Position in Feld. window.size Zugriff auf Komponente einer Struktur oder eines Objektes * *i Dereferenzierung eines Zeigers & &i Bildung der Referenz (Zeiger) -> window->size Zugriff auf Komponente über Zeiger () (int)myfloat Explizite Typumwandlung (Casting) new w = new Window() Erzeugen eines neuen Objektes......... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 77/715

Ein-/Ausgabe C++-style C++ definiert für Ein-/Ausgabe eigene Bibliothek iostream.h Verwendet außerdem Namensräume (iostream im Standardnamensraum std, d.h. für Verwendung #include <iostream> using namespace std; Basiert auf Datenströmen (Streams) Eingehende Datenströme: Input Streams Ausgehende Datenströme: Output Streams und deren Auswertung bzw. Manipulation Beliebige Datenströme sowie deren Operatoren und Funktionen sind als Klassen definiert Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 78/715

Ein-/Ausgabe C++-style: cin und cout iostream definiert Standardobjekte der Stream-Klassen für Standardeingabe (Tastatur) und Standardausgabe (Konsole) cout - Standardausgabe cin - Standardeingabe Arbeit mit Datenströmen vor allem über Shift-Operatoren, d.h. Verschieben von Daten auf oder aus Strömen >> - Verschieben von Daten aus dem Strom (Lesen) << - Verschieben von Daten auf den Strom (Schreiben) Ergebnis ist der Stream selbst, d.h. Operatoren können verkettet werden Beispiel cout << Eingabe << endl << x: ; cin >> x; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 79/715

Ein-/Ausgabe C++-style: Stream-Manipulatoren Kontrolle der Streams bzgl. Darstellung von Werten und Formatierung über definierte Konstanten (Stream-Manipulatoren), z.b. Manipulator Bedeutung dec Integer als Dezimalzahl hex Integer als Hexadezimal fixed Float als Festkommazahl scientific Float als Halblogarithmisch endl Zeilenende flush Sofortige Buffer-Entleerung..... Beispiel: cout << Alter << dec << alter << endl; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 80/715

Kommentare Natürlichsprachliche Beschreibung/Erklärung des Quelltextes oft hilfreich und erforderlich Werden vom Compiler bei der Übersetzung vollständig ignoriert /* Kommentar, gerne auch mal über mehrere Textzeilen */ x=x+1; // Kommentar bis zum Zeilenende Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 81/715

Zusammenfassung: Aufbau von Programmen Programme können aus zahlreichen Dateien bestehen Header-Dateien als Definition der Schnittstelle von Bibliotheken aus Funktionen, Variablen und Konstanten Code-Dateien enthalten Implementierung von Funtkionen aus Bibliotheken und/oder main-funktion Programmblöcke, z.b. Implementierung einer Funktionen, bestehenaus Sequenz von Befehlen Befehle sind Deklarationen, Steueranweisungen oder Ausdrücke Einfache Ausdrücke sind Funktionsaufrufe, Variablen oder literale Werte Komplexe Ausdrücke können durch Verknüpfung von Ausdrücken über Operatoren gebildet werden Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 82/715

Teil III Programmierung mit C++ (2) Steueranweisungen

Überblick 1 Bedingte Ausführung 2 Programmschleifen 3 Ausnahmebehandlung Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 84/715

Steueranweisungen Bisher Programme mit Funktionen als einfache Folge von Befehlen Ablauf von Programmen darüber hinaus steuerbar über Bedingte Ausführung: Ausführung von Programmteilen (Befehlen oder Programmblöcken) nur wenn eine bestimmte Bedingung erfüllt ist Selektion, Verzweigung Programmschleifen: mehrfache Wiederholung von Programmteilen so lange oder bis eine bestimmte Bedingung erfüllt bzw. nicht mehr erfüllt ist Iteration, Schleife Fehlerbehandlung: Ausführung spezieller Programmteile im Fall eines Fehlers Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 85/715

Einfache Bedingte Ausführung if-anweisung gefolgt von geklammerter Bedingung als Einführung für einen einzelnen Befehl oder einen Programmblock if (<Bedingung>) <Befehl>; if (<Bedingung>) { <Befehlssequenz> }; Bedingung kann über logische Operatoren verknüpft werden und evaluiert entsprechend zu 0 (FALSE) oder andernfalls TRUE ( logische Operatoren) Ausführung entsprechend Ergebnis: TRUE: Ausführung des von if eingeleiteten Befehls oder Programmblocks FALSE: Programmteil der zum if-block gehört wird nicht ausgeführt und Ausführung danach fortgesetzt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 86/715

Einfache Bedingte Ausführung: Beispiel (C++) #include <iostream> using namespace std; int main() { int x; cout << x = ; cin >> x; if (x >= 0) cout << Zahl ist positiv oder gleich 0. << endl; if (x == 42) { cout << Die Zahl ist 42. << endl; cout << Das ist hexadezimal << hex << 42 << endl; }; return 0; } Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 87/715

MATLAB Beispiel: Bedingte Ausführung x = input( x = ); if (x>=0) fprintf( Zahl ist positiv oder gleich 0. \n ); end if (x==42) fprintf( Die Zahl ist 42. \n ); fprintf( Das ist hexadezimal %s. \n, dec2hex(x)); end

Darstellung von Programmabläufen Zum Entwurf und zur Illustration von Algorithmen verschiedene formale und informale Beschreibungsmittel: Pseudocode: informale, textuelle Darstellung des Algorithmus zum Teil mit Mitteln der natürlichen Sprache Struktogramme: formale Darstellung von Programmabläufen als Blockdiagramm Programmablaufpläne (PAP): Beschreibung des Programmablaufs durch spezielle Notation für generische Anweisungsklassen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 89/715

Einfache Bedingte Ausführung: Pseudocode Program Zahlentest Input: - Output: - begin Eingabe von x if x ist größer als 0 Ausgabe Zahl ist positiv oder gleich 0. endif if x ist 42 Ausgabe Die Zahl ist 42. Ausgabe der Zahl als Hexdadezimalzahl endif end Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 90/715

Einfache Bedingte Ausführung: Struktogramm START Test42 Eingabe: x x >=0? ja Ausgabe Text % x = 42? ja Ausgabe Text Ausgabe Hex STOP % nein nein Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 91/715

Einfache Bedingte Ausführung: PAP START Eingabe: x x >= 0? ja nein Ausgabe Text x = 42? ja nein Ausgabe Text Ausgabe Hex STOP Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 92/715

Bedingte Ausführung mit Alternative Erweiterter Syntax der if-anweisung um else-klausel: Ausführung eines alternativen Programmteils, falls Bedingung nicht erfüllt if (<Bedingung>) <Befehl oder Programmblock> else <Befehl oder Programmblock>; In Abhängigkeit von der Bedingung wird nur ein Zweig der Anweisung ausgeführt (Verzweigung) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 93/715

Bedingte Ausführung mit Alternative: Beispiel (C++) #include <iostream> #include <cmath> using namespace std; int main() { float x; cout << x = ; cin >> x; if (x >= 0) { float w = sqrt(x); cout << Wurzel ist << w << endl; } else cout << Wurzelberechnung unmöglich! << endl; return 0; } Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 94/715

MATLAB Beispiel: Bedingte Ausführung mit Alternative x = input( x = ); if (x>=0) w = sqrt(x); fprintf( Wurzel ist %f \n,w); else fprintf( Wurzelberechnung unmöglich! \n ); end

Bedingte Ausführung mit Alternative: Struktogramm START Wurzel Eingabe: x x >=0? ja w:=sqrt(x) Ausgabe w STOP nein Ausgabe Text Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 96/715

Bedingte Ausführung mit Alternative: PAP START Eingabe: x x >= 0? ja nein w := sqrt(x) Ausgabe Text Ausgabe w STOP Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 97/715

Schachtelung von if-anweisungen Verzweigungen können beliebig geschachtelt werden if (alter >= 0) if (alter < 120) cout << Alter korrekt... << endl; Können durch Zusammenfassen der Bedingungen oft vereinfacht werden: Sequenz von if-bedingungen entspricht logischer Konjunktion if (alter >= 0 && alter < 120) cout << Alter korrekt... << endl; Aber nicht immer: Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 98/715

Schachtelung von if-anweisungen /2 Schachtelung erlaubt separate Behandlung der logischen Alternativen im else-zweig if (alter >= 0) if (alter < 120) cout << Alter korrekt... << endl; else cout << Alter zu hoch! << endl; else cout << Alter zu gering! << endl; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 99/715

Sequenz von if/else if-anweisungen Sequenz von if/else if-anweisungen erlaubt Mehrfachverzweigung if (alter < 1) cout << Baby. << endl; else if (alter < 4) cout << Kleinkind. << endl; else if (alter < 6) cout << Vorschulkind. << endl; else if (alter < 18) cout << Schulkind. << endl; else cout << Führerschein. << endl; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 100/715

MATLAB Beispiel: Mehrfachverzweigung alter = input( Alter = ); if (alter < 1) disp( Baby. ); elseif (alter < 4) disp( Kleinkind. ); elseif (alter < 6) disp( Vorschulkind. ); elseif (alter < 18) disp( Schulkind. ); else disp( Führerschein. ); end

Mehrfachverzweigung mit switch switch-steueranweisung und case-sprungmarken setzen einfache Sprungtabelle um switch(<variable>) { case <Wert1> : <Befehlssequenz>; case <Wert2> : <Befehlssequenz>; case <Wert3> : <Befehlssequenz>;... default: <Befehlssequenz>; } switch-variable muss ordinalen Wert haben, d.h. Integer (inklusive char) case-marken sind Sprungmarken, d.h. Ausführung ab da bis zum Ende des switch-statements sollen nur einzelne Fälle ausgeführt werden, muss der switch-block mit break verlassen werden Falls kein Wert in der Liste, wird zur optionalen default-marke gesprungen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 102/715

Mehrfachverzweigung mit switch: Beispiel /1 #include <iostream> #define PI 3.141592653589793 using namespace std; int main() { int auswahl; float radius,durchmesser,umfang,flaeche; cout << Radius des Kreises = ; cin >> radius; cout << 1) Berechnung des Durchmessers << endl; cout << 2) Berechnung des Umfangs << endl; cout << 3) Berechnung der Fläche << endl; cout << Auswahl: ; cin >> auswahl;... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 103/715

Mehrfachverzweigung mit switch: Beispiel /2 }... switch(auswahl) { case 1: durchmesser = 2*radius; cout << Durchmesser ist: << durchmesser << endl; break; case 2: umfang = 2*radius*PI; cout << Umfang ist: << umfang << endl; break; case 3: flaeche = radius*radius*pi; cout << Fläche ist: << flaeche << endl; break; default: cout << Keine Berechnung durchgeführt. << endl; } return 0; Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 104/715

Mehrfachverzweigung mit switch: Beispiel /3 Vorsicht bei fehlenden break-steueranweisungen: switch(auswahl) { case 1: cout << Durchmesser ist: << 2*radius; << endl; case 2: cout << Umfang ist: << 2*radius*PI << endl; case 3: cout << Fläche ist: << radius*radius*pi << endl; } Radius des Kreises = 23 1) Berechnung des Durchmessers 2) Berechnung des Umfangs 3) Berechnung der Fläche Auswahl: 1 Durchmesser ist: 46.000000 Umfang ist: 144.513260 Fläche ist: 1661.902466 Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 105/715

MATLAB Beispiel: Mehrfachverzweigung mit switch radius = input( Radius des Kreises = ); disp( 1) Berechnung des Durchmessers ); disp( 2) Berechnung des Umfangs ); disp( 3) Berechnung der Fläche ); auswahl = input( Auswahl: ); switch auswahl case {1} durchmesser = 2*radius; fprintf( Durchmesser ist: %f \n, durchmesser); case {2} umfang = 2*radius*pi; fprintf( Umfang ist: %f \n, umfang); case {3} flaeche = radius*radius*pi; fprintf( Fläche ist: %f \n, flaeche); otherwise fprintf( Keine Berechnung durchgeführt. \n ); end

Programmschleifen Auch Iteration oder Zyklen: Wiederholung von Programmteilen (Blöcken oder einzelnen Befehlen) entsprechend bestimmten Bedingungen for-schleife: Zählschleife zum Durchlaufen von Wertebereichen für eine Variable while-schleife: kopfgesteuerte Schleife mit beliebiger Bedingung für Wiederholung, die vor dem Porgrammteil ausgwertet wird do-while-schleife: fußgesteuerte Schleife mit beliebiger Bedingung für Wiederholung, die am Ende des Porgrammteils ausgwertet wird Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 107/715

for-schleife Zählschleife for ([<Initialisierung>];[<Bedingung>];[<Schrittanweisung>]) <Befehl oder Programmblock> Initialisierung: Deklaration (oder kommaseparierte Folge von Deklarationen) und Defintion der Laufvariable(n), die einmalig vor Beginn der Iteration ausgeführt wird Bedingung: logischer Ausdruck, der am Anfang jeden Iterationsschritts erfüllt sein muss Schrittanweisung: Modifikation der Laufvariablen am Ende jeden Iterationsschrittes, bei mehreren auch kommaseparierte Liste von Modifikationen Alle drei Teile sind optional Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 108/715

for-schleife: Pseudocode... for Beschreibung des Bereichs Auszuführende Anweisungen endfor... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 109/715

for-schleife: PAP Initialisierung Bedingung ja nein Anweisungen Schrittanweisung Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 110/715

for-schleife: Beispiel (C++) #include <iostream> using namespace std; int main() { int max; cout << Maximalwert = ; cin >> max; int sum = 0; for (int i=1; i <= max; i++) { sum = sum + i; cout << Summe der natürlichen Zahlen bis << i << : << sum << endl; } return 0; } Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 111/715

MATLAB Beispiel: for-schleife m = input( Maximalwert = ); s = 0; for i=1:m s = s + i; end fprintf( Summe der natuerlichen Zahlen bis %f ist%f \n,m,s); for-schleifen auf Feldern oder Wertefolgen können oft durch Matlab-Funktionen auf Feldern ersetzt werden: x = 1:m; fprintf( Summe bis %f ist%f \n,m,sum(x));

for-schleife: Beispiele möglicher Schleifenköpfe Weitere Beispiele for (int i=1; i <= 10; i++)... // 1 2 3... 10 for (int i=10; i > 0; i )... // 10 9 8... 1 for (int i=1; i <= 256; i*=2)... // 1 2 4 8... 256 for (int i=1, int j=10; i < j; i++,j )... // (1,10) (2,9)... (5,6) for (;;)... // Endlosschleife for (;!gefunden;)... // entspricht while(!gefunden)... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 113/715

while-schleife Kopfgesteuerte Schleife while (<Bedingung>) <Befehl oder Programmblock> Bedingung wird jeweils vor Ausführung des folgenden Befehls/Programmblocks ausgewertet Abweisende Schleife: wird die Bedingung vor der ersten Ausführung nicht erfüllt, wird der Schleifentext gar nicht ausgeführt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 114/715

while-schleife: Beispiel (C++) #include <iostream> using namespace std; int main() { int min,max; int sum = 0; cout << Kleinere Zahl = ; cin >> min; cout << Größere Zahl = ; cin >> max; cout << Summe aller Zahlen von << min << bis << max << ist ; while(min <= max) { sum = sum + min; min++; } cout << sum <<. << endl; return 0; } Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 115/715

while-schleife: Pseudocode... while Bedingung Auszuführende Anweisungen endwhile... Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 116/715

while-schleife: PAP Bedingung ja nein Anweisungen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 117/715

while-schleife: Struktogramm solange Bedingung wahr Anweisunge(n) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 118/715

do-while-schleife Fußgesteuerte Schleife do <Befehl oder Programmblock> while (<Bedingung>); Bedingung wird jeweils nach Ausführung des Schleifenteils überprüft Nicht-abweisende Schleife: der Schleifentext wird mindestens immer einmal ausgeführt, bevor die Bedingung am Ende überprüft wird Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 119/715

do-while-schleife: Beispiel (C++) #include <iostream> using namespace std; int main() { int summand; int sum = 0; do { cout << Aktuelle Zwischensumme : << sum << endl; cout << Nächster Summand (0 für Abbruch) = ; cin >> summand; sum = sum + summand; }while (summand!= 0); return 0; } Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 120/715