Informatik Wintersemester Maschinenbau und Kunststofftechnik Skript Informatik Tobias Wolf http://informatik.swoke.de Seite 1 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Was ist Informatik ? - Informatik ist die Wissenschaft von der systematischen Verarbeitung von Informationen, insbesondere deren automatisierte Verarbeitung mit Hilfe von elektronischen Rechenanlagen. - Die Informatik beschäftigt sich mit: o dem Aufbau, der Arbeitsweise und dem Konstruktionsprinzip von elektronischen Rechenanlagen und o den Strukturen, Eigenschaften und Beschreibungsmöglichkeiten von Informationen und deren Weiterverarbeitung. Tobias Wolf http://informatik.swoke.de Seite 2 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Algorithmus - Ein Algorithmus ist eine endliche Folge genau definierter Vorschriften zur Lösung einer Aufgabenstellung. - Ein Algorithmus ist ein Verfahren, welches in einem endlichen Text niedergelegt werden muss und effektiv durch eine Maschine (Computer) ausgeführt werden kann. - Algorithmen wandeln Eingabedaten in Ausgabedaten um. Tobias Wolf http://informatik.swoke.de Seite 3 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Programm - Programme sind in einer Programmiersprache formulierte Algorithmen. - Im Gegensatz zu Algorithmen sind Programme in einer eindeutigen Programmiersprache verfasst. - Ein und derselbe Algorithmus kann in verschiedenen Programmiersprachen formuliert werden. Tobias Wolf http://informatik.swoke.de Seite 4 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Softwareentwicklung - Unter Softwareentwicklung versteht man die systematische Konstruktion von Programmen zur Lösung eines in der realen Welt gestellten Problems. Tobias Wolf http://informatik.swoke.de Seite 5 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Computer - Von wenigen Ausnahmen abgesehen, liegt modernen Computern das Prinzip des Von-Neumann-Rechners zugrunde. - Der Rechner besteht aus fünf Funktionseinheiten: o Steuerwerk o Rechenwerk o Speicher o Eingabewerk o Ausgabewerk - Diese Funktionseinheiten sind durch ein Bussystem verbunden. - Von-Neumann-Rechner folgen dem EVA-Prinzip: Eingabe - Verarbeitung - Ausgabe Tobias Wolf http://informatik.swoke.de Seite 6 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Von-Neumann-Rechner Tobias Wolf http://informatik.swoke.de Seite 7 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zentraleinheit - Steuerwerk, Rechenwerk und Speicher fasst man auch unter der Bezeichnung „Zentraleinheit“ zusammen. - Steuerwerk und Rechenwerk sind meist in einem Chip, dem Prozessor (CPU = Central Processing Unit) untergebracht. - Der Prozessor ist mit den anderen Bestandteilen des Rechners über einen Bus verbunden. Tobias Wolf http://informatik.swoke.de Seite 8 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Steuerwerk - Das Steuerwerk steuert und koordiniert alle Aktionen, die in der Zentraleinheit ablaufen. - Das Steuerwerk hat folgende Aufgaben: o Befehle in der richtigen Reihenfolge aus dem Speicher laden o Befehle decodieren o Befehle interpretieren o Versorgung der Funktionseinheiten mit Steuersignalen Tobias Wolf http://informatik.swoke.de Seite 9 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Rechenwerk - Im Rechenwerk werden die arithmetischen und logischen Verknüpfungen ausgeführt (ALU: Arithmetic Logical Unit). - Die Operanden werden hierbei vom Steuerwerk geliefert. - Das Rechenwerk wird mit den für die richtige Durchführung der Operation notwendigen Steuersignalen versorgt. Tobias Wolf http://informatik.swoke.de Seite 10 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Speicher - Im Speicher werden: o Programme o Daten o Zwischenergebnisse o Endergebnisse abgelegt - Jede Speicherzelle hat eine Adresse. Tobias Wolf http://informatik.swoke.de Seite 11 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Bus - Ein Rechner ist modular aufgebaut. - Größere Funktionseinheiten sind meist in Form von einzelnen Chips realisiert. - Neben den oben erwähnten Funktionseinheiten gibt es u.a. Chips für die Bildschirmsteuerung, die externe Kommunikation, die Kontrolle von Peripheriegeräten. Tobias Wolf http://informatik.swoke.de Seite 12 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Bus - Die notwendigen Verbindungen zwischen den einzelnen Elementen werden von sogenannten Bussen übernommen. - Als Beispiele sind der Datenbus und der Adressbus zu nennen. - Der Datenbus transportiert Daten. - Über den Adressbus wird festgelegt, welche Speicherzelle gelesen oder beschrieben werden soll. Tobias Wolf http://informatik.swoke.de Seite 13 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eingabe- und Ausgabewerk - Geräte, die an dem Ein- und Ausgabewerk angeschlossen sind, werden als Peripherie bezeichnet. - Beispiele für die Peripherie sind: Tastatur, Maus, Bildschirm, Drucker, Scanner, DVD-Laufwerk. - Keine Peripheriegeräte hingegen sind: Konventionelle Festplatten, SSD, USB-Sticks. Sie zählen zu den Datenspeichern. Tobias Wolf http://informatik.swoke.de Seite 14 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Programmiersprachen - Man unterscheidet 5 Generationen von Programmiersprachen: o 1. Generation: Maschinensprache o 2. Generation: Assemblersprache o 3. Generation: Höhere Programmiersprache o 4. Generation: Nichtprozedurale Sprache o 5. Generation: Wissens- und Objektorientierte Sprache Tobias Wolf http://informatik.swoke.de Seite 15 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Maschinensprache - Die Maschinensprache entspricht dem Befehlsvorrat einer speziellen CPU. - In Maschinensprache geschriebene Programme sind nur auf einem CPU-Typ lauffähig. Tobias Wolf http://informatik.swoke.de Seite 16 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Maschinensprache Beispiel 0010 0001 0000 0010 0110 0000 1101 Tobias Wolf http://informatik.swoke.de 0010 0110 0000 0000 0100 0000 0000 0011 0001 0000 0011 0000 0000 1000 1100 0101 0101 1100 1110 0011 0001 Seite 17 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Assemblersprache - Der Vorrat an symbolischen Befehlen entspricht dem der Maschinensprache. - Einem Maschinenbefehl ist jeweils ein symbolischer Befehl zugeordnet. - In Assembler geschriebene Programme sind nur auf einem CPU-Typ lauffähig. Tobias Wolf http://informatik.swoke.de Seite 18 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Assemblersprache - Mit Assembler-Programmen kann man, unter Ausnutzung aller Möglichkeiten der CPU, sehr effiziente Programme erstellen. - Assemblerprogramme werden mit speziellen Übersetzern in Maschinensprache übersetzt. MOVE.L #222222, D0 MOVE.L #333333, D1 ADD.L D1, D0 Tobias Wolf http://informatik.swoke.de Seite 19 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Höhere Programmiersprachen - Für diese Sprachen gibt es eine Vielzahl von Bezeichnungen. - Sie sind weitgehend maschinenunabhängig, genormt und oft für einen speziellen Anwendungsbereich konzipiert. - Zur Problemlösung werden Algorithmen formuliert, d.h. die Abfolge, in der die Daten bearbeitet werden, wird definiert. Tobias Wolf http://informatik.swoke.de Seite 20 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Höhere Programmiersprachen - Hier trennte sich auch die Entwicklung zwischen Sprachen für kaufmännische Anwendungen, welche meist große Datenbestände verwalten müssen und wissenschaftlichtechnische Anwendungen, bei denen die effiziente Programmierung komplexer mathematischer Algorithmen im Vordergrund steht. Tobias Wolf http://informatik.swoke.de Seite 21 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Höhere Programmiersprachen - Als Urahn der kaufmännisch orientierten Programmiersprachen ist COBOL (Common Business Oriented Language, ab 1959) zu sehen; die älteste Programmiersprache für wissenschaftlichtechnische Anwendungen ist FORTRAN (FORmula TRANslator, ab 1954). - Weitere Beispiele sind PL/1, PASCAL, BASIC, ALGOL und C. a = 222222; b = 333333; c = a + b; Tobias Wolf http://informatik.swoke.de Seite 22 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Nichtprozedurale Sprachen - Die Definition dieser Sprachen und der im nächsten Unterkapitel beschriebenen Sprachen ist fließend. - Eine wichtige Eigenschaft ist die Nichtprozeduralität. - Dem Rechner muss nicht mehr länger mitgeteilt werden, wie er das Problem zu lösen hat, sondern nur noch, was zu geschehen hat. Tobias Wolf http://informatik.swoke.de Seite 23 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Nichtprozedurale Sprachen - Verwendung finden sie überwiegend im Bereich von Dateiverwaltungs- und Datenbanksystemen. - Deshalb werden diese Sprachen auch als datenorientierte Sprachen bezeichnet. - Am bekanntesten ist SQL für die relationale Datenmanipulation. Tobias Wolf http://informatik.swoke.de Seite 24 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Nichtprozedurale Sprachen - Die Sprachen der 4. Generation haben die Produktivität in der Programmentwicklung erheblich erhöht. - Allerdings nehmen sie sehr stark Hardwareressourcen in Anspruch. - Viele dieser Sprachen sind proprietär, d.h. sie gehören zu einer bestimmten Rechnerplattform, und damit ist man vom jeweiligen Hersteller abhängig. Tobias Wolf http://informatik.swoke.de Seite 25 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Objektorientierte und Wissensbasierte Sprachen - Schwierig ist die Klassifikation dieser Sprachen. - Sie werden teilweise auch als 5. Generation bezeichnet. - Zu bedenken ist jedoch, dass es sich hierbei um die verschiedensten Arten von Programmiersprachen handelt. Tobias Wolf http://informatik.swoke.de Seite 26 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Objektorientierte und Wissensbasierte Sprachen - Objektorientierte Sprachen beruhen auf einem vollkommen anderen Programmierprinzip. - Die Daten, die ein Programm verarbeitet und die Methoden, mit denen die Daten verarbeitet werden, werden zu sogenannten Objekten zusammengefasst, die dann miteinander kommunizieren. - Eine wichtige Eigenschaft ist die Möglichkeit der Vererbung von Eigenschaften eines Objektes auf ein anderes. - Beispiele sind C++ und Java. Tobias Wolf http://informatik.swoke.de Seite 27 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Objektorientierte und Wissensbasierte Sprachen - Wissensbasierte Sprachen, auch KI-Sprachen (KI = Künstliche Intelligenz) sind Sprachen zur Entwicklung von Expertensystemen. - Beispiele sind LISP und PROLOG. Tobias Wolf http://informatik.swoke.de Seite 28 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Übersetzer - Ein grundlegendes Problem aller Programmiersprachen ist die Übersetzung des sogenannten Quellprogramms in Maschinensprache. - Hierbei werden drei Konzepte unterschieden: o Assembler o Compiler o Interpreter Tobias Wolf http://informatik.swoke.de Seite 29 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Assembler - Assembler setzen Befehle eins zu eins aus der maschinenorientierten Sprache in die Maschinensprache um. Tobias Wolf http://informatik.swoke.de Seite 30 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Compiler - Compiler übersetzen ein in einer höheren Sprache geschriebenes Programm in Maschinensprache. - Dabei wird die Quelldatei auf syntaktische Fehler geprüft. - Nach erfolgreicher Übersetzung und dem Link-Vorgang kann das Programm gestartet werden. - Bei jeder Änderung muss das gesamte Programm neu übersetzt werden. Tobias Wolf http://informatik.swoke.de Seite 31 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Interpreter - Interpreter gehen Zeile für Zeile durch den Quelltext. - Eine Zeile wird hierbei auf syntaktische Korrektheit geprüft und dann sofort ausgeführt. - Danach wird die nächste Zeile bearbeitet. - Im Gegensatz zum Compiler erstellt der Interpreter kein eigenes, lauffähiges Programm. - Von daher muss z.B. bei der Weitergabe immer sichergestellt sein, dass der Empfänger auch über den Interpreter verfügt. Tobias Wolf http://informatik.swoke.de Seite 32 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Entwicklungsprozess für C++Programme - Der Editor unterstützt den Programmierer bei der Eingabe der Quelldatei z.B. Beispiel.cpp. - Mit dem Präprozessor wird die Quelldatei für den Übersetzungsvorgang vorbereitet. - Der Compiler übersetzt die Quelldatei in Maschinensprache. Als Resultat des erfolgreichen Übersetzungsvorgangs erhält man das Objektprogramm Beispiel.obj. Tobias Wolf http://informatik.swoke.de Seite 33 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Entwicklungsprozess für C++Programme - Der Linker fügt dem Objektprogramm andere Objektprogramme, z.B. aus Programm-Bibliotheken hinzu. Es resultiert ein ausführliches Maschinenprogramm Beispiel.exe. - Der Lader transferiert das ausführbare Maschinenprogramm in den Hauptspeicher und startet es. - Der Debugger wird zur Analyse des Quellprogramms und für Tests eingesetzt. Tobias Wolf http://informatik.swoke.de Seite 34 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik C++ Historie - 1966 Martin Richards entwickelte BCPL, assemblernahe Sprache - 1967 Simula 67, Programmiersprache für mathematisch technische Probleme und Simulation, erste objektorientierte Konzepte - 1970 Ken Thompson entwickelte B, eine assemblernahe Sprache; Unix Betriebssystem für PDP 7 - 1972 Dennis Ritchie (Bell Labs) entwirft C; rechnerunabhängige Sprache zur Portierung von Unix auf PDP 11 Tobias Wolf http://informatik.swoke.de Seite 35 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik C++ Historie - 1978 Kernighan und Ritchie geben das erste Referenzbuch zu C heraus - 1979 Start der Arbeiten an C mit Klassen - 1983 erster Entwurf von C++ durch Bjarne Stroustrup; BellLabs in den USA - 1985 Bjarne Stroustrup veröffentlicht das Buch: The C++ Programming Language Tobias Wolf http://informatik.swoke.de Seite 36 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik C++ Historie - 1987 Veröffentlichung des ersten reinen C++ Compilers für PCs und Workstations - 1988 American National Standards Institute (kurz: ANSI) veröffentlicht den ersten C Standard - 1990 erste C++ Version von Borland (heute: Inprise) - 1992 erste C++ Version von Microsoft - 1998 Veröffentlichung des ANSI C++ Standards ISO/IEC 14882 Tobias Wolf http://informatik.swoke.de Seite 37 von 37 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 2 Einführung in C++ Tobias Wolf http://informatik.swoke.de Seite 1 von 29 Wintersemester Maschinenbau und Kunststofftechnik Informatik C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; ! : < Tobias Wolf http://informatik.swoke.de , > . | ‘ & „ ^ # ~ + ( ) * { / } % [ _ ] \ ? Seite 2 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Höhere Elemente - Mit den im Zeichensatz enthaltenen Zeichen werden folgende Elemente gebildet: o Schlüsselwörter o Namen o Konstanten o Operatoren o Interpunktionszeichen Tobias Wolf http://informatik.swoke.de Seite 3 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Schlüsselwörter - Schlüsselwörter haben eine durch die Programmiersprache festgelegte Bedeutung. asm continue float new signed try auto break case catch char class default delete do double else enum for friend goto if inline int operator private protected public register return sizeof static struct switch template this typedef union unsigned virtual void volatile Tobias Wolf http://informatik.swoke.de const extern long short throw while Seite 4 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Namen - In einem Programm werden Variablen, Funktionen usw. Namen (Bezeichner) zugeordnet. - Ein Name beginnt mit einem Buchstaben oder einem Unterstrich. - Er besteht aus einer Folge von Buchstaben, Ziffern und dem Unterstrich. - Ein Name hat eine vom Compiler abhängige Länge von z.B. 255 Zeichen. Tobias Wolf http://informatik.swoke.de Seite 5 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Namen - Groß- und Kleinschreibung wird unterschieden. Namen von Variablen sollten mit Kleinbuchstaben beginnen. Konstanten sollten groß geschrieben werden (z.B.: PI). Ein C++ Schlüsselwort darf nicht als Name verwendet werden. volumen PI _anzahl_werte feldNummer16 FeldNummer16 Tobias Wolf http://informatik.swoke.de Seite 6 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstanten - Konstanten sind nicht veränderbare Daten innerhalb eines Programms. - Jeder Konstanten ist eindeutig ein Datentyp zugeordnet. - Die spezifische Schreibweise der Konstanten hängt von ihrem Datentyp ab. 3 3.14159 Tobias Wolf http://informatik.swoke.de Seite 7 von 29 Wintersemester Maschinenbau und Kunststofftechnik Informatik Operatoren - Operatoren dienen der Verknüpfung von Operanden. - Es sind für jeden Datentyp Operatoren vordefiniert. - Bsp: Addition Division Oder Tobias Wolf http://informatik.swoke.de + / || Seite 8 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Interpunktionszeichen - Ein Beispiel für ein Interpunktionszeichen ist das Semikolon am Ende jeder Anweisung. a = 1; cin >> radius; Tobias Wolf http://informatik.swoke.de Seite 9 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Trennung von Anweisungen - Es können eine oder mehrere Anweisungen in einer Zeile stehen. - Am Ende jeder Anweisung muss ein Semikolon stehen. a = 1; b = 2; c = 3; Tobias Wolf http://informatik.swoke.de Seite 10 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kommentare - C++ Kommentare beginnen mit // und reichen bis zum Ende der Zeile. // Dies ist eine Kommentarzeile a = 1; // Dies ist ein Kommentar Tobias Wolf http://informatik.swoke.de Seite 11 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kommentare - Kommentare im C-Stil sind auch erlaubt, und dienen meist zur vorübergehenden Ausblendung von Programmcode. - Dadurch ist das Ausblenden eines ganzen Abschnittes möglich. /* Dies ist ein Kommentar */ /* volumen = 4.0 / 3.0 * PI * pow(radius, 3); cout << "Volumen = " << volumen << endl; */ Tobias Wolf http://informatik.swoke.de Seite 12 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Fortsetzungszeilen - In C++ ist es möglich, eine Zeile in der darauf folgenden Zeile fortzusetzen. volumen = 4.0 / 3.0 * PI * pow(radius, 3); Tobias Wolf http://informatik.swoke.de Seite 13 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Leerzeichen - Innerhalb von Schlüsselwörtern, Namen, Konstanten (außer Zeichenkonstanten) und Operatoren (z.B. >>) dürfen keine Leerzeichen verwendet werden. Tobias Wolf http://informatik.swoke.de Seite 14 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Das „Hallo Welt“-Programm Zeile 1 2 3 4 5 6 Befehl #include <iostream> using namespace std; void main() { cout << "Hallo Welt "; } Tobias Wolf http://informatik.swoke.de // Dies ist ein Kommentar Seite 15 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Das „Hallo Welt“-Programm - Dieses Programm gibt den Text „Hallo Welt“ auf dem Bildschirm aus. - Ein C++ Programm besteht mindestens aus der globalen Funktion main. Sie ist das Hauptprogramm und darf auch nur main heißen! - In Zeile 1 steht die Präprozessor-Anweisung. - Zeile 2 gibt den Namensraum an, in dem die genutzten Befehle zu finden sind. (Der Befehl „cout“ ist zu finden im Namensraum „std“) - Ab Zeile 3 wird die Funktion main definiert. Tobias Wolf http://informatik.swoke.de Seite 16 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Das „Hallo Welt“-Programm - Zeile 4 und 6 begrenzen einen Block. Dieser ist der Funktionsrumpf von main. - Hinter „cout << "Hallo Welt";“ steht ein Kommentar - Kommentare werden mit // eingeleitet. Alles, was hinter den // folgt, wird nicht abgearbeitet. - Jeder Befehl innerhalb der geschweiften Klammern { } wird durch ein Semikolon abgeschlossen. (Bsp.: cout << "Hallo Welt";) Tobias Wolf http://informatik.swoke.de Seite 17 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Das zweite C++-Programm Zeile 1 2 3 4 5 6 7 8 9 10 11 12 Befehl #include <iostream> // cin/cout sind hier enthalten #include <cmath> // pow ist hier enthalten using namespace std; void main() { double volumen, radius; const double PI = 3.14159; cout << "Radius der Kugel eingeben: "; cin >> radius; volumen = 4.0 / 3.0 * PI * pow (radius, 3); cout << "Volumen = " << volumen << endl; } Tobias Wolf http://informatik.swoke.de Seite 18 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Das zweite C++-Programm - Dieses Programm berechnet das Volumen einer Kugel bei gegebenem Radius. - In Zeile 1 und 2 stehen die Präprozessor-Anweisungen. - In Zeile 3 steht die using-Anweisung - Ab Zeile 4 wird die Funktion main definiert. - In Zeile 5 und 12 umschließen den Funktionsrumpf der Funktion main. Tobias Wolf http://informatik.swoke.de Seite 19 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Das zweite C++-Programm - In Zeile 6 werden die Variablen volumen und radius definiert. - In Zeile 7 wird die Konstante PI definiert. - In Zeile 8 und 11 werden Zeichenfolgen und der Wert von volumen ausgegeben. - In Zeile 9 steht die Eingabe für die Variable radius. - In Zeile 10 findet man die Berechnung für volumen. - Die vorhandenen // in Zeile 1 und 2 dienen wieder der Einleitung eines Kommentars. Tobias Wolf http://informatik.swoke.de Seite 20 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Blöcke - Mit Blöcken fasst man mehrere Befehle und Deklarationen zu einer Einheit zusammen. - Innerhalb eines Blocks können lokale Variablen definiert werden. - Der Rumpf einer Funktion (zum Beispiel bei main) muss ein Block sein. - Blöcke dürfen beliebig ineinander geschachtelt sein. Tobias Wolf http://informatik.swoke.de Seite 21 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Blöcke - Beispiel #include <iostream> using namespace std; void main() { int a, b; a = 1; b = 2; cout << a << b << endl; { int b = 5, c = 3; cout << a << b << c << endl; { int d = 4; cout << a << b << c << d << endl; } } } Tobias Wolf http://informatik.swoke.de Seite 22 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Header-Dateien - Oberhalb der Funktion main werden Header-Dateien eingebunden. #include <iostream> - Diese, mit Doppelgatter # beginnenden Zeilen, sind sogenannte Präprozessoranweisungen. - Der Präprozessor erzeugt entsprechend der Anweisung den Quelltext, der dann vom Compiler übersetzt wird. - Am Ende einer Präprozessor-Anweisung steht kein Semikolon. Tobias Wolf http://informatik.swoke.de Seite 23 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Header-Dateien - Header-Dateien sind Textdateien, die u.a. weitere Befehle enthalten (zB cout, cin). - Header-Dateien werden mit der include-Anweisung eingebunden, um diese Befehle im Programm nutzen zu können. Tobias Wolf http://informatik.swoke.de Seite 24 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Header-Dateien - Spitze Klammern werden bei Standard-Header-Dateien verwendet. - Zur Einbindung von selbst verfassten Header-Dateien verwendet man Anführungszeichen. #include <math.h> #include "Test.h" Tobias Wolf http://informatik.swoke.de Seite 25 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Header-Dateien - Alle in einer Header-Datei deklarierten Namen sind global verfügbar. - Das kann bei großen Programmen zu Namenskonflikten führen. Tobias Wolf http://informatik.swoke.de Seite 26 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Header-Dateien - Daher gibt es in C++ z.B. zur Header-Datei math.h noch eine Header-Datei cmath, die dieselben Namen in einem Namensbereich std deklariert. #include <math.h> entspricht #include <cmath> using namespace std; Tobias Wolf http://informatik.swoke.de Seite 27 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Formatierungsregeln für Quelldateien - In den obigen Beispielen wurden einige Regeln zur Formatierung eines C++ Quellprogramms befolgt: - Jeder neue Block wird um eine bestimmte Anzahl an Leerzeichen oder „Tabs“ eingerückt. - Blockbegrenzungen stehen immer in einer gesonderten Zeile. - Jede Funktion beginnt mit der ersten Spalte (steht also ganz links). Tobias Wolf http://informatik.swoke.de Seite 28 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Formatierungsregeln für Quelldateien - Bei längeren Anweisungen sollte der Übersicht halber nicht mehr, als eine Anweisung pro Zeile geschrieben werden. - Keine Zeile sollte mehr, als 80 Zeichen lang sein, um die Lesbarkeit zu erhöhen. Tobias Wolf http://informatik.swoke.de Seite 29 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 3 Datentypen und Variablen Tobias Wolf http://informatik.swoke.de Seite 1 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt. - Für jeden Datentyp gibt es eine Festlegung, in welcher Weise Konstanten eindeutig dargestellt werden können. - In C++ gibt es eine Reihe vordefinierter Datentypen. - Aus den vordefinierten Datentypen können weitere Datentypen zusammengesetzt werden. Tobias Wolf http://informatik.swoke.de Seite 2 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Datentypen - Einführung - In dieser Tabelle sind die arithmetischen Datentypen aufgelistet: Datentyp char int float double Tobias Wolf http://informatik.swoke.de Länge 1 4 4 8 Byte Byte Byte Byte Wertebereich von bis -27 27-1 -231 231-1 ± 1.2 10-38 ± 3.4 10+38 ± 2.2 10-308 ± 1.8 10+308 Seite 3 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Ganzzahlige Konstanten - Ganze Zahlen (ganzzahlige Konstanten) werden unter den Datentyp int gespeichert. - Der Computer speichert die Zahlen aber nicht in der Form, wie wir sie benutzen. (Also z.B. die Zahl 6 wird nicht als "6" gespeichert.) - Die Speicherung erfolgt als Binärzahl. (z.B. 0110 für die Zahl 6) - Um auch negative Zahlen speichern zu können, wird die Zahl bei den meisten Rechenwerken in der Zweierkomplementdarstellung gespeichert. Tobias Wolf http://informatik.swoke.de Seite 4 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Ganzzahlige Konstanten Beispiel: 4 wird im Computer so gespeichert: 1. Vorzeichen ignorieren und ins Binärsystem umrechnen 4 => 0000 0100 Tobias Wolf http://informatik.swoke.de Seite 5 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Ganzzahlige Konstanten Beispiel: -4 wird im Computer so gespeichert: 1. Vorzeichen ignorieren und ins Binärsystem umrechnen 4 => 0000 0100 2. Invertieren, da negativ 1111 1011 3. Eine 1 addieren, da negativ 1111 1011 + 0000 0001 => 11111100 Tobias Wolf http://informatik.swoke.de Seite 6 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Ganzzahlige Konstanten - Durch die Speicherung der Zahlen in Zweierkomplementdarstellung können wir auf dem vorgesehenen Platz zwar nur halb so viele Zahlen speichern. - Jedoch ermöglicht uns dies, dass die Verarbeitung von positiven und negativen Zahlen im Rechenwerk gleich bleiben kann. Ansonsten müsste der Computer bei Berechnungen positive und negative Zahlen intern unterschiedlich behandeln. Tobias Wolf http://informatik.swoke.de Seite 7 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Ganzzahlige Konstanten - Eingabe - Ganzzahlige Konstanten können dezimal, oktal oder hexadezimal in einem C-Programm angegeben werden. - Die Unterscheidung wird anhand der ersten Ziffer vorgenommen. Darstellung dezimal oktal hexadezimal Tobias Wolf http://informatik.swoke.de 1. Ziffer 1 bis 9 0 0x Beispiel 4 +4 -67 101 012 +0167 -013 0xC2 -0x3D Seite 8 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Beispiel #include <iostream> using namespace std; void main () { cout << 10; cout << 012; cout << 0xa; } 10 10 10 Tobias Wolf http://informatik.swoke.de Seite 9 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Ganzzahlige Konstanten - Ausgabe - Ganzzahlige Konstanten können dezimal, oktal oder hexadezimal ausgegeben werden. - Die Darstellung wird bestimmt durch den Befehl setbase(). Tobias Wolf http://informatik.swoke.de Seite 10 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Beispiel #include <iostream> #include <iomanip> using namespace std; void main () { int var = 10; cout << "Die Zahl " << var << " ist" << endl cout << "hexadezimal: " << setbase(16) << var << endl; cout << "oktal: " << setbase(8) << var << endl; cout << "dezimal: " << setbase(10) << var << endl; } Die Zahl 10 ist hexadezimal: a oktal: 12 dezimal: 10 Tobias Wolf http://informatik.swoke.de Seite 11 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zahlensysteme - Umwandlung einer Dualzahl in eine Dezimalzahl: (010111)2 = 0·25+1·24+0·23+1·22+1·21+1·20 = (23)10 - Umwandlung einer Oktalzahl in eine Dezimalzahl: (167)8 = (1·82+6·81+7·80) = (119)10 - Umwandlung einer Hexadezimalzahl in eine Dezimalzahl: (C2)16 = (12·161+2·160) = (194)10 Tobias Wolf http://informatik.swoke.de Seite 12 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Gleitkomma Konstanten - Der Standarddatentyp für Gleitkomma Konstanten ist double. - Die Abspeicherung erfolgt im IEEE-Format (Institute of Electrical and Electronics Engineers) durch Verwendung: eines Vorzeichenbits, 11 Exponentenbits und 52 Mantissenbits. - Die Genauigkeit der Darstellung ist auf ca. 15 Stellen begrenzt. Tobias Wolf http://informatik.swoke.de Seite 13 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Gleitkomma Konstanten - Beispiele für die Ein- und Ausgabe von Gleitkomma Konstanten (Gleitkommazahlen) 1.2345 -0.012 41.0 1.1E+02 -25.0E+15 Tobias Wolf http://informatik.swoke.de Seite 14 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition einer Variablen - Bei der Definition einer Variablen wird der Variablen eine Speicherstelle zugewiesen. Diese kann beschrieben und ausgelesen werden. int anzahl; double kraft; double volumen, radius; Tobias Wolf http://informatik.swoke.de Seite 15 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Gültigkeitsbereich von Variablen - Variablen können innerhalb und außerhalb von Blöcken deklariert werden. - Wird eine Variable innerhalb eines Blocks deklariert, so hat sie nur hier Gültigkeit. Man nennt sie deshalb eine lokale Variable. - Wird eine Variable außerhalb eines Blocks, d.h. außerhalb von Funktionsrümpfen deklariert, so hat sie von ihrer Position an Gültigkeit. Sie wird globale Variable genannt. Tobias Wolf http://informatik.swoke.de Seite 16 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Initialisierung von Variablen - Man kann Variablen auch definierte Anfangswerte zuordnen. - Eine Variable sollte vor ihrer ersten Verwendung initialisiert werden. int anzahl = 1000; double PI = 3.14159; int a = 2, b = 3; Tobias Wolf http://informatik.swoke.de Seite 17 von 18 Informatik Wintersemester Maschinenbau und Kunststofftechnik Benannte Konstanten - Konstanten kann ein Name zugeordnet werden. - Wird bei der Initialisierung einer Variablen vor den Datentyp das Schlüsselwort const geschrieben, so handelt es sich um eine benannte Konstante. const double PI = 3.14159; Tobias Wolf http://informatik.swoke.de Seite 18 von 18 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Kapitel 4 Ein- & Ausgabe Tobias Wolf http://informatik.swoke.de Seite 1 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Ein- und Ausgabe - Für die Ausgabe auf die Standardausgabe (üblicherweise der Monitor) kann das Ausgabe-Objekt cout verwendet werden. - Für die Eingabe vom Standardeingabegerät (Tastatur) wird das Eingabe-Objekt cin verwendet. Tobias Wolf http://informatik.swoke.de Seite 2 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Ausgabe - cout - Beispiele: cout cout cout cout cout Tobias Wolf http://informatik.swoke.de << << << << << "Texteingabe"; x; a << b; c << d << endl; "y = " << y << endl; Seite 3 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Ausgabe - cout - Am Ende einer cout-Anweisung wird kein automatischer Zeilenvorschub eingefügt. Dies erreicht man durch Einfügen des Manipulators endl in den Ausgabestream. - Bei der Ausgabe einer arithmetischen Größe werden so viele Stellen wie benötigt ausgegeben. - Bei der Ausgabe von Gleitkommazahlen werden diese in Abhängigkeit von ihrem Wert mit oder ohne Exponenten ausgegeben. Tobias Wolf http://informatik.swoke.de Seite 4 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Ausgabe-Manipulatoren - Die Breite des Ausgabefeldes kann mit dem Manipulator setw(n) beeinflusst werden. - n gibt die Anzahl der Stellen des Ausgabefeldes an. - Dieser Manipulator wirkt nur auf die direkt folgende Ausgabe und gilt für alle Datentypen. cout << "12345678901234567890"; cout << setw(15) << 1.602E-19 12345678901234567890 1.602e-019 Tobias Wolf http://informatik.swoke.de Seite 5 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Ausgabe-Manipulatoren - Die Anzahl der signifikanten Stellen bei der Ausgabe kann über den Manipulator setprecision(n) beeinflusst werden. - Der Standardwert für n ist 6. - Die Einstellung bleibt für alle weiteren Ausgaben bestehen! cout << setprecision(10) << 10.0/3.0 << endl; 12345678901234567890 3.333333333 Tobias Wolf http://informatik.swoke.de Seite 6 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Ausgabe-Manipulatoren - Zur Verwendung der Manipulatoren muss die Datei iomanip eingebunden werden: #include <iomanip> Tobias Wolf http://informatik.swoke.de Seite 7 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Ausgabe-Manipulatoren (kompakt) Methode setw(n) Tobias Wolf http://informatik.swoke.de Beschreibung Gibt eine Mindestausgabebreite von n Zeichen vor. Die Ausgabe wird rechtsbündig angeschlagen und links mit Leerzeichen aufgefüllt. Die Ausgabebreite wird bei Bedarf kommentarlos überschritten. Gilt nur immer für die nächste Ausgabe! Seite 8 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Ausgabe-Manipulatoren (kompakt) Methode setprecision(n) Tobias Wolf http://informatik.swoke.de Beschreibung Gibt an, wie viele Stellen einer Zahl ausgegeben werden sollen. (Standardwert für n ist 6.) Gilt für Vor- und Nachkommastellen. Gibt man im Ausgabestrom das Schlüsselwort "fixed" an, so gilt n nur für die Nachkommastellen. setprecision gilt für alle nachfolgenden Ausgaben. Seite 9 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Eingabe - cin - Die Werte der Variablen werden in der Reihenfolge eingegeben, in der sie in der cin-Liste aufgeführt sind. - Die Werte werden durch Leerzeichen oder durch Return getrennt. Die Eingabe wird mit Return abgeschlossen. double x,y,z; cin >> x >> y >> z; Eingabe: Tobias Wolf http://informatik.swoke.de 1.0 2.3 5 Seite 10 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Eingabe - cin - Eingabefehler kann man erkennen, indem man sie durch fail abfängt: if (cin.fail()) cout << "Eingabefehler!" << endl; Tobias Wolf http://informatik.swoke.de Seite 11 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Escape-Sequenzen - Graphisch nicht darstellbare Zeichen können mit EscapeSequenzen dargestellt werden. - Um sie darzustellen, werden sie als zwei Zeichen geschrieben. - Eingeleitet werden sie mit \ . - Sie benötigen aber trotzdem nur ein Byte. Tobias Wolf http://informatik.swoke.de Seite 12 von 16 Wintersemester Maschinenbau und Kunststofftechnik Informatik 1 Escape-Sequenzen Zeichen \a \b \f \n \r \t \0 \\ \“ \’ \xhh Tobias Wolf http://informatik.swoke.de Bedeutung Klingelzeichen Backspace Seitenvorschub Neue Zeile Wagenrücklauf Tabulator String-Ende Backslash Anführungszeichen Hochkomma Numerischer Wert eines Zeichens hexadezimal Seite 13 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Beispiel #include <iostream> using namespace std; void main () { cout << "\tDies ist \n\tein Beispiel \n\tmit "; cout << "Escape-Sequenzen." << "\n"; } Dies ist ein Beispiel mit Escape-Sequenzen. Tobias Wolf http://informatik.swoke.de Seite 14 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Beispiel #include <iostream> #include <cmath> using namespace std; void main () { double a = 8.8, b = 7.24, c = 5.8; double y; y = a + sqrt(b - c); cout << "y = " << y << endl; } y = 10 Tobias Wolf http://informatik.swoke.de Seite 15 von 16 Informatik 1 Wintersemester Maschinenbau und Kunststofftechnik Beispiel #include <iostream> #include <cmath> Zahl #include <iomanip> 1.357 using namespace std; 1.821 void main () 2.092 { double x = 1.357, y = 1.821, z = 2.092; cout << setprecision(4); cout << "Zahl" << "\t" << "Wurzel" << endl; cout << x << "\t" << sqrt(x) << endl; cout << y << "\t" << sqrt(y) << endl; cout << z << "\t" << sqrt(z) << endl; } Tobias Wolf http://informatik.swoke.de Wurzel 1.165 1.349 1.446 Seite 16 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 5 Arithmetische Operatoren Tobias Wolf http://informatik.swoke.de Seite 1 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier Operanden bewirken. Tobias Wolf http://informatik.swoke.de Seite 2 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Arithmetische Operatoren - Wie die Berechnung durchgeführt wird, entscheiden die Operatoren. - Sind bei der Division beide Operanden ganze Zahlen, ist es eine „Ganzzahl-Divison“. - Ist bei der Division hingegen mindestens ein Operand eine Gleitpunktzahl, so ist es eine „Gleitpunkt-Divison“. Tobias Wolf http://informatik.swoke.de Seite 3 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Arithmetische Operatoren Operatoren ++ -+ * / % + - Tobias Wolf http://informatik.swoke.de Bedeutung Inkrement Dekrement Vorzeichen Plus Vorzeichen Minus Multiplikation Division Modulo Addition Subtraktion Bemerkung unär unär unär unär binär binär binär, ganzzahlig binär binär Seite 4 von 16 Wintersemester Maschinenbau und Kunststofftechnik Informatik Merkwürdige Ganzzahl-Arithmetik - Es gibt einen Unterschied zwischen dem, was unser Taschenrechner und dem, was der Computer berechnet. Operation 7/2 1.5 + 7/2 1/2 + 1/2 1.0/2.0 + 1.0/2.0 1/2 + 1.0/2.0 Tobias Wolf http://informatik.swoke.de Taschenrechner 3.5 5 Computer 3 4.5 Seite 5 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Operatorenliste Operatoren () [] -> . ! ~ ++ -- + - * & (Typ) * / % + << >> < <= > >= == != & ^ | && || ?: = += -= *= /= %= etc. , Tobias Wolf http://informatik.swoke.de Auswertrichtung li -> re re -> li li -> re li -> re li -> re li -> re li -> re li -> re li -> re li -> re li -> re li -> re li -> re re -> li li -> re Priorität Bemerkung hoch Klammer, Indexop, Komponentenop unäre Operatoren arithmetische Operatoren arithmetische Operatoren Shift-Operatoren Vergleichsoperatoren Vergleichsoperatoren Bitoperatoren Bitoperatoren Bitoperatoren logische Operatoren logische Operatoren Auswahloperator Zuweisungsoperator niedrig Ausdrucksfolge Seite 6 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Arithmetische Ausdrücke - Ein Ausdruck kann im einfachsten Fall eine Konstante oder eine Variable sein. - Meist handelt es sich aber um eine Berechnung unter Verwendung von Operatoren. 7.2 anzahl a+b+c Tobias Wolf http://informatik.swoke.de Seite 7 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Arithmetische Ausdrücke - Vor dem Ausführen einer binären Operation werden die Datentypen der Operanden angeglichen. - Die Anpassung erfolgt in der Weise, dass der „kleinere“ Datentyp auf den „größeren“ Datentyp erweitert wird. - Das Ergebnis hat dann den „größeren“ Datentyp. char -> unsigned char -> short -> int -> unsigned int -> long -> unsigned long -> float -> double -> long double Tobias Wolf http://informatik.swoke.de Seite 8 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Arithmetische Ausdrücke - Beispiele Ausdruck 7 + 1.2 2.0 * 8 1/2 9/2 1.0 / 3 * 6 2.5 + 3.0 * 2.0 – 0.5 2*3%4+1 Tobias Wolf http://informatik.swoke.de Ergebnis 8.2 16.0 0 4 2.0 8.0 3 Seite 9 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Arithmetische Wertzuweisung - Einer arithmetischen Variablen kann der Wert eines arithmetischen Ausdrucks zugewiesen werden. - Der Zuweisungsoperator ist das = Zeichen. - Hat die Variable auf der linken Seite des Zuweisungsoperators einen anderen Datentyp als der Ausdruck auf der rechten Seite, so wird die rechte Seite an den Datentyp der linken Seite angeglichen. int i = 1.25 float x = 7.1E+122 Tobias Wolf http://informatik.swoke.de // i = 1 // Compiler-Warnung Seite 10 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Arithmetische Wertzuweisung - Eine Wertzuweisung ist selbst wieder ein Ausdruck und liefert den zugewiesenen Wert. z = 12 - ist ein Ausdruck und liefert den Wert 12. x = (y = (z = 12)); x = y = z = 12; Tobias Wolf http://informatik.swoke.de Seite 11 von 16 Wintersemester Maschinenbau und Kunststofftechnik Informatik Arithmetische Wertzuweisung Schreibweise x += 1 x -= 1 x *= 2 x /= 2 x %= 2 x++ ++x x---x Tobias Wolf http://informatik.swoke.de Bedeutung x=x+1 x = x -1 x=x*2 x=x/2 x=x%2 Erhöht x nach der Verwendung um 1 Erhöht x vor der Verwendung um 1 Verringert x nach der Verwendung um 1 Verringert x vor der Verwendung um 1 Seite 12 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Mathematische Funktionen - In der Standard-Header-Datei cmath sind mathematische Funktionen aufgeführt. y = sqrt(x); z = sin(w); a = pow(2,10); (Wobei Visual C++ bei Einbindung von <iostream> viele, viele weitere Bibliotheken automatisch auch hinzufügt.) Tobias Wolf http://informatik.swoke.de Seite 13 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Mathematische Funktionen Funktionsprototyp double sin(double x); double cos(double x); double tan(double x); double atan(double x); double exp(double x); double log(double x); double pow(double x, double y); double sqrt(double x); double fabs(double x); Tobias Wolf http://informatik.swoke.de Bedeutung Sinus; x im Bogenmaß Cosinus; x im Bogenmaß Tangens; x im Bogenmaß Arkus Tangens liefert Winkel im Bogenmaß ex ln(x) (für x > 0) xy (für (x != 0 oder y > 0) und (x >= 0 oder y ganzzahlig)) Quadratwurzel von x (für x >= 0) |x| Absolutbetrag Seite 14 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kommaoperator - Mit dem Kommaoperator können dort mehrere Ausdrücke angegeben werden, wo sonst nur ein Ausdruck stehen darf. - Die Ausdrücke werden von links nach rechts ausgewertet. - Der Wert des Kommaoperator-Ausdrucks hat den Wert und den Typ des am weitesten rechts stehenden Einzelausdrucks. Tobias Wolf http://informatik.swoke.de Seite 15 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kommaoperator #include <iostream> using namespace std; void main() { int a, b, c; a = (b = 2, c = 3, b * c); cout << a << endl; } 6 Tobias Wolf http://informatik.swoke.de Seite 16 von 16 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 6 Vergleichsoperatoren Tobias Wolf http://informatik.swoke.de Seite 1 von 6 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vergleichsoperatoren - Vergleichsoperatoren liefern als Ergebnis die booleschen Werte true oder false. - In C++ sind true und false die beiden möglichen Werte einer Variablen vom Datentyp bool. - Der Datentyp bool kann zu den arithmetischen Datentypen gezählt werden. x > 10 nenner != 0 Tobias Wolf http://informatik.swoke.de Seite 2 von 6 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vergleichsoperatoren - Vor einem Vergleich werden beide Operanden auf den gleichen Datentyp gebracht. - true wird intern durch den Wert 1 und false durch den Wert 0 abgebildet. - Bei Vergleichsoperationen wird außerdem jeder numerische Wert ungleich 0 als true interpretiert und der Wert 0 als false. if (2) cout << "true" << endl; Ausgabe: true Tobias Wolf http://informatik.swoke.de Seite 3 von 6 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vergleichsoperatoren Operator == != < <= > >= Tobias Wolf http://informatik.swoke.de Bedeutung gleich (2 Gleichheitszeichen!) ungleich kleiner kleiner oder gleich größer größer oder gleich Seite 4 von 6 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vergleichsoperatoren - Vor einem Vergleich werden beide Operanden auf den gleichen Datentyp gebracht. bool b; int a = 10; b = a < 1.5; cout << b << endl; Ausgabe: 0 Tobias Wolf http://informatik.swoke.de Seite 5 von 6 Informatik Wintersemester Maschinenbau und Kunststofftechnik Logische Operatoren Logische Operatoren && || ! Tobias Wolf http://informatik.swoke.de Bedeutung Logisches UND (Konjunktion): liefert true, wenn beide Operanden true sind Logisches ODER (Disjunktion): liefert true, wenn mindestens einer der beiden Operanden true ist Logisches NICHT (Negation): liefert true, wenn der Operand false ist und liefert false, wenn der Operand true ist Seite 6 von 6 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 7 Verzweigungen/Bedingungen Tobias Wolf http://informatik.swoke.de Seite 1 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Verzweigungen - Verzweigungen werden eingesetzt, wenn eine Befehlsfolge nur unter bestimmten Bedingungen ausgeführt werden soll. - In C/C++ wird dies durch das Konstrukt if/else erreicht. - Sinngemäß bedeutet das if/else Konstrukt: Wenn die Bedingung zutrifft, mache das (Befehlszeilen im if-Block). Ansonsten mache etwas anderes (Befehlszeilen im else-Block). Tobias Wolf http://informatik.swoke.de Seite 2 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik if/else -Anweisung - Mit der if/else -Anweisung kann eine von zwei Anweisungen abhängig von einer Bedingung ausgewählt werden. if (x > 10) { cout << "x ist größer als zehn" << endl; } else { cout << "x ist kleiner oder gleich zehn" << endl; } Tobias Wolf http://informatik.swoke.de Seite 3 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik if/else -Anweisung - Nach dem Schlüsselwort if folgt ein logischer Ausdruck in Klammern. - Liefert der logische Ausdruck den Wert true (ungleich 0), dann wird die if -Anweisung ausgeführt. Im anderen Fall wird die else -Anweisung ausgeführt. Tobias Wolf http://informatik.swoke.de Seite 4 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik if/else -Anweisung - Wenn eine Anweisungsfolge nur aus einer Anweisung besteht, können die Blockklammern weggelassen werden. if (x > 10) cout << "x ist größer als zehn" << endl; else cout << "x ist kleiner oder gleich zehn" << endl; Tobias Wolf http://informatik.swoke.de Seite 5 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik if/else -Anweisung Tobias Wolf http://informatik.swoke.de Seite 6 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik if -Anweisung - Der else -Zweig kann auch entfallen. if (nenner == 0) cout << "Division durch Null!" << endl; Alternative Schreibweise: if (nenner == 0) cout << "Division durch Null!" << endl; Tobias Wolf http://informatik.swoke.de Seite 7 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik else/if -Anweisung - Mit der else/if -Anweisung können eine oder mehrere weitere Bedingungen eingebunden werden. if (x >= -1 && x <= 1) cout << "x liegt im Intervall [-1,1]" << endl; else if (x > 10) cout << "x ist größer als zehn" << endl; else if (x < 5) cout << "x ist kleiner als 5" << endl; else cout << "x hat den Wert:" << x << endl; Tobias Wolf http://informatik.swoke.de Seite 8 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik else/if -Anweisung Tobias Wolf http://informatik.swoke.de Seite 9 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik switch/case -Anweisung - Mit der switch/case –Anweisung ist es möglich, mehr als zwei Fälle zu unterscheiden. - Eine Folge von else/if –Anweisungen lässt sich auch durch eine switch/case –Anweisung realisieren. - Nach jedem case folgt ein konstanter Ausdruck. - Man kann einen sogenannten default-Fall einfügen, der abgearbeitet wird, wenn kein anderer Fall zutrifft. Tobias Wolf http://informatik.swoke.de Seite 10 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik switch/case -Anweisung cin >> zahl switch (zahl) { case 4: cout << "vier"; break; case 5: cout << "fuenf"; break; default: cout << "keine Zahl"; } Tobias Wolf http://informatik.swoke.de Seite 11 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik switch/case -Anweisung Tobias Wolf http://informatik.swoke.de Seite 12 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 8 Nassi-Shneiderman-Diagramm (Struktogramm) Tobias Wolf http://informatik.swoke.de Seite 1 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Nassi-Shneiderman-Diagramm - auch genannt: Struktogramm dient der strukturierten Programmierung reduziert das Gesamtproblem in mehrere Teilprobleme ist programmiersprachenunabhängig und kann als eine Art „Bauplan“ für das Programm verstanden werden - Jede Anweisung wird durch ein entsprechendes Symbol dargestellt. Tobias Wolf http://informatik.swoke.de Seite 2 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Einfache Anweisung - Zur Darstellung einer einzeiligen Anweisung, wie z.B. cout. Tobias Wolf http://informatik.swoke.de Seite 3 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Einfache Anweisung - Beispiel int zahl = 3; zahl = zahl % 2; cout << "Die Zahl lautet: " << zahl << endl; Tobias Wolf http://informatik.swoke.de Seite 4 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Bedingung if/else - Bei zutreffender Bedingung wird der "ja-Fall", ansonsten der "nein-Fall" abgearbeitet. Tobias Wolf http://informatik.swoke.de Seite 5 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Bedingung if/else - Beispiel if ( zahl == 4 ) // zu prüfende Bedingung { cout << "vier"; // Anweisungsblock 1 } else { cout << "nicht vier"; // Anweisungsblock 2 } Tobias Wolf http://informatik.swoke.de Seite 6 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Fallauswahl switch/case - Der Wert der Variablen wird geprüft und daraufhin der zugehörige Anweisungsblock abgearbeitet. - Es kann ein Alternativfall eingefügt werden, falls kein Wert zutrifft (sogenannter default-Fall). Tobias Wolf http://informatik.swoke.de Seite 7 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Fallauswahl switch/case - Beispiel switch (zahl) // Variable { case 3: // Wert cout << "drei"; // Anweisungsblock 1 break; case 4: cout << "vier"; // Anweisungsblock 2 break; default: // „sonst“-Fall cout << "falsche Zahl"; break; } Tobias Wolf http://informatik.swoke.de Seite 8 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kopfgesteuerte Schleife - Die Bedingung wird zuerst geprüft. Ist sie wahr, wird der Anweisungsblock abgearbeitet. Tobias Wolf http://informatik.swoke.de Seite 9 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kopfgesteuerte Schleife - Beispiel int zahl = 0; while (zahl < 10) { cout << zahl << endl; zahl++; } Tobias Wolf http://informatik.swoke.de // Bedingung // Anweisungsblock // Anweisungsblock Seite 10 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Fußgesteuerte Schleife - Der Anweisungsblock wird ohne Prüfung zunächst einmal abgearbeitet. Danach folgt die Prüfung, ob der Block ein weiteres Mal durchlaufen werden soll. Tobias Wolf http://informatik.swoke.de Seite 11 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Fußgesteuerte Schleife - Beispiel int zahl = 0; do { cout << zahl << endl; zahl++; } while (zahl < 10); Tobias Wolf http://informatik.swoke.de // Anweisungsblock // Anweisungsblock // Bedingung Seite 12 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Endlos-Schleife - Die Bedingung ist immer wahr. - Die Schleife kann deshalb nur durch ein break verlassen werden. Tobias Wolf http://informatik.swoke.de Seite 13 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Endlos-Schleife - Beispiel int zahl = 0; while (true) // Bedingung, die immer gültig ist { cout << zahl << endl; // Anweisungsblock zahl++; // Anweisungsblock } Tobias Wolf http://informatik.swoke.de Seite 14 von 14 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 9 Schleifen Tobias Wolf http://informatik.swoke.de Seite 1 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik Schleifen - Schleifen werden zur wiederholten Ausführung von Anweisungen verwendet. - Es werden drei Arten von Schleifen unterschieden: o for -Schleife o while -Schleife o do / while -Schleife Tobias Wolf http://informatik.swoke.de Seite 2 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik Schleifen - Die Anzahl der Schleifendurchläufe wird durch Bedingungen festgelegt. - Bei der for und der while -Schleife stehen die Bedingungen am Beginn der Schleife. - Bei der do / while -Schleife am Ende. Tobias Wolf http://informatik.swoke.de Seite 3 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik for -Schleife - Ist die Anzahl der Schleifendurchläufe im Voraus bekannt, wird die for -Schleife verwendet. - Die Elemente zur Kontrolle der Schleife werden im Schleifenkopf zusammengefasst. for ([Initialisierung]; [Abbruchbedingung]; [Reinitialisierung]) Anweisung; Tobias Wolf http://informatik.swoke.de Seite 4 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik for -Schleife - Die Initialisierung erfolgt nur einmal und wird als Erstes vorgenommen. - Die Abbruchbedingung wird zu Beginn jedes Schleifendurchlaufs bewertet. - Ist der Wert der Abbruchbedingung false, wird die Schleife beendet. - Ist der Wert true, wird die Anweisung (Schleifenkörper) ausgeführt und danach die Reinitialisierung durchgeführt. Tobias Wolf http://informatik.swoke.de Seite 5 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik for -Schleife int i; for (i = 1; i <= 5; i+=2) { cout << i << endl; } Ausgabe: 1 3 5 Tobias Wolf http://informatik.swoke.de Seite 6 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik for -Schleife Tobias Wolf http://informatik.swoke.de Seite 7 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik for -Schleife - Ist die Abbruchbedingung schon vor dem Eintritt in die Schleife false, wird der Schleifenkörper nicht durchlaufen. int i, j = 1; for (i = 1; j > 5; i++) cout << i << endl; Tobias Wolf http://informatik.swoke.de Seite 8 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik for -Schleife - Soll mehr als eine Anweisung zum Schleifenkörper gehören, muss ein Block verwendet werden. int i, j; for (i = 1, j = 5; i <= 5; i += 2, j -= 2) { cout << i << " "; cout << j << endl; } Ausgabe: 1 5 3 3 Tobias Wolf http://informatik.swoke.de 5 1 Seite 9 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik for -Schleife - Die Elemente zur Schleifenkontrolle im Schleifenkopf können auch weggelassen werden. - Bei folgendem Beispiel liegt eine Endlosschleife um eine leere Anweisung vor, da bei fehlender Abbruchbedingung true angenommen wird. for ( ; ; ) ; Tobias Wolf http://informatik.swoke.de Seite 10 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik for -Schleife - Bei folgendem Beispiel handelt es sich ebenfalls um eine Endlosschleife. - Die Abbruchbedingung ist immer true. int i; for (i = 1; i < 5; i--) cout << i << endl; Tobias Wolf http://informatik.swoke.de Seite 11 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik for -Schleife - Die Zählvariable kann auch innerhalb des Initialisierungsausdrucks definiert werden. for (int i = 1; i <= 10; i++) Tobias Wolf http://informatik.swoke.de Seite 12 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik while -Schleife - Die while –Schleife wird hauptsächlich verwendet, wenn die Abbruchbedingung erst innerhalb der Schleife festgelegt werden kann. - Es wird vor Eintritt in die Schleife geprüft, ob die Schleife durchlaufen wird. while (Ausdruck) Anweisung - Der Ausdruck kann ganzzahlig oder vom Typ bool sein. - Ist er ganzzahlig, entspricht 0 false und ungleich 0 true. Tobias Wolf http://informatik.swoke.de Seite 13 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik while -Schleife int i = 0; while (i < 5) cout << ++i; Ausgabe: 12345 Tobias Wolf http://informatik.swoke.de Seite 14 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik while -Schleife - Das zugehörige Struktogramm sieht wie folgt aus: Tobias Wolf http://informatik.swoke.de Seite 15 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik do/while -Schleife - Das Abbruchkriterium der do/while –Schleife steht am Ende. - Deshalb wird sie mindestens einmal durchlaufen. do Anweisung; while (Ausdruck); - Die Schleife wird durchlaufen, solange der Ausdruck den Wert true hat. - Im Gegensatz zur while –Schleife muss am Ende der while -Anweisung ein Semikolon stehen. Tobias Wolf http://informatik.swoke.de Seite 16 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik do/while -Schleife - In folgendem Beispiel wird die Benutzereingabe wiederholt, bis der eingegebene Wert im Intervall [5, 10] liegt. int i; do cin >> i; while (i < 5 || i > 10); Tobias Wolf http://informatik.swoke.de Seite 17 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik do/while -Schleife - Das zugehörige Struktogramm sieht wie folgt aus: Tobias Wolf http://informatik.swoke.de Seite 18 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik Geschachtelte Schleifen - Schleifen dürfen ineinander geschachtelt werden. for (int i=1; i<=2; i++) { for (int j=1; j<=2; j++) { cout << i << " " << j << endl; } } Tobias Wolf http://informatik.swoke.de Ausgabe: 1 1 1 2 2 1 2 2 Seite 19 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik Geschachtelte Schleifen - Das zugehörige Struktogramm sieht wie folgt aus: Tobias Wolf http://informatik.swoke.de Seite 20 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik break -Anweisung - Die break –Anweisung wird verwendet, um eine Schleife unmittelbar zu verlassen. - Bei verschachtelten Schleifen wird nur die aktuelle Schleife verlassen. Tobias Wolf http://informatik.swoke.de Seite 21 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik continue -Anweisung - Die continue –Anweisung wird verwendet, um in einer Schleife unmittelbar die nächste Wiederholung zu beginnen. - In while und do/while –Schleifen wird zur Schleifenbedingung gesprungen. - In for –Schleifen wird zur Reinitialisierung gesprungen. Tobias Wolf http://informatik.swoke.de Seite 22 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktion exit - Durch Aufruf der exit –Funktion kann ein Programm sofort abgebrochen werden. - Im Fehlerfall übergibt man einen Wert ungleich 0 und bei normaler Beendigung des Programms eine 0. if (i == 3) { cout << "Programm Ende" << endl; exit(0); } Tobias Wolf http://informatik.swoke.de Seite 23 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik Umformungen - Eine do/while –Schleife kann stets in eine while -Schleife umgeformt werden do/while: do { Anweisung; } while (Ausdruck); Tobias Wolf http://informatik.swoke.de while: Anweisung; while (Ausdruck) { Anweisung; } Seite 24 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik Umformungen - Eine for –Schleife kann stets in eine while -Schleife umgeformt werden for (Initialisierung; Abbruchbedingung; Reinitialisierung) Anweisung; Initialisierung; while (Abbruchbedingung) { Anweisung; Reinitialisierung; } Tobias Wolf http://informatik.swoke.de Seite 25 von 25 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 10 Felder / Arrays Tobias Wolf http://informatik.swoke.de Seite 1 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Felder - Bisher wurden nur Variablen verwendet, die einen einzelnen Wert aufnehmen können. - Diese Variablen werden auch Skalare genannt. - Aus einer Menge von Skalaren gleichen Datentyps kann man ein Feld (array) bilden. - Die einzelnen Skalare werden dann durch Indizes unterschieden. Tobias Wolf http://informatik.swoke.de Seite 2 von 21 Wintersemester Maschinenbau und Kunststofftechnik Informatik Felder - In der Mathematik werden Felder z.B. für die Darstellung von Vektoren und Matrizen verwendet. v = ( v1 , v 2 ,..., v n ) a11 a A = 21 ... a m1 a12 a 22 ... am2 a1 n a2n ... ... ... a mn ... ... - Vektoren sind eindimensionale und Matrizen zweidimensionale Felder. Tobias Wolf http://informatik.swoke.de Seite 3 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition von Feldern - Jedes Feldelement hat den gleichen Datentyp. Er steht vor dem Feldnamen. - Hinter dem Feldnamen steht die Angabe zur Dimensionierung. - Für jede Dimension wird die Dimensionierung in ein Paar eckige Klammern gesetzt. - Sie gibt die Anzahl der Feldelemente an, die abgespeichert werden können. - Es handelt sich um einen ganzzahligen konstanten Ausdruck. - Der Index einer Dimensionierung beginnt immer mit 0; Tobias Wolf http://informatik.swoke.de Seite 4 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eindimensionale Felder - In folgendem Beispiel wird ein eindimensionales Feld mit dem Namen zahlen definiert. - Das Feld hat 20 Elemente. - Alle Elemente sind vom Datentyp int. - Die Indizes liegen im Bereich von 0 bis 19. int zahlen[20]; Tobias Wolf http://informatik.swoke.de Seite 5 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eindimensionale Felder - In folgendem Beispiel wird ein eindimensionales Feld mit dem Namen werte definiert. - Das Feld hat 10 Elemente. - Alle Elemente sind vom Datentyp double. - Die Indizes liegen im Bereich von 0 bis 9. const int MAXINDEX = 9; double werte[MAXINDEX+1]; Tobias Wolf http://informatik.swoke.de Seite 6 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eindimensionale Felder - Der Zugriff auf die einzelnen Feldelemente erfolgt unter Verwendung des Indexoperators []. - Der Index muss stets innerhalb des definierten Wertebereiches liegen. - Wird der Wertebereich verlassen, können schwerwiegende Fehler auftreten. - Die Zuweisung eines Feldes an ein anderes ist nicht möglich. zahlen[0], zahlen[1], …, zahlen[19] werte[0], werte[1], …, werte[19] Tobias Wolf http://informatik.swoke.de Seite 7 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eindimensionale Felder - In folgendem Beispiel wird ein eindimensionales Feld mit 10 Elementen definiert. - Die einzelnen Elemente werden mit den Werten 0, 1, …, 9 beschrieben. const int ANZAHL = 10; double feld[ANZAHL]; for (int i=0; i < ANZAHL; i++) feld[i] = i; Tobias Wolf http://informatik.swoke.de Seite 8 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Initialisierung von eindimensionalen Feldern - Felder können bei deren Definition initialisiert (also mit einem Startwert belegt) werden. - Hierzu wird ein Wert für jedes einzelne Feldelement angegeben. double feld[5] = {0, 2, 4, 6, 8}; Tobias Wolf http://informatik.swoke.de Seite 9 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Initialisierung von eindimensionalen Feldern - Wird die Initialisierung am Anfang nicht durchgeführt, kann auf die einzelnen Feldelemente erst zugegriffen werden, sobald diese mit Werten gefüllt wurden. - Ein double feld[5]; cout << feld[0]; führt zum Absturz des Programms, da in dem feld[0] noch kein Wert gespeichert wurde. Tobias Wolf http://informatik.swoke.de Seite 10 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Initialisierung von eindimensionalen Feldern - Es ist immer ratsam, ein Feld zu initialisieren. - Eine Teilinitialisierung ist möglich. Die restlichen, nicht angegebenen Felder, werden mit 0 initialisiert: double feld[5] = {0, 2, 4}; - Leere geschweifte Klammern bewirken eine Initialisierung aller Feldelemente mit 0: double feld[5] = {}; Tobias Wolf http://informatik.swoke.de Seite 11 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Initialisierung von eindimensionalen Feldern - Ein double feld[5] = {}; cout << feld[0]; funktioniert demnach und liefert als Ausgabe: 0.0 Tobias Wolf http://informatik.swoke.de Seite 12 von 21 Wintersemester Maschinenbau und Kunststofftechnik Informatik Kopieren von eindimensionalen Feldern - Die Zuweisung eines Feldes an ein anderes ist nicht möglich. double feldA[5] = {}; double feldB[5] = {1, 2, 3, 4, 5}; feldA = feldB Tobias Wolf http://informatik.swoke.de // Fehler !!! Seite 13 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kopieren von eindimensionalen Feldern - Man muss die einzelnen Elemente nacheinander kopieren. double feldA[5] = {}; double feldB[5] = {1, 2, 3, 4, 5}; for (int i=0; i<5; i++) feldA[i] = feldB[i]; Tobias Wolf http://informatik.swoke.de Seite 14 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Operator sizeof - Der Operator sizeof ermittelt die Größe des übergebenen Datentyps oder des übergebenen Objektes in Bytes. - sizeof(feld) liefert 40. Das Feld im vorherigen Beispiel hat 5 Elemente mit jeweils 8 Bytes. - sizeof(int) liefert 4. Tobias Wolf http://informatik.swoke.de Seite 15 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eindimensionales Feld - Beispiel - In folgendem Beispiel wird der Benutzer zur Eingabe von maximal 10 Zahlen aufgefordert. - Die Eingabe wird mit der Eingabe eines Buchstabens beendet. - Danach werden die Zahlen sortiert und ausgegeben. - Siehe Beispiel 10 – Programm zu eindimensionalen Feldern (auf der Webseite zu finden). Tobias Wolf http://informatik.swoke.de Seite 16 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Mehrdimensionale Felder - Felder können mit bis zu 256 Dimensionen definiert werden. - Die am häufigsten verwendeten mehrdimensionalen Felder sind zweidimensionale Felder. - Für jede Dimension muss die Anzahl der Elemente angegeben werden. int matrix[3][3]; Tobias Wolf http://informatik.swoke.de Seite 17 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Initialisierung von mehrdimensionalen Feldern - Es ist auch möglich, mehrdimensionale Felder zu initialisieren. int matrix[3][3] = {0, 2, 4, 1, 3, 5, 7, 8, 9}; Bedeutung: Tobias Wolf http://informatik.swoke.de 0 2 4 matrix = 1 3 5 7 8 9 Seite 18 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Initialisierung von mehrdimensionalen Feldern - Durch zusätzlich gesetzte Klammern kann die Zuordnungsreihenfolge verdeutlicht oder geändert werden. int matrix[3][3] = {{0, 2, 4}, {5}, {7, 8, 9}}; Bedeutung: Tobias Wolf http://informatik.swoke.de 0 2 4 matrix = 5 0 0 7 8 9 Seite 19 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kopieren von mehrdimensionalen Feldern - Das Kopieren von mehrdimensionalen Feldern funktioniert analog zu der Methode bei eindimensionalen Feldern. double matrixA[3][3] = {}; double matrixB[3][3] = {1, 2, 3, 4}; for (int i=0; i<3; i++) for (int j=0; j<3; j++) matrixA[i][j] = matrixB[i][j]; Tobias Wolf http://informatik.swoke.de Seite 20 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Mehrdimensionale Felder - Beispiel - In folgendem Beispiel werden eine 3x3-Matrix und ein Vektor mit 3 Elementen definiert. - Es wird der Vektor in die zweite Zeile der Matrix kopiert und die Matrix dann auf den Bildschirm ausgegeben. - Siehe Beispiel 11 – Programm zu mehrdimensionalen Feldern (auf der Webseite zu finden). Tobias Wolf http://informatik.swoke.de Seite 21 von 21 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 11 Zeichenverarbeitung Tobias Wolf http://informatik.swoke.de Seite 1 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zeichenverarbeitung - Jedem Zeichen ist ein Zahlencode zugeordnet. - Dadurch wird ermöglicht, zwischen verschiedenen Systemen Texte auszutauschen. - Es werden Zahlen, Buchstaben, Steuerzeichen, Sonderzeichen, etc in eine Zahl codiert. Tobias Wolf http://informatik.swoke.de Seite 2 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zeichenverarbeitung - Im Computer weit verbreitet ist der ASCII-Code. (American Standard Code for Information Interchange – amerikanischer Standardcode für Informationsaustausch) - ASCII-Code besteht aus 7-Bit Jedes Zeichen wird durch einen 7-Bit Zahlencode repräsentiert. - Dadurch können aber nicht alle verfügbaren Zeichen abgedeckt werden, weshalb man neue Code-Tabellen entwickelte. Tobias Wolf http://informatik.swoke.de Seite 3 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zeichenverarbeitung - Die ASCII-Code-Tabelle umfasst das "einfache" Alphabet (!, ", #, $, ..., 0, 1, 2, 3, ..., A, B, C, D, ..., a, b, c, d, ..., {, |, }) und Steuerungscodes, die z.B. für die Druckersteuerung benötigt werden - insgesamt sind das 128 Zeichen. - Nicht berücksichtigt sind darin Sonderzeichen - also deutsche Umlaute, das "ß" und andere nationale Sonderzeichen. - Diese sind erst im erweiterten ASCII-Code enthalten. (128 – 255) Tobias Wolf http://informatik.swoke.de Seite 4 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zeichenverarbeitung - Eine andere Zeichencode-Tabelle ist: ANSI-Code - Der ANSI-Code ist ein 8-Bit Zeichensatz. - In der Windows Konsole, die unsere C-Programme ausführt, gilt der ANSI-Code. - Weiteres Beispiel für eine Zeichencode-Tabelle ist: Unicode Durch Unicode (8-Bit, 16-Bit) wird momentan die umfassendste Code-Tabelle repräsentiert. Tobias Wolf http://informatik.swoke.de Seite 5 von 11 Informatik dez hex ASCII ANSI ----------------------------------0 00 NUL NUL 1 01 SOH SOH 2 02 STX STX 3 03 ETX ETX 4 04 EOT EOT 5 05 ENQ ENQ 6 06 ACK ACK 7 07 BEL BEL 8 08 BS BS 9 09 HT HT 10 0A LF LF 11 0B VT VT 12 0C FF FF 13 0D CR CR 14 0E SO SO 15 0F SI SI 16 10 DLE DLE 17 11 DC1 DC1 18 12 DC2 DC2 19 13 DC3 DC3 20 14 DC4 DC4 Tobias Wolf http://informatik.swoke.de dez hex ASCII ANSI ----------------------------------21 15 NAK NAK 22 16 SYN SYN 23 17 ETB ETB 24 18 CAN CAN 25 19 EM EM 26 1A SUB SUB 27 1B ESC ESC 28 1C FS FS 29 1D GS GS 30 1E RS RS 31 1F US US 32 20 spc spc 33 21 ! ! 34 22 " " 35 23 # # 36 24 $ $ 37 25 % % 38 26 & & 39 27 ' ' 40 28 ( ( 41 29 ) ) Wintersemester Maschinenbau und Kunststofftechnik dez hex ASCII ANSI ----------------------------------42 2A * * 43 2B + + 44 2C , , 45 2D 46 2E . . 47 2F / / 48 30 0 0 49 31 1 1 50 32 2 2 51 33 3 3 52 34 4 4 53 35 5 5 54 36 6 6 55 37 7 7 56 38 8 8 57 39 9 9 58 3A : : 59 3B ; ; 60 3C < < 61 3D = = 62 3E > > Seite 6 von 11 Informatik dez hex ASCII ANSI ----------------------------------63 3F ? ? 64 40 @ @ 65 41 A A 66 42 B B 67 43 C C 68 44 D D 69 45 E E 70 46 F F 71 47 G G 72 48 H H 73 49 I I 74 4A J J 75 4B K K 76 4C L L 77 4D M M 78 4E N N 79 4F O O 80 50 P P 81 51 Q Q 82 52 R R 83 53 S S Tobias Wolf http://informatik.swoke.de dez hex ASCII ANSI ----------------------------------84 54 T T 85 55 U U 86 56 V V 87 57 W W 88 58 X X 89 59 Y Y 90 5A Z Z 91 5B [ [ 92 5C \ \ 93 5D ] ] 94 5E ^ ^ 95 5F _ _ 96 60 ` ` 97 61 a a 98 62 b b 99 63 c c 100 64 d d 101 65 e e 102 66 f f 103 67 g g 104 68 h h Wintersemester Maschinenbau und Kunststofftechnik dez hex ASCII ANSI ----------------------------------105 69 i i 106 6A j j 107 6B k k 108 6C l l 109 6D m m 110 6E n n 111 6F o o 112 70 p p 113 71 q q 114 72 r r 115 73 s s 116 74 t t 117 75 u u 118 76 v v 119 77 w w 120 78 x x 121 79 y y 122 7A z z 123 7B { { 124 7C | | 125 7D } } Seite 7 von 11 Informatik dez hex ASCII ANSI ----------------------------------126 7E ~ ~ 127 7F DEL DEL 128 80 à P 129 81 ü ü 130 82 ‚ é 131 83 ƒ â 132 84 „ ä 133 85 … à 134 86 † å 135 87 ‡ ç 136 88 ˆ ê 137 89 ‰ ë 138 8A Š è 139 8B ‹ ï 140 8C Œ î 141 8D ì 142 8E Ž Ä 143 8F Å 144 90 É 145 91 ‘ æ 146 92 ’ Æ Tobias Wolf http://informatik.swoke.de dez hex ASCII ANSI ----------------------------------147 93 “ ô 148 94 ” ö 149 95 • ò 150 96 – û 151 97 — ù 152 98 ˜ ÿ 153 99 ™ Ö 154 9A š Ü 155 9B › ø 156 9C œ £ 157 9D Ø 158 9E ž × 159 9F Ÿ ƒ 160 A0 á 161 A1 ¡ í 162 A2 ¢ ó 163 A3 £ ú 164 A4 ¤ ñ 165 A5 ¥ Ñ 166 A6 ¦ ª 167 A7 § º Wintersemester Maschinenbau und Kunststofftechnik dez hex ASCII ANSI ----------------------------------168 A8 ¨ ¿ 169 A9 © ® 170 AA ª ¬ 171 AB « ½ 172 AC ¬ ¼ 173 AD ¡ 174 AE ® « 175 AF ¯ » 176 B0 ° ¦ 177 B1 ± ¦ 178 B2 ² ¦ 179 B3 ³ ¦ 180 B4 ´ ¦ 181 B5 µ Á 182 B6 ¶  183 B7 · À 184 B8 ¸ © 185 B9 ¹ ¦ 186 BA º ¦ 187 BB » + 188 BC ¼ + Seite 8 von 11 Informatik dez hex ASCII ANSI ----------------------------------189 BD ½ ¢ 190 BE ¾ ¥ 191 BF ¿ + 192 C0 À + 193 C1 Á 194 C2  195 C3 à + 196 C4 Ä 197 C5 Å + 198 C6 Æ ã 199 C7 Ç Ã 200 C8 È + 201 C9 É + 202 CA Ê 203 CB Ë 204 CC Ì ¦ 205 CD Í 206 CE Î + 207 CF Ï ¤ 208 D0 Ð ð 209 D1 Ñ Ð Tobias Wolf http://informatik.swoke.de dez hex ASCII ANSI ----------------------------------210 D2 Ò Ê 211 D3 Ó Ë 212 D4 Ô È 213 D5 Õ i 214 D6 Ö Í 215 D7 × Î 216 D8 Ø Ï 217 D9 Ù + 218 DA Ú + 219 DB Û ¦ 220 DC Ü _ 221 DD Ý ¦ 222 DE Þ Ì 223 DF ß ¯ 224 E0 à Ó 225 E1 á ß 226 E2 â Ô 227 E3 ã Ò 228 E4 ä õ 229 E5 å Õ 230 E6 æ µ Wintersemester Maschinenbau und Kunststofftechnik dez hex ASCII ANSI ----------------------------------231 E7 ç þ 232 E8 è Þ 233 E9 é Ú 234 EA ê Û 235 EB ë Ù 236 EC ì ý 237 ED í Ý 238 EE î ¯ 239 EF ï ´ 240 F0 ð 241 F1 ñ ± 242 F2 ò = 243 F3 ó ¾ 244 F4 ô ¶ 245 F5 õ § 246 F6 ö ÷ 247 F7 ÷ ¸ 248 F8 ø ° 249 F9 ù ¨ 250 FA ú · 251 FB û ¹ Seite 9 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik dez hex ASCII ANSI ----------------------------------252 FC ü ³ 253 FD ý ² 254 FE þ ¦ 255 FF ÿ Tobias Wolf http://informatik.swoke.de Seite 10 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zeichen-Konstanten - Zeichen-Konstanten werden in Hochkommata eingeschlossen. Konstante 'Z' '\x31' '\n' Bedeutung Zeichen Z '1' Zeilenvorschub cout << '\x43' << '\x48' << '\x41' << '\x52' << endl; CHAR Tobias Wolf http://informatik.swoke.de Seite 11 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 12 Strings Tobias Wolf http://informatik.swoke.de Seite 1 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstante Zeichenfolgen - Zeichenfolgen, die in char-Arrays abgelegt werden, werden CString genannt. - Dies ist in der Programmiersprache C die einzige Möglichkeit Zeichenfolgen abzulegen. - C-String Konstanten bestehen aus einer Folge von Zeichen, die in Anführungszeichen eingeschlossen sind. - Im Speicher wird der C-String mit einem String-Ende Zeichen ('\0') am Ende abgespeichert. - Man beachte den Unterschied zwischen z.B. 'Z' und "Z". - 'Z' entspricht also einem Zeichen und "Z" zwei Zeichen. Tobias Wolf http://informatik.swoke.de Seite 2 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Die Klasse 'string' - Statt der C-Strings beinhaltet die C++ Standardbibliothek eine Klasse namens string. - Sie bietet erhebliche Vorteile gegenüber der Verwendung der C-Strings. - Zur Verwendung der Klasse string muss die Header-Datei string eingebunden werden. #include <string> Tobias Wolf http://informatik.swoke.de Seite 3 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition eines string Objekts - Im folgenden Beispiel wird das string Objekt text definiert und initialisiert. - Die Zeichenfolge nach dem Zuweisungsoperator ist eine C-String Konstante. string text = "Ich bin ein string Beispiel.\n"; Tobias Wolf http://informatik.swoke.de Seite 4 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition von string Feldern - Es können auch string Felder (Arrays) definiert werden. string tage[] = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" "Sonntag"}; cout << tage[0] << endl; Montag Tobias Wolf http://informatik.swoke.de Seite 5 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zuweisung von string Objekten - Ein string Objekt kann einem anderen zugewiesen werden. string text; string tage[] = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" "Sonntag"}; text = tage[2]; cout << text << endl; Mittwoch Tobias Wolf http://informatik.swoke.de Seite 6 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eingabe von string Objekten - Bei der Eingabe unterscheidet man die Eingabe eines Wortes ohne Leerzeichen und die Eingabe einer Zeile mit Leerzeichen. Tobias Wolf http://informatik.swoke.de Seite 7 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eingabe von string Objekten - Wort - Im folgenden Beispiel wird das zweite Wort Maier wegen des Leerzeichens nicht übergeben. string name; cin >> name; cout << name << endl; Eingabe: Otto Maier Ausgabe: Otto Tobias Wolf http://informatik.swoke.de Seite 8 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eingabe von string Objekten - Zeile - Zum Einlesen einer ganzen Zeile verwendet man die Funktion getline(). getline(cin, name); cout << name << endl; Eingabe: Otto Maier Ausgabe: Otto Maier Tobias Wolf http://informatik.swoke.de Seite 9 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Strings zusammensetzen - Die Operatoren + und += sind auf string Objekte anwendbar. string text1 = "Ich "; text1 = text1 + "bin "; text1 += "ein Beispiel!"; cout << text1 << endl; Ausgabe: Tobias Wolf http://informatik.swoke.de Ich bin ein Beispiel! Seite 10 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Strings zusammensetzen - Das direkte Zusammensetzen zweier String-Konstanten ist hingegen nicht möglich. text = "Ich " + "bin"; Tobias Wolf http://informatik.swoke.de Seite 11 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Strings vergleichen - Die Vergleichsoperatoren sind auf string Objekte anwendbar. - Es erfolgt ein lexikalischer Vergleich. string a = "Maier", b = "Mayer"; if (a < b) cout << "Maier < Mayer" << endl; Tobias Wolf http://informatik.swoke.de Seite 12 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zugriff auf einzelne Zeichen - Mit dem Indexoperator [] kann auf einzelne Zeichen eines Strings zugegriffen werden. string a = "Maier"; cout << a[0] << a[4] << endl; Ausgabe: Tobias Wolf http://informatik.swoke.de Mr Seite 13 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Länge eines Strings - Mit der Funktion size() kann die Länge eines Strings ermittelt werden. - Die Länge eines Strings entspricht der Anzahl der Zeichen des Stings. string text = "Ich bin ein string Beispiel!"; cout << text.size() << endl; Ausgabe: 28 Tobias Wolf http://informatik.swoke.de Seite 14 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Beispiel string text = "Ich bin ein string Beispiel!"; int eCount = 0; for (int i=0; i< (int)text.size(); i++) { if (text[i] == 'e') { eCount++; } } cout << eCount << endl; 3 Tobias Wolf http://informatik.swoke.de Seite 15 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Groß- und Kleinschreibung - Mit der Funktion toupper() kann ein Kleinbuchstabe in einen Großbuchstaben umgewandelt werden. - Mit der Funktion tolower() kann ein Großbuchstabe in einen Kleinbuchstaben umgewandelt werden. string s1 = "abc", s2 = "XYZ"; s1[0] = tolower(s2[0]); s2[1] = toupper(s1[1]); cout << s1 << endl << s2 << endl; Ausgabe: xbc XBZ Tobias Wolf http://informatik.swoke.de Seite 16 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Weitere string Funktionen compare find erase c_str Tobias Wolf http://informatik.swoke.de Mit der Funktion compare() können Strings verglichen werden. Mit der Funktion find() kann ein String in einem anderen String gesucht werden. find() gibt die Position des ersten Auftretens des Strings zurück. Mit der Funktion erase() kann ein Teilstring eines Strings entfernt werden. Zur Konvertierung eines string Objekts in einen CString wird die Funktion c_str() verwendet Seite 17 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vergleich von Strings - compare() liefert 0 als Rückgabewert, wenn die Zeichenketten gleich sind. - compare() liefert einen negativen Wert, wenn s1 kleiner als s2 ist und einen positiven Wert, wenn s1 größer als s2 ist. string s1 = "efg"; string s2 = "abc"; int r = s1.compare(s2); Tobias Wolf http://informatik.swoke.de Seite 18 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vergleich von Strings - Beispiel mit Rückgabewert 0: string s; cin >> s; if (s.compare("Ja") == 0) { cout << "Ja eingegeben!" << endl; } Tobias Wolf http://informatik.swoke.de Seite 19 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vergleich von Strings - Beispiel mit Rückgabewert ungleich 0: string s1, s2; cin >> s1 >> s2; if (s1.compare(s2) == 0) cout << "s1 ist gleich s2" << endl; else if (s1.compare(s2) < 0) cout << "s1 ist kleiner als s2" << endl; else if (s1.compare(s2) > 0) cout << "s1 ist größer als s2" << endl; Tobias Wolf http://informatik.swoke.de Seite 20 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vergleich von Strings - Die Funktion compare() bietet noch weitere Möglichkeiten: string s = "Kennzeichen: DA-FH 1000"; if (s.compare(13,2,"DA") == 0) { cout << "Darmstadt" << endl; } - Im String s werden nach dem 13. Zeichen 2 Zeichen mit „DA“ verglichen. Tobias Wolf http://informatik.swoke.de Seite 21 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Suchen in Strings - Mit der Funktion find() kann ein String in einem anderen String gesucht werden. find() gibt die Position des ersten Auftretens des Strings zurück. Bei Nichtauftreten wird der Wert string::npos zurückgegeben. string::npos steht für den Wert -1. string zeile; getline(cin, zeile); if (zeile.find("Autor") != string::npos) { cout << "Autor enthalten" << endl; } Tobias Wolf http://informatik.swoke.de Seite 22 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Entfernen von Teilstrings - Mit der Funktion erase() kann ein Teilstring entfernt werden. string s1 = "ABCDEFGHIJ"; s1.erase(2,6); cout << s1 << endl; cout << "Restzeichen: " << s1.size() << endl; ABIJ Restzeichen: 4 - In s1 werden ab Position 2 insgesamt 6 Zeichen gelöscht. Tobias Wolf http://informatik.swoke.de Seite 23 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konvertierung in C-String - Zur Konvertierung in einen C-String (= char-Array) kann die Methode c_str() verwendet werden. char cs[20] = "C-String"; string s = "String-Objekt"; strcpy(cs, s.c_str()); cout << cs << endl; - Die C-Funktion strcpy erwartet als 2. Parameter ein const char * Element. Tobias Wolf http://informatik.swoke.de Seite 24 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Lesen von Strings - Deklariert man eine Variable vom Typ istringstream, so hat man einen Stream Objekt mit dem man von einem String lesen kann. - Um istringstream benutzen zu können, muss ein "#include <sstream>" erfolgen. - Im folgenden Beispiel wird die Schreibweise eines Namens durch Vertauschung des Vor- und Nachnamens innerhalb eines Strings verändert. - Hierzu wird der String elementweise ausgelesen. Tobias Wolf http://informatik.swoke.de Seite 25 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Lesen von Strings istringstream iss; string zeile = "Wilhelm Maier 674529"; string vorname, nachname; int ident; iss.str(zeile); iss >> vorname; iss >> nachname; iss >> ident; iss.clear(); cout << "Name: " << nachname << ", " << vorname << " Identnr.: " << ident << endl; Tobias Wolf http://informatik.swoke.de Seite 26 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Lesen von Strings - Wenn iss zum zweiten Mal ein String zugewiesen werden soll, muss zunächst die Funktion clear() aufgerufen werden. - Das Lesen von einem String kann auch zur Datentypumwandlung von einem String in eine arithmetische Größe verwendet werden. Tobias Wolf http://informatik.swoke.de Seite 27 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Schreiben in Strings - Mit dem Stream ostringstream kann in einen String geschrieben werden. - Im folgenden Beispiel werden zwei Zahlenwerte kombiniert und mit Text in einen String geschrieben. Tobias Wolf http://informatik.swoke.de Seite 28 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Schreiben in Strings ostringstream oss; string zeile; int i = 100, j = 200; oss << "i = " << setw(3) << i << " j = " << setw(3) << j; zeile = oss.str(); cout << zeile << endl; oss.str(""); // vor der Wiederverwendung leeren oss << "i + j = " << setw(3) << i + j; zeile = oss.str(); cout << zeile << endl; Tobias Wolf http://informatik.swoke.de Seite 29 von 29 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 13 Funktionen Tobias Wolf http://informatik.swoke.de Seite 1 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktionen - Eine Funktion ist die Zusammenfassung von mehreren Anweisungen unter einem bestimmten Namen. - Funktionen verwendet man, um mehrfach benötigte Anweisungsfolgen nur einmal niederzuschreiben und von unterschiedlichen Stellen aufzurufen. - Mit Funktionen kann ein großes Programm in viele kleine Teile (Unterprogramme) aufgeteilt werden. Tobias Wolf http://informatik.swoke.de Seite 2 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktionsdefinition - Eine Funktion besitzt einen Namen und einen Datentyp. - Eine Funktion kann einen Wert zurückgeben. - Der Datentyp der Funktion entspricht dem Datentyp des Rückgabewertes. Tobias Wolf http://informatik.swoke.de Seite 3 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktionsdefinition Typ Funktionsname(Parameter) { [Definition lokaler Variablen] [Anweisungen] [return [Ausdruck];] } Typ: Datentyp des Rückgabewertes Funktionsname: Name der Funktion Parameter: Liste der übergebenen Parameter Tobias Wolf http://informatik.swoke.de Seite 4 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktionsdefinition - Nach dem Funktionsnamen steht eine Liste von Parametern. - Über diese Parameter werden Werte mit der Funktion ausgetauscht. - Jeder dort angegebene Parameter besteht aus einem Variablennamen und dem entsprechenden Datentyp. - Will man mehrere Parameter übergeben, werden diese durch Komma getrennt. double Berechnung(int zahl, double radius) Tobias Wolf http://informatik.swoke.de Seite 5 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik return -Anweisung - Wird bei der Programmausführung auf eine return –Anweisung oder auf das Ende des Funktionsblocks getroffen, so wird in die aufrufende Funktion zurückgesprungen. - Wenn die Funktion nicht vom Typ void ist, wird mit der return –Anweisung ein Wert zurückgegeben. return [Ausdruck]; Tobias Wolf http://informatik.swoke.de Seite 6 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik return -Anweisung - Der Wert des Ausdrucks entspricht dem Rückgabewert. - Der Ausdruck wird meist eingeklammert. - Der Typ der Funktion muss normalerweise dem Typ des Ausdrucks entsprechen. - Stimmt der Typ der Funktion nicht mit dem Typ des Ausdrucks überein, wird in den Typ der Funktion umgewandelt, falls dies möglich ist. Tobias Wolf http://informatik.swoke.de Seite 7 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Datentyp void - Der Datentyp void wird für Ausdrücke benötigt, die keinen Wert darstellen. - Eine Funktion fname, die keinen Wert zurückgibt und der kein Wert übergeben wird, wird wie folgt deklariert: void fname(void); Oder auch: void fname(); Tobias Wolf http://informatik.swoke.de Seite 8 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktionsdeklaration - Bevor man eine Funktion aufrufen kann, muss sie vorher definiert und eventuell deklariert sein. - Eine Funktionsdeklaration sieht wie folgt aus: Typ Funktionsname(Parameter); - Man beachte das Semikolon am Ende der Zeile. - Man nennt die Deklaration einer Funktion auch Funktionsprototyp. Tobias Wolf http://informatik.swoke.de Seite 9 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktionsdeklaration - Wenn an eine Funktion Parameter übergeben werden, so müssen bei der Deklaration der Funktion mindestens die Datentypen der Parameter angegeben sein. - Die Parameternamen bei der Deklaration und der Definition einer Funktion müssen nicht zwangsweise übereinstimmen. - Die Reihenfolge und Anzahl der Datentypen der Parameter bei der Funktionsdeklaration und Funktionsdefinition muss übereinstimmen. Tobias Wolf http://informatik.swoke.de Seite 10 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Deklaration von Funktionen - Wenn der Quellcode auf mehrere Dateien verteilt ist, müssen die Schnittstellen von Funktionen und Klassen, die von jeweils anderen Teilen aus benutzt werden, öffentlich bekannt gegeben werden. // Funktionsdeklaration Fehlerausgabe void FehlerAusgabe(void); Tobias Wolf http://informatik.swoke.de Seite 11 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Deklaration von Funktionen - Die Deklarationen werden sehr häufig in Header-Dateien abgelegt. Definitionsdatei Deklarationsdatei (Header-Datei) Tobias Wolf http://informatik.swoke.de Test.cpp Test.h Seite 12 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition von Funktionen - Die Definition von Funktionen wird später noch ausführlich beschrieben. - In der Definition einer Funktion stehen die Anweisungen der Funktion. // Funktionsdefinition Fehlerausgabe void FehlerAusgabe(void) { cout << "Es ist ein Fehler aufgetreten!" << endl; } Tobias Wolf http://informatik.swoke.de Seite 13 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktionsaufruf - Zum Aufruf einer Funktion schreibt man an die Aufrufstelle den Funktionsnamen gefolgt von der eingeklammerten Parameterliste und einem abschließenden Semikolon. Funktionsname(Parameter); - Die Parameter beim Aufruf einer Funktion werden auch Aktualparameter genannt. Tobias Wolf http://informatik.swoke.de Seite 14 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktionsparameter - Es werden zwei Arten der Übergabe von Parametern unterschieden: call-by-value call-by-reference Tobias Wolf http://informatik.swoke.de Seite 15 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik call-by-value - Der Parameter, der übergeben werden soll, wird kopiert und die Kopie wird an die Funktion weitergereicht. - Der Parameter kann ein Ausdruck, eine Konstante oder eine Variable sein. - Der Wert des ursprünglichen Parameters bleibt hierbei unverändert. - Diese Art der Parameterübergabe sollte man auf Parameter beschränken, die nicht viel Speicher (z.B. einfache Datentypen) benötigen. Tobias Wolf http://informatik.swoke.de Seite 16 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik call-by-reference - Die aufgerufene Funktion arbeitet statt mit einer Kopie des Parameters mit dem Original. - Hierzu wird eine Referenz auf den Parameter übergeben. - Ändert sich der Wert des Parameters nun innerhalb der Funktion, so ändert er sich automatisch auch im aufrufenden Programm Tobias Wolf http://informatik.swoke.de Seite 17 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik call-by-reference - Der zu übergebene Parameter muss eine Variable sein. - Um einen Parameter als Referenz zu kennzeichnen, wird bei der Deklaration und der Definition der Funktion nach dem Datentyp des Parameters der Operator & angefügt. Typ Funktionsname(Typ &Parametername); Tobias Wolf http://informatik.swoke.de Seite 18 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Eindimensionale Arrays als Parameter - Um ein eindimensionales Array an eine Funktion zu übergeben, wird nur dessen Anfangsadresse übergeben. (Ein Array wird daher immer als call-by-reference übergeben.) - Eine Funktion, die ein Array übergeben bekommt, kennt nur diese Anfangsadresse. - Die Länge des Feldes ist nicht implizit bekannt und muss mit übergeben werden. Tobias Wolf http://informatik.swoke.de Seite 19 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Mehrdimensionale Arrays als Parameter - Die Größe des übergebenen Arrays muss, bei der Definition bzw. Deklaration einer Funktion mit einem mehrdimensionalen Array als Parameter, angegeben werden. - Der Compiler ist damit in der Lage, innerhalb der Funktion die Position der einzelnen Arrayelemente korrekt zu berechnen. Tobias Wolf http://informatik.swoke.de Seite 20 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 14 Variablen, typedef, enum Tobias Wolf http://informatik.swoke.de Seite 1 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Gültigkeitsbereiche von Variablen - Jede Variable hat einen Gültigkeitsbereich. - Innerhalb dieses Gültigkeitsbereichs kann auf die Variable zugegriffen werden. - Es werden folgende Arten von Variablen unterschieden: globale Variablen funktionslokale Variablen blocklokale Variablen Tobias Wolf http://informatik.swoke.de Seite 2 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Globale Variablen - Globale Variablen sind an einer beliebigen Stelle innerhalb einer Datei, aber außerhalb eines Blocks {} definiert. - Sie sind ab der Stelle in der Datei gültig, an der sie definiert sind. - Globale Variablen werden automatisch beim Programmstart mit 0 initialisiert. - Ihr Gültigkeitsbereich endet am Dateiende. Tobias Wolf http://informatik.swoke.de Seite 3 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Funktionslokale Variablen - Funktionslokale Variablen sind an einer beliebigen Stelle innerhalb einer Funktion definiert. - Ihr Gültigkeitsbereich ist auf die Funktion beschränkt, in der sie definiert sind. - Sie werden nicht automatisch initialisiert. Ihre Namen können in unterschiedlichen Funktionen gleich sein. - Ist der Name einer funktionslokalen Variable gleich dem einer globalen Variable, so überdeckt die funktionslokale Variable die globale Variable. Tobias Wolf http://informatik.swoke.de Seite 4 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Blocklokale Variablen - Blocklokale Variablen sind innerhalb eines Blocks innerhalb des Funktionsblocks definiert. - Sie haben die gleichen Eigenschaften, wie funktionslokale Variablen, allerdings auf ihren Block beschränkt. - Blocklokale Variablen überdecken gleichnamige globale und funktionslokale Variablen. Tobias Wolf http://informatik.swoke.de Seite 5 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Beispiel int g; void main() { int f = 0; { int b = 0; } } Tobias Wolf http://informatik.swoke.de // globale Variable // funktionslokale Variable // blocklokale Variable Seite 6 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Gültigkeitsbereichsoperator :: - Werden globale Variablen durch funktionslokale oder blocklokale Variablen verdeckt, kann mit dem Gültigkeitsbereichsoperator vor dem entsprechenden Namen der Variablen trotzdem auf die globalen Variablen zugegriffen werden. - Dieser Zugriff funktioniert aber nur auf globalen Variablen. Tobias Wolf http://informatik.swoke.de Seite 7 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Gültigkeitsbereichsoperator :: int g=1; void main() { int f = 2; { int b=3, g=4; cout << setw(2) << ::g << setw(2) << g << endl; } } Ausgabe: 1 4 Tobias Wolf http://informatik.swoke.de Seite 8 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Umbennung von Datentypen - typedef - In C++ kann man Datentypen einen neuen Namen geben: typedef unsigned long int ULONG; ULONG i; Tobias Wolf http://informatik.swoke.de Seite 9 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Aufzählungen - enum - Eine Aufzählung ist ein selbst definierter ganzzahliger Datentyp. - Die Definition einer Aufzählung erfolgt über das Schlüsselwort enum. - Es werden mögliche Werte und Namen für diese Werte festgelegt. - Die in der Liste angegebenen Namen bezeichnen jetzt ganzzahlige Konstanten. - Die erste Konstante hat den Wert 0, die zweite den Wert 1, etc. Tobias Wolf http://informatik.swoke.de Seite 10 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Aufzählungen - enum #include <iostream> using namespace std; enum Automarke {Audi, BMW, Ford, Mercedes, Opel, Porsche}; void main() { Automarke marke; marke = Porsche; cout << marke << endl; } Ausgabe: 5 Tobias Wolf http://informatik.swoke.de Seite 11 von 11 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 15 Präprozessor Anweisungen, Makros, Namensbereiche Tobias Wolf http://informatik.swoke.de Seite 1 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Präprozessor Anweisungen - Die Präprozessor Anweisungen werden immer mit dem Doppelgatter # eingeleitet. - Der Präprozessor erzeugt – entsprechend der Anweisung – den Quelltext, der dann vom Compiler übersetzt wird. - Am Ende einer Präprozessor Anweisung steht kein Semikolon. - Präprozessor Anweisungen sind Anweisungen, die vor dem eigentlichen Übersetzen des Programms durch den Präprozessor ausgeführt werden. - Alle Zeilen, die mit dem Doppelgatter beginnen, werden als Präprozessor Anweisung interpretiert. Tobias Wolf http://informatik.swoke.de Seite 2 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik include Anweisung - Der Quelltext von Header-Dateien kann mit der include Anweisung eingebunden werden. - Header-Dateien sind Textdateien, die u.a. Deklarationen enthalten. - Es gibt zwei Schreibweisen: #include <Dateiname> #include "Dateiname.h" - Spitze Klammern werden bei Standard-Header-Dateien verwendet (zB. iostream, cmath). Tobias Wolf http://informatik.swoke.de Seite 3 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik include Anweisung - Die Dateien werden in einem von der Entwicklungsumgebung voreingestellten Pfad gesucht. - Zur Einbindung von selbst verfassten Header-Dateien verwendet man Anführungszeichen. - Sie werden im aktuellen Arbeitsverzeichnis gesucht. - Es können absolute und relative Pfade angegeben werden: #include "D:\Entwicklung\CPP\include\const.h" #include "..\include\const.h" Tobias Wolf http://informatik.swoke.de Seite 4 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik include Anweisung - Alle in einer Header-Datei deklarierten Namen sind global verfügbar. - Das kann bei großen Programmen zu Namenskonflikten führen. - Daher gibt es in C++ z.B. zur Header-Datei math.h noch eine Header-Datei cmath, die dieselben Namen in einem Namensbereich std deklariert. Tobias Wolf http://informatik.swoke.de Seite 5 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik include Anweisung #include <math.h> - ist äquivalent zu: #include <cmath> using namespace std; Tobias Wolf http://informatik.swoke.de Seite 6 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik define Anweisung - Mit der define Anweisung werden symbolische Konstanten und Makros definiert. - Es werden drei Formen unterschieden: Definition eines Symbols Definition eines Symbols mit Wertzuweisung Definition eines Makros Tobias Wolf http://informatik.swoke.de Seite 7 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition eines Symbols - Das Symbol (z.B. DEBUG) ist ein beliebiger Name. - Diese Definition kann in anderen Präprozessor Anweisungen (z.B. #ifdef) abgefragt werden. #define DEBUG Tobias Wolf http://informatik.swoke.de Seite 8 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition eines Symbols mit Wertzuweisung - Es wird ein Symbol definiert und diesem ein Wert zugewiesen. #define MAXINDEX 10 - Der Präprozessor ersetzt das Wort MAXINDEX vor dem Compilerlauf durch 10. Tobias Wolf http://informatik.swoke.de Seite 9 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition eines Symbols mit Wertzuweisung - Von der Ersetzung ausgenommen sind Strings und Kommentare. - Zur Definition von Konstanten ist es in jedem Fall besser, benannte Konstanten zu verwenden, anstatt sie mit define zu definieren const int MAXINDEX = 10; Tobias Wolf http://informatik.swoke.de Seite 10 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition eines Makros - Ein Makro ist eine Abkürzung für eine beliebige Anweisung. #define BEEP cout << "\a" - Trifft der Präprozessor auf das Wort Symbol (hier: BEEP), wird dieses durch die bei der Makrodefinition angegebenen Anweisungen ersetzt. Tobias Wolf http://informatik.swoke.de Seite 11 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition eines Makros - Erstrecken sich die Anweisungen eines Makros über mehrere Zeilen, sind die Zeilen mit einem Backslash abzuschließen. - Makros können auch Parameter besitzen. - Die Parameter werden hier - genauso, wie bei Funktionen - in Klammern eingeschlossen und durch Kommata getrennt. Datentypen werden keine angegeben. Tobias Wolf http://informatik.swoke.de Seite 12 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition eines Makros #include <iostream> using namespace std; #define BEEP cout "\a" #define MOD(a,b) ((a)%(b)) #define QUAD(a) ((a) * (a)) void main() { BEEP; cout << MOD(123, 11) << endl; cout << QUAD(17) << endl; } Ton! 2 289 Tobias Wolf http://informatik.swoke.de Seite 13 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik undef Anweisung - Mit der undef Anweisung kann ein definiertes Symbol wieder gelöscht werden. #undef DEBUG Tobias Wolf http://informatik.swoke.de Seite 14 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik ifdef, ifndef und endif Anweisung - Mit der Präprozessor Anweisung ifdef kann abgefragt werden, ob ein bestimmtes Symbol definiert ist oder nicht. - Ist das Symbol definiert, übernimmt der Präprozessor alle Anweisungen die zwischen der ifdef Anweisung und der dazugehörigen endif Anweisung stehen. Tobias Wolf http://informatik.swoke.de Seite 15 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik ifdef, ifndef und endif Anweisung #define DEBUG #ifdef DEBUG cout << "Debug Version" << endl; #endif #undef DEBUG #ifndef DEBUG cout << "Release Version" << endl; #endif Debug Version Release Version Tobias Wolf http://informatik.swoke.de Seite 16 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik if, elif, else und endif Anweisung - Diese Anweisungen bieten erweiterte Möglichkeiten. - Sie arbeiten ähnlich, wie die Verzweigung in C++. #define INTBITS 32 #if INTBITS == 16 cout << "16 Bit int" << endl; #elif INTBITS == 32 cout << "32 Bit int" << endl; #else cout << "INTBITS undef oder falsch!" << endl; #endif 32 Bit int Tobias Wolf http://informatik.swoke.de Seite 17 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik if, elif, else und endif Anweisung - Die if und elif Anweisungen können auch mehrere Ausdrücke als Bedingungen auswerten. - Die einzelnen Bedingungen können dann mit dem OderOperator || oder dem UND-Operator && verknüpft werden. Tobias Wolf http://informatik.swoke.de Seite 18 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik defined Operator - Mit dem defined Operator kann überprüft werden, ob eine symbolische Konstante oder ein Makro definiert ist. - Vor defined kann noch der Operator ! stehen, um das Ergebnis der Abfrage zu negieren. #if !defined(_WIN32) && !defined(_MAC) // aus math.h #error ERROR: Only Mac or Win32 targets supported! #endif Tobias Wolf http://informatik.swoke.de Seite 19 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik error Anweisung - Diese Anweisung bewirkt einen sofortigen Abbruch des Compilervorgangs. - Nach der Präprozessor Anweisung kann noch ein Text stehen. - Der Text muss nicht in Anführungszeichen stehen und wird ausgegeben. #if !defined(__cplusplus) #error C++ compiler required. #endif Tobias Wolf http://informatik.swoke.de Seite 20 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik pragma Anweisung - Mit der pragma Anweisung wird der Compiler angewiesen, eine (implementationsspezifische) Operation auszuführen. - Nicht alle Operationen, die nach dem Schlüsselwort pragma folgen, sind bei allen Compilern bekannt. - Eine, dem Compiler nicht bekannte pragma Operation, wird vom Präprozessor einfach ignoriert. #if _M_IX86 == 500 #pragma message("Erstellung für Pentium-Prozessor") #endif Tobias Wolf http://informatik.swoke.de Seite 21 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik pragma Anweisung - Mit pragma message kann bei Microsoft Visual C++ eine Meldung ausgegeben werden, ohne dass der Compilervorgang abgebrochen wird. - Der Text muss eingeklammert und in Anführungszeichen stehen. - Außer der Operation message gibt es noch ein paar weitere pragma Operationen. Diese können sich aber von Compiler zu Compiler unterscheiden. Tobias Wolf http://informatik.swoke.de Seite 22 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Namensbereiche - Bei großen Programmen kommt es bei der Vergabe von globalen Variablen häufig zu Konflikten, wenn gleiche Namen verwendet werden. - Namensbereiche werden zur Vermeidung solcher Konflikte eingesetzt. - Innerhalb eines Namensbereiches können Namen verwendet werden, auch wenn sie außerhalb bereits definiert wurden. - Der globale Geltungsbereich wird somit in Teilbereiche unterteilt. Tobias Wolf http://informatik.swoke.de Seite 23 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Namensbereiche - Wird von außerhalb auf die Elemente eines Namensbereichs zugegriffen, muss zusätzlich der Namensbereich angegeben werden. - Dieser wird dem Elementnamen mit dem Bereichsoperator :: vorangestellt. #include <iostream> void main() { std::cout << "Text" << std::endl; } Tobias Wolf http://informatik.swoke.de Seite 24 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Namensbereiche - Mit der using Anweisung kann explizit der Namensbereich einer Variablen oder Funktion für die restlichen Anweisungen des aktuellen Blocks vorgegeben werden. #include <iostream> void main() { using std::cout; using std::endl; cout << "Text" << endl; } Tobias Wolf http://informatik.swoke.de Seite 25 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Namensbereiche - Sollen aber alle Elemente eines Namensbereichs eingebunden werden, wird die bereits häufig gezeigte Form der using Anweisung verwendet. #include <iostream> using namespace std; void main() { cout << "Text" << endl; } Tobias Wolf http://informatik.swoke.de Seite 26 von 26 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 16 Datei Aus- und Eingabe Tobias Wolf http://informatik.swoke.de Seite 1 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Datei Aus- und Eingabe - Für die Ausgabe auf Dateien und die Eingabe von Dateien werden die Streams ofstream und ifstream verwendet. - Sie sind in der Bibliothek fstream deklariert. - Man unterscheidet zwischen Text- und Binärdateien. - Textdateien enthalten ausschließlich ASCII-Zeichen. - Sie können mit gewöhnlichen Editoren bearbeitet werden. - C++ Quelldateien sind Textdateien. Tobias Wolf http://informatik.swoke.de Seite 2 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Datei Aus- und Eingabe - Binärdateien enthalten Daten in binärer Form. - Diese Daten können nur mit speziellen Editoren (z.B. WinHex) sinnvoll dargestellt werden. - Binärdateien verwendet man, um größere Datenmengen abzulegen. - Sie benötigen hierfür nicht so viel Speicher wie Textdateien. Tobias Wolf http://informatik.swoke.de Seite 3 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Ausgabe in Textdatei - Will man Daten in eine Datei schreiben, muss zunächst ein Ausgabestream vom Typ ofstream definiert und mit einer Datei verbunden werden: ofstream myFile("D:\\Entwicklung\\CPP\\Datei.txt"); - Bei der Pfadangabe ist jeder Backslash zu verdoppeln. Tobias Wolf http://informatik.swoke.de Seite 4 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Ausgabe in Textdatei - Falls die Datei noch nicht existiert, wird sie neu angelegt. Beim Öffnen einer Datei können Fehler auftreten. Diese Fehler sollten abgefangen werden. Zum Schreiben der Daten in diese Textdatei kann der Operator << verwendet werden. - Für die Dateiausgabe stehen die gleichen Manipulatoren wie für cout zur Verfügung. (Beispielsweise: setprecision, setw) Tobias Wolf http://informatik.swoke.de Seite 5 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Beispiel: Ausgabe in Textdatei #include <iostream> #include <iomanip> #include <fstream> using namespace std; void main() { ofstream myFile("Datei.txt"); if(!myFile) cerr << "Fehler beim Öffnen der Datei"; else myFile << setprecision(5) << 1.0/3.0 << endl; myFile.close(); } Tobias Wolf http://informatik.swoke.de Seite 6 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Einlesen von Textdatei - Will man Daten aus einer Datei lesen, muss zunächst ein Eingabestream vom Typ ifstream definiert und mit einer Datei verbunden werden: ifstream myFile("Datei.txt"); - Die Datei muss bereits existieren. - Zum Lesen von Daten aus dieser Textdatei kann der Operator >> verwendet werden. Tobias Wolf http://informatik.swoke.de Seite 7 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Beispiel: Einlesen von Textdatei #include <iostream> #include <iomanip> #include <fstream> using namespace std; void main() { double x; ifstream myFile("Datei.txt"); if(!myFile) cerr << "Fehler beim Öffnen der Datei"; else myFile >> x; myFile.close(); } Tobias Wolf http://informatik.swoke.de Seite 8 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Die Bibliothek fstream - Bisher haben wir die Datentypen ifstream und ofstream verwendet, die in der Bibliothek fstream deklariert sind. - Diese Datentypen nennt man auch "Klassen". - Sie stellen die benötigten Funktionen/Methoden zur Verarbeitung von Dateien zur Verfügung. Tobias Wolf http://informatik.swoke.de Seite 9 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Einige Methoden von fstream Methode eof() << >> open() close() getline() Tobias Wolf http://informatik.swoke.de Beschreibung Prüfung auf Dateiende Schreiben in Datei Lesen von Datei Öffnen einer Datei Schließen einer Datei Lesen einer ganzen Zeile aus einer Datei Seite 10 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Erkennen des Dateiendes - Ist nicht bekannt, wie viele Daten sich in einer Datei zum Lesen befinden, muss bis zum Dateiende gelesen werden. - Das Erreichen des Dateiendes kann durch die Methode eof() geprüft werden. - eof() gibt bei Erreichen des Dateiendes true zurück. while(!myInputFile.eof()) { getline(myInputfile, zeile); cout << zeile << endl; } Tobias Wolf http://informatik.swoke.de Seite 11 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Öffnen von Dateien - Um den Inhalt einer Datei lesen zu können, muss diese erst einmal geöffnet werden. - Dies wird entweder erreicht, indem man bei der Deklaration des Eingabestreams die Datei gleich angibt: ifstream myFile("Datei.txt"); - Oder aber man deklariert zunächst die Streamvariable und öffnet die Datei dann im nächsten Schritt: ifstream myFile; myFile.open("Datei.txt"); Tobias Wolf http://informatik.swoke.de Seite 12 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Schließen von Dateien - Wenn die Bearbeitung einer Datei beendet ist, sollte die Datei durch close() geschlossen werden. myFile.close(); - Am Ende eines Programms werden alle geöffneten Dateien automatisch geschlossen. - Der Destruktor eines Datei-Streams schließt die Datei ebenfalls automatisch. Tobias Wolf http://informatik.swoke.de Seite 13 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Lesen einer ganzen Zeile - Durch die Methode getline() wird eine ganze Zeile aus der angegebenen Datei gelesen. string zeile; getline(myFile, zeile); Tobias Wolf http://informatik.swoke.de Seite 14 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Die Bibliothek sstream - Die Bibliothek sstream stellt istringstream und ostringstream zur Verfügung. - Zur Umwandlung einer Zeichenkette in eine Zahlenvariable kann istringstream verwendet werden: int meineZahl; string s("123"); istringstream inputStream(s); inputStream >> meineZahl; Tobias Wolf http://informatik.swoke.de Seite 15 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Die Bibliothek sstream - Soll aus einer Zahlenvariablen eine Zeichenkette werden, so kann ostringstream verwendet werden: int meineZahl = 123; string s; ostringstream outputStream; outputStream << meineZahl; s = outputStream.str(); - Die Methode str() wandelt den Stream in einen String um und schreibt ihn in s. Tobias Wolf http://informatik.swoke.de Seite 16 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Die Methode str() - Einerseits wandelt also str() den Stream in einen String um: string s = outputStream.str(); - Andererseits kann so, ein String dem Stream zugewiesen werden, um ihn dann durch >> in eine Variable zu schreiben: getline(myFile, zeile); istringstream iss.str(zeile); iss >> name; Tobias Wolf http://informatik.swoke.de Seite 17 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Die Methode str() - Fortsetzung - Warum wird der String durch getline() nicht gleich in name eingelesen (statt - wie im Beispiel - in zeile) ? - Man beachte, dass im eingelesen String zeile auch Leerzeichen enthalten sein können. Durch dem Umweg über istringstream ist es dadurch nun möglich, den String durch >> zu trennen und die Teilstrings verschiedenen Variablen zuzuweisen. - Analog zu cin, welches bei der Eingabe auch den Gebrauch von cin >> a >> b >> c; - erlaubt, bei der man die Werte durch Leerzeichen getrennt hintereinander schreiben kann. Tobias Wolf http://informatik.swoke.de Seite 18 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Die Methode clear() - Die Methode clear() löscht den zugewiesenen String, so dass eine neue Zuweisung erfolgen kann. iss.clear(); Tobias Wolf http://informatik.swoke.de Seite 19 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vollständiges Schreiben einer Textdatei - Im ersten Teil des folgenden Beispiels wird eine Datei Namen.txt zum Schreiben geöffnet, ein string-Feld mit Namen und Ident-Nummer angelegt und komplett element- und zeilenweise in die Datei Namen.txt geschrieben. - Danach wird die Datei geschlossen. => siehe "Beispiel_18_-_Datei_-_Aus_-_und_Eingabe.zip" – 1. Teil Tobias Wolf http://informatik.swoke.de Seite 20 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Bsp: Vollständiges Lesen einer Textdatei - Im zweiten Teil des Beispiels wird die Datei Namen.txt zum Lesen geöffnet und bis zum Erreichen des Dateiendes zeilenweise ausgelesen. - In jeder Zeile wird die Ident-Nummer vor den Namen gestellt und das string-Feld wieder beschrieben und ausgegeben. - Am Ende wird die Datei wieder geschlossen. => siehe "Beispiel_18_-_Datei_-_Aus_-_und_Eingabe.zip" – 2. Teil Tobias Wolf http://informatik.swoke.de Seite 21 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Einige Methoden von string Methode find(s) insert(n, s) erase(p, n) length() Tobias Wolf http://informatik.swoke.de Beschreibung Liefert die Position, an der sich der String s befindet. Das Zählen beginnt hier – wie bei Arrays – bei 0. Die Methode liefert string::npos, wenn s nicht gefunden wurde. string::npos steht für den Wert -1 Fügt den String s an Position n ein. Entfernt ab Position p n Zeichen. Liefert die Länge des Strings. Seite 22 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Einige Methoden von string - Bsp string s("123"); int len = s.length(); s.insert(2, "xy"); s.erase(2, 2); int pos = s.find("23"); // String s erstellen mit Zeichenkette "123" // liefert 3; Die Länge des Strings // s ist nun "12xy3" // s ist nun "123" // liefert die Position 1 Siehe dazu auch: Skript Informatik - Kapitel 12 (Strings) Tobias Wolf http://informatik.swoke.de Seite 23 von 23 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 17 Klassen und Objekte Tobias Wolf http://informatik.swoke.de Seite 1 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Prozedurale Programmierung - Die Prozedurale Programmierung trennt die Daten von den Funktionen, die diese Daten bearbeiten. - Das hat zur Folge, dass ein Programmierer selbst für die Initialisierung von Daten vor ihrer Verwendung sorgen muss und dass beim Aufruf einer Funktion korrekte Daten übergeben werden. - Wird die Darstellung der Daten geändert, müssen auch die entsprechenden Funktionen angepasst werden. - Ein solches Vorgehen erhöht den Wartungsaufwand und ist fehleranfällig. Tobias Wolf http://informatik.swoke.de Seite 2 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Datenabstraktion - Ziel der „Objektorientierten Programmierung“, auch kurz OOP, ist es, komplexe Sachverhalte als Ganzes abzubilden, d.h. die Eigenschaften (Daten, Attribute) und die darauf wirkenden Methoden (Funktionen, Fähigkeiten) zusammenzufassen. - Die Objekte der OOP bilden eine Einheit aus Eigenschaften und Methoden. - Eigenschaften und Methoden einer Klasse nennt man auch Member einer Klasse. Tobias Wolf http://informatik.swoke.de Seite 3 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Datenabstraktion - Vor der Implementierung werden in einem Komponentenentwurf die Objekte herausgearbeitet. Mehrere gleichartige Objekte werden dann zu einer Klasse zusammengefasst. - Dabei werden alle Gemeinsamkeiten der gleichartigen Objekte herausgearbeitet und in einer Klasse vereinigt. - Die Bildung von Klassen zur Beschreibung von Objekten nennt man auch Datenabstraktion. Tobias Wolf http://informatik.swoke.de Seite 4 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Klassen und Objekte - Eine Klasse ist ein selbst definierter Datentyp und ein Objekt ist eine Variable (Instanz) dieser Klasse. - Eine Klasse CKonto enthält z.B. die Eigenschaften: o Name des Kontoinhabers o Kontonummer o Kontostand Tobias Wolf http://informatik.swoke.de Seite 5 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Klassen und Objekte - Ferner enthält die Klasse CKonto die Methoden: o Name abfragen und ändern o Kontonummer abfragen und ändern o Kontostand abfragen und ändern o Kontodaten ausgeben - Diese Eigenschaften und Methoden gehören zu jedem beliebigen Konto. - Im folgenden Beispiel (Bsp: CKonto_Schnittstelle.zip) ist die Schnittstelle der Klasse CKonto definiert. Tobias Wolf http://informatik.swoke.de Seite 6 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Deklaration der Klasse CKonto class CKonto { private: string m_name // Name des Kontoinhabers int m_number // Kontonummer double m_stand // Kontostand public: string getName(); // Name abfragen void setName(string name); // Name ändern int getNumber(); // Kontonummer abfragen void setNumber(int number); // Kontonummer ändern … // Kontostand abfragen / ändern Ausgabe(); // Kontodaten ausgeben }; Tobias Wolf http://informatik.swoke.de Seite 7 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Deklaration einer Klasse - Allgemein - Jede Klasse besteht aus einer Menge von Eigenschaften und Methoden. - Eigenschaften und Methoden verschiedener Klassen dürfen die gleichen Namen tragen. - Jede Klasse wird beschrieben durch eine .cpp- und eine .hDatei. - Die Deklaration (die Beschreibung der Schnittstelle) erfolgt normalerweise in der .h-Datei. Tobias Wolf http://informatik.swoke.de Seite 8 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Deklaration einer Klasse - Allgemein - Die Eigenschaften und Methoden einer Klasse werden in einem Block zusammengefasst. - Vor diesem Block steht das Schlüsselwort class gefolgt vom Klassennamen. Am Ende des Blocks muss ein Semikolon stehen. class CKonto { … }; Tobias Wolf http://informatik.swoke.de Seite 9 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition einer Klasse - Man beachte, dass die Methoden bisher nur deklariert wurden. - Die Definition der Klasse bzw. der einzelnen Methoden erfolgt in der .cpp-Datei. - Jede Quelldatei kann jetzt auf die Klasse CKonto zugreifen, indem sie Konto.h inkludiert. - Dies ist eine Grundvoraussetzung für die modulare Programmierung, also die Aufteilung des Programmcodes auf mehrere Module (Dateien). Tobias Wolf http://informatik.swoke.de Seite 10 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Datenkapselung - Die Eigenschaften einer Klasse sind bei guter Programmierung nur über die Methoden veränderbar. - Die Menge aller Methoden einer Klasse nennt man auch Schnittstelle der Klasse. - Die Schnittstelle (siehe: Deklaration) einer Klasse muss sich nicht ändern, wenn sich die interne Darstellung der Daten ändert. - Das hat den Vorteil, dass alle die Klasse verwendenden Programmteile unverändert bleiben können. Tobias Wolf http://informatik.swoke.de Seite 11 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition eines Objekts - Ist die Schnittstelle der Klasse CKonto bekannt, können Objekte dieser Klasse definiert werden: CKonto konto; - Man sagt auch: konto ist ein Objekt der Klasse CKonto. - Die .cpp/.h-Datei ist sozusagen der Bauplan, nachdem die Objekte erstellt werden. Tobias Wolf http://informatik.swoke.de Seite 12 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition eines Objektfeldes - Es ist auch möglich ein Feld von Objekten zu definieren: CKonto konto[10]; Tobias Wolf http://informatik.swoke.de Seite 13 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition der Methoden einer Klasse - Die Methoden werden üblicherweise in einer cpp-Datei (z.B. Konto.cpp) definiert (Bsp: CKonto_Komplett.zip): #include "Konto.h" string CKonto::GetName() { return m_name; } void CKonto::SetName(string name) { m_name = name; } … Tobias Wolf http://informatik.swoke.de Seite 14 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Definition der Methoden einer Klasse - Es ist auch möglich, die Definition der Methoden direkt in die Klassendefinition einzubeziehen. Die Datei Konto.cpp kann hierbei entfallen. (Bsp: CKonto_InEinerDatei.zip): … public string GetName() { return m_name; } … Tobias Wolf http://informatik.swoke.de Seite 15 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Aufruf der Methoden einer Klasse - Funktion wird in der objektorientierten Programmierung Methode genannt. - Der Aufruf der Methode einer Klasse erfolgt immer für ein bestimmtes Objekt der Klasse. - Der Name des Objekts muss durch einen Punkt getrennt vor den Namen der Methode geschrieben werden. Tobias Wolf http://informatik.swoke.de Seite 16 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Aufruf der Methoden einer Klasse // Klasse string und Objekt error void main(void) { meineKlasse fehler; // fehler ist ein Objekt der Klasse meineKlasse. // Die Klasse meineKlasse hat eine Methode // namens ausgabe, welche den Fehler // ausgibt. fehler.ausgabe(); // Aufruf der Methode ausgabe in der // Klasse meineKlasse. } Tobias Wolf http://informatik.swoke.de Seite 17 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zugriffsrechte bei Klassen - Allen Membern (Eigenschaften, Methoden) einer Klasse sind Zugriffsrechte zugeordnet. - Die Zugriffsrechte definieren, ob auf ein Member von außen zugegriffen werden darf oder nicht. - Der Zugriff von außen kann durch das Schlüsselwort private gesperrt werden. - Das Schlüsselwort public erlaubt den Zugriff von außen. public: string GetName(); Tobias Wolf http://informatik.swoke.de Seite 18 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zugriffsrechte bei Klassen - Ist kein Zugriffsrecht angegeben, ist es standardmäßig private. - Methoden einer Klasse haben generell immer Zugriff auf alle anderen Member der eigenen Klasse. - Die Schlüsselwörter (public, private) sind innerhalb einer Klasse gültig, bis sie durch ein anderes verändert werden. - Die Reihenfolge und Anzahl von private bzw. public ist beliebig. - Alle Eigenschaften einer Klasse sollten im private -Bereich der Klasse stehen. Tobias Wolf http://informatik.swoke.de Seite 19 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zugriff auf Member einer Klassen - Auf ein public Member einer Klasse kann von extern (z.B. von der main -Funktion aus) direkt zugegriffen werden. - Auf Member einer Klasse kann nur über ein Objekt der Klasse direkt zugegriffen werden. - Der Zugriff auf Member erfolgt durch die Angabe des entsprechenden Objekts, gefolgt vom Punktoperator und dem Namen des Members. CKonto konto; konto.SetName("Hans Meier"); konto.SetNumber(123456); konto.Ausgabe(); Tobias Wolf http://informatik.swoke.de Seite 20 von 20 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 18 Konstruktor / Destruktor einer Klasse Tobias Wolf http://informatik.swoke.de Seite 1 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstruktoren - Zur Initialisierung der Eigenschaften einer Klasse werden Konstruktoren verwendet. - Der Konstruktor wird bei der Definition eines Objekts der Klasse automatisch aufgerufen. - Der Konstruktor besitzt den gleichen Namen wie die Klasse. - Bis auf Objekte derselben Klasse dürfen in einem Konstruktor auch Objekte definiert werden. CKonto::CKonto(string name) { m_name = name; } Tobias Wolf http://informatik.swoke.de Seite 2 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstruktoren - Ein Konstruktor besitzt keinen Rückgabewert; auch nicht den Typ void. - Er darf nicht private sein. - Für globale Objekte wird der Konstruktor unmittelbar vor der Ausführung der main()- Funktion ausgeführt und bei lokalen Objekten an der Stelle, an der sie definiert werden. - Hat ein Konstruktor Parameter, werden diese bei der Definition des Objekts angegeben. CKonto konto2("Mueller, Anna"); Tobias Wolf http://informatik.swoke.de Seite 3 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Standardkonstruktor - Ist für eine Klasse kein Konstruktor definiert, so hat sie einen parameterlosen Standardkonstruktor. CKonto(); - Auch der Aufruf des Standardkonstruktors erfolgt bei der Definition eines Objekts: CKonto konto1; Tobias Wolf http://informatik.swoke.de Seite 4 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstruktoren mit einem Parameter - Hat ein Konstruktor nur einen Parameter, kann die Initialisierung bei der Definition auch über eine Zuweisung erfolgen. - Der Aufruf erfolgt bei folgender Definition: CKonto konto2("Mueller, Anna"); - Oder bei folgender Definition: CKonto konto2 = "Mueller, Anna"; Tobias Wolf http://informatik.swoke.de Seite 5 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstruktoren mit einem Parameter - Umgekehrt können auch einfache Datentypen (z.B. int) entsprechend der Konstruktor-Schreibweise initialisiert werden. - Der Aufruf erfolgt bei folgender Definition: int x = 4; - Oder: int x(4); Tobias Wolf http://informatik.swoke.de // Runde Klammern! Seite 6 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstruktoren mit mehr als einem Parameter - Bei der Definition eines Objekts können hinter dem Namen des Objekts Anfangswerte in Klammern angegeben werden: CKonto konto4("Maier, Hans", 10002000, 1000.00); - Der Compiler ordnet dieser Initialisierungsliste einem Konstruktor mit gleicher Parameterliste zu: CKonto(string name, int nummer, double stand); => Bsp: CGirokonto Tobias Wolf http://informatik.swoke.de Seite 7 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Elementinitialisierer - Unter Verwendung von Elementinitialisierern kann statt der bisherigen Schreibweise: CKonto::CKonto(string name) { m_name = name; } - die Konstruktordefinition auch wie folgt geschrieben werden: CKonto::CKonto(string name) : m_name(name) { } Tobias Wolf http://informatik.swoke.de Seite 8 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Elementinitialisierer - Ein Elementinitialisierer wird nach der Parameterklammer der Konstruktor-Definition durch einen Doppelpunkt eingeleitet. - Nach dem Doppelpunkt werden die zu initialisierenden Eigenschaften aufgelistet, wobei die Initialwerte jeder Eigenschaft in runden Klammern angegeben werden. Tobias Wolf http://informatik.swoke.de Seite 9 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Destruktoren - Destruktoren werden am Ende des Gültigkeitsbereichs des Objekts automatisch aufgerufen (z.B. Blockende). - Bei globalen Objekten werden Destruktoren am Ende von main aufgerufen. - Der Name eines Destruktors beginnt mit dem Tilde-Zeichen ~ gefolgt von dem Namen der Klasse. - Ein Destruktor hat keine Parameter und liefert keinen Wert zurück. Er darf nicht im private Bereich einer Klasse liegen. CKonto::~CKonto() { } Tobias Wolf http://informatik.swoke.de Seite 10 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Aufruf von externen Funktionen in Methoden - Gibt es innerhalb der Klasse keine Methode mit dem gleichen Namen, erfolgt der Aufruf der Funktion wie gewohnt. - Gibt es innerhalb der Klasse eine Methode mit dem gleichen Namen wie die externe Funktion, wird die Klassen-Methode aufgerufen. - Um aber beispielsweise eine Funktion der Standardbibliothek aufzurufen, schreibt man std:: vor den Funktionsnamen. std::pow(x, y); Tobias Wolf http://informatik.swoke.de Seite 11 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Aufruf von externen Funktionen in Methoden - Handelt es sich bei der aufzurufenden Funktion um eine Funktion, die in keinem Namensbereich liegt z.B. Test(), wird einfach auf die Angaben des Namensbereichs verzichtet: z = ::Test(); Tobias Wolf http://informatik.swoke.de Seite 12 von 12 Informatik Wintersemester Maschinenbau und Kunststofftechnik Kapitel 19 Vererbung, UML Tobias Wolf http://informatik.swoke.de Seite 1 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften einer Klasse (Basisklasse) an eine andere Klasse (abgeleitete Klasse) vererbt. - Die abgeleitete Klasse verfügt neben ihren eigenen Methoden und Eigenschaften auch über die der Basisklasse. Tobias Wolf http://informatik.swoke.de Seite 2 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vererbung - Wenn eine Klasse B von einer Klasse A abgeleitet werden soll, so muss dies wie folgt geschrieben werden: class B : public A { }; - Die Klasse B erbt die hinter dem Doppelpunkt mit public angegebene Klasse A. Tobias Wolf http://informatik.swoke.de Seite 3 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Vererbung - Im folgenden Beispiel wird die Klasse CGiroKonto von der Basisklasse CKonto abgeleitet. class CGiroKonto : public CKonto { … }; => Bsp. CGirokonto Tobias Wolf http://informatik.swoke.de Seite 4 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zugriffsrecht protected - Bisher haben wir die Zugriffsrechte private und public kennen gelernt. - Das Zugriffsrecht protected wird bei der Vererbung wichtig. - Auf protected Member einer Klasse kann nur von abgeleiteten Klassen zugegriffen werden. Tobias Wolf http://informatik.swoke.de Seite 5 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zugriffsrechte auf Basisklassen - Eine abgeleitete Klasse hat nur Zugriff auf die public und die protected Member der Basisklasse. - Sie hat keinen Zugriff auf die private Member. Tobias Wolf http://informatik.swoke.de Seite 6 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstruktoren und Destruktoren von abgeleiteten Klassen - Für das Anlegen eines Objekts einer abgeleiteten Klasse (CGiroKonto) ist der Konstruktor der abgeleiteten Klasse zuständig. - Da die abgeleitete Klasse alle Eigenschaften der Basisklasse enthält, sind auch diese mit Anfangswerten zu versorgen. - Hierfür wird der Konstruktor der Basisklasse (CKonto) aufgerufen. - Ist kein Aufruf explizit angegeben, wird implizit der Standardkonstruktor der Basisklasse (CKonto) aufgerufen. Tobias Wolf http://informatik.swoke.de Seite 7 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstruktoren und Destruktoren von abgeleiteten Klassen - Vor dem Konstruktor der abgeleiteten Klasse wird der Konstruktor der Basisklasse aufgerufen. - Die Aufrufreihenfolge bei den Destruktoren ist umgekehrt: Zunächst wird der Destruktor der abgeleiteten Klasse und dann der Destruktor der Basisklasse aufgerufen. Tobias Wolf http://informatik.swoke.de Seite 8 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Konstruktoren und Destruktoren von abgeleiteten Klassen - Vor dem Aufruf des Konstruktors: CGiroKonto(string name, int nummer, double stand, double dispo, double sollzins); - Wird der Standardkonstruktor der Basisklasse CKonto: CKonto::CKonto(); - implizit aufgerufen. Tobias Wolf http://informatik.swoke.de Seite 9 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Basisinitialisierer - Im Konstruktor werden Zugriffsmethoden (z.B. SetName) der Klasse CKonto zum Initialisieren der Basisklassen-Eigenschaften verwendet: CGiroKonto::CGiroKonto(string name, int nummer, double stand, double dispo, double sollzins) { SetName(name); SetNummer(nummer); SetStand(stand); m_dispo = dispo; m_sollzins = sollzins; } Tobias Wolf http://informatik.swoke.de Seite 10 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Basisinitialisierer - Da die Basisklasse CKonto einen Konstruktor mit Parametern besitzt, kann dieser aufgerufen werden. - Hierfür verwendet man dann den Basisinitialisierer: CGiroKonto::CGiroKonto(string name, int nummer, double stand, double dispo, double sollzins) : CKonto(name, nummer, stand) { m_dispo = dispo; m_sollzins = sollzins; } Tobias Wolf http://informatik.swoke.de Seite 11 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Basisinitialisierer - Unter Verwendung von Elementinitialisierern kann man zusätzlich zum Basisinitialisierer auch schreiben: CGiroKonto::CGiroKonto(string name, int nummer, double stand, double dispo, double sollzins) : CKonto(name, nummer, stand) , m_dispo(dispo), m_sollzins(sollzins) { } Tobias Wolf http://informatik.swoke.de Seite 12 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zuweisung zwischen abgeleiteten Klassen - Ein Objekt einer abgeleiteten Klasse (CGiroKonto) kann wie ein Objekt der Basisklasse (CKonto) verwendet werden. CKonto konto; CGiroKonto giroKonto("Maier, Wilhelm", 47114711, 0.00, 1000.00, 14.24); giroKonto.Ausgabe(); cout << endl; konto = giroKonto; konto.Ausgabe(); cout << endl; Tobias Wolf http://informatik.swoke.de Seite 13 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Zuweisung zwischen abgeleiteten Klassen - Alle Eigenschaften des Objekts konto erhalten die Werte der Eigenschaften des Objekts giroKonto. - Eine Umkehrung der Zuweisung ist nicht möglich. Tobias Wolf http://informatik.swoke.de Seite 14 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Mehrfache Vererbung - Es ist möglich, dass eine Klasse mehrere Basisklassen hat, also von mehreren Klassen abgeleitet wird. - Im folgenden Beispiel wird die Klasse CPlusKonto von den CSparKonto und CGiroKonto abgeleitet. class CPlusKonto : public CSparKonto, public CGiroKonto { … } Tobias Wolf http://informatik.swoke.de Seite 15 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Mehrere gleiche Basisklassen - Im obigen Beispiel haben die beiden Basisklassen CSparKonto und CGiroKonto jeweils die gleiche Basisklasse CKonto. Man spricht dann von einer mehrfach indirekten Basisklasse. - Hierdurch entstehen Mehrdeutigkeiten. Sowohl CSparKonto als auch CGiroKonto besitzen eine Methode SetName(). - Diese Mehrdeutigkeiten können unter Verwendung des Gültigkeitsbereichsoperators :: aufgelöst werden. Tobias Wolf http://informatik.swoke.de Seite 16 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Virtuelle Basisklassen - Das mehrfache Vorkommen der indirekten Basisklasse CKonto kann mit Verwendung virtueller Basisklassen vermieden werden. class CGiroKonto : public virtual CKonto class CSparKonto : public virtual CKonto - Durch das Schlüsselwort virtual wird erreicht, dass ein Objekt einer mehrfach abgeleiteten Klasse die Elemente einer virtuellen Basisklasse (CKonto) nur einmal enthält. Tobias Wolf http://informatik.swoke.de Seite 17 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik Unified Modeling Language (UML) - UML ist eine Sprache und Notation zur Spezifikation, Konstruktion, Visualisierung und Dokumentation von Modellen für Softwaresysteme. - Sie wird häufig in der objektorientierten Softwareentwicklung eingesetzt. - In UML ist eine Vielzahl unterschiedlicher Diagrammtypen definiert. - Im Folgenden wird auf die Klassendiagramme eingegangen. Tobias Wolf http://informatik.swoke.de Seite 18 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik UML Klassendiagramme - Eine Klasse wird durch ein Rechteck dargestellt. - Dieses Rechteck wird mit horizontalen Linien in drei Rubriken unterteilt: Klassenname, Eigenschaften und Methoden. - Neben dem Namen der Eigenschaften, können noch Angaben zu ihrem Typ und einem Initialwert gemacht werden. - Neben dem Namen der Methoden, können zusätzlich die Parameter mit ihrem Typ angegeben werden. Tobias Wolf http://informatik.swoke.de Seite 19 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik UML Klassendiagramme - Die Klassen-Zugriffsrechte private, public und protected werden durch Voranstellen von -, + und # dargestellt: CPerson -m_vorname:string -m_nachname:string +SetVorname(string):void +GetVorname():string +SetNachname(string):void +GetNachname():string +Ausgabe():void +Eingabe():void Tobias Wolf http://informatik.swoke.de Seite 20 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik UML Klassendiagramme, Vererbung - Eine Vererbungsbeziehung wird durch einen nicht ausgefüllten Pfeil dargestellt. - Der Pfeil zeigt immer auf die Basisklasse. Tobias Wolf http://informatik.swoke.de Seite 21 von 22 Informatik Wintersemester Maschinenbau und Kunststofftechnik UML Klassendiagramme, Vererbung Tobias Wolf http://informatik.swoke.de Seite 22 von 22