27
1 Programmierkurs C++ WS 04/05 Christian Hagemeier Lehrstuhl Prof. Dr. Schrader C++ Programmierkurs Wintersemester 04 / 05 Christian Hagemeier Lehrstuhl Prof. Dr. Schrader Institut für Informatik Universität zu Köln mittwochs 17–18:30 Uhr Hörsaal II der Physikalischen Institute http://www.zaik.de/AFS/teachings/ 2 Programmierkurs C++ WS 04/05 Christian Hagemeier Lehrstuhl Prof. Dr. Schrader Gliederung der Vorlesung 20.10.: Organisatorisches und Einführung 27.10.: Einführung und Kontrollstrukturen 03.11.: Kontrollstrukturen 10.11.: Funktionen 17.11.: Vektoren, Zeiger und Strings 24.11.: Klassen und Datenabstraktion 01.12.: Klassen 08.12.: Überladen von Operatoren 15.12.: Vererbung 22.12.: Polymorphismus 12.01.: Stream Ein–/Ausgabe 19.01.: Datei Ein–/Ausgabe 26.01.: Standard Template Library 02.02.: Templates 09.02.: Diverse Feinheiten

C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

1

1

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

C++ Programmierkurs

Wintersemester 04 / 05

Christian HagemeierLehrstuhl Prof. Dr. Schrader

Institut für InformatikUniversität zu Köln

mittwochs 17–18:30 UhrHörsaal II der Physikalischen Institute

http://www.zaik.de/AFS/teachings/

2

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Gliederung der Vorlesung

20.10.: Organisatorisches und Einführung27.10.: Einführung und Kontrollstrukturen03.11.: Kontrollstrukturen10.11.: Funktionen17.11.: Vektoren, Zeiger und Strings24.11.: Klassen und Datenabstraktion01.12.: Klassen08.12.: Überladen von Operatoren15.12.: Vererbung22.12.: Polymorphismus12.01.: Stream Ein–/Ausgabe19.01.: Datei Ein–/Ausgabe26.01.: Standard Template Library02.02.: Templates09.02.: Diverse Feinheiten

Page 2: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

2

3

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

1 // Fig. 1.2: fig01_02.cpp2 // Ein erstes Programm in C++.3 #include <iostream>4 5 // bei Funktion main beginnt Programmausführung6 int main()7 {8 std::cout << “Hello World!“ << std::endl;9 10 return 0; // beendet Programm mit Erfolg11 12 } // beende Funktion main

Hello World!

Der Programmtext „Hello World!“

4

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Modifiziertes “Hello World!”

1 // Fig. 1.4: fig01_04.cpp2 // Eine Ausgabezeile durch mehrere Befehle ausgeben.3 #include <iostream>4 5 // bei Funktion main beginnt Programmausführung6 int main()7 {8 std::cout << “Hello "; 9 std::cout << “World!" << std::endl;10 11 return 0; // beendet Programm mit Erfolg12 13 } // beendet Funktion main

Hello World!

Mehrmalige Verwendung des Ausgabeoperators erzeugt trotzdem nur eine Ausgabezeile.

Page 3: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

3

5

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

1.5 Addition zweier Zahlen

• Lernziele:– Verständnis von Variablen– Ein– und Ausgabe von ganzen Zahlen– Umgang mit ganzzahligen Variablen– Einfache Rechenoperationen verwenden

• Unwichtig (=„kommt später“):– Wie sieht der genaue Aufbau der neuen Befehle im Detail

aus?– Wie kann ich diese Kombinieren?

à Deitel: 1.22

6

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

1. Teil: Addition zweier Zahlen

1 // Fig. 1.6: fig01_06.cpp2 // Addition zweier ganzer Zahlen.3 #include <iostream>4 5 // bei Funktion main beginnt Programmausführung6 int main()7 {8 int zahl1; // erste Zahl, die vom Benutzer eingegeben werden soll9 int zahl2; // zweite Zahl zur Benutzereingabe10 int summe; // Variable, in der die Summe gespeichert werden soll11 12 std::cout << “Gib erste Zahl ein\n"; // Benutzerinteraktion13 std::cin >> zahl1; // lies eine ganze Zahl ein14 15 std::cout << “Gib zweite Zahl ein\n"; // Benutzerinteraktion16 std::cin >> zahl2; // lies eine ganze Zahl ein17 18 summe = zahl1 + zahl2; // weise Ergebnis der Addition der Variablen zu19 20 std::cout << "Summe ist " << summe << std::endl; // gib Summe aus

Definiere ganzzahlige Variablen

Benutze Eingabeoperatormit Standard–Eingabe um Benutzereingabe einzulesen.

Zusammensetzen oder Ver-ketten mit Ausgabeoperator.

Berechne die Summe der beiden Zahlen und speichere sie in der neuen Variable.

Berechnungen können auch direkt im Ausgabebefehl durchge-führt werden. Alternative für Zeilen 18 und 20:std::cout << "Summe ist " << zahl1 + zahl2 << std::endl;

Page 4: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

4

7

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

2. Teil: Addition zweier Zahlen

2122 return 0; // beendet Funktion mit Erfolg23 24 } // beendet Funktion main

Gib erste Zahl ein45Gib zweite Zahl ein72Summe ist 117

8

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Variablen

• Stelle im Speicher, wo ein Wert von einem bestimmten Datentyp gespeichert werden kann

• Gängige Datentypen:– int – ganze Zahlen– char – Zeichen (Buchstabe, Ziffer, ...)– double – Fließkommazahl (rationale Zahl)

• Variablen müssen vor deren Nutzung mit Name und Datentyp definiert werden:int zahl1;int zahl2;

• mehrere Variablen gleichen Typs in einer Deklaration definieren: Trennung durch Kommataint zahl1, summe;

Page 5: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

5

9

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Variablennamen

• Zeichenkette (Buchstaben, Ziffern, Unterstrich „_“)• Dürfen nicht mit Ziffer anfangen• Unterscheidet zwischen Groß– und Kleinschreibung

10

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Stream–Eingabe und Zuweisung

• Stream–Eingabe – wird angesprochen durch std::cin– Wartet auf Benutzereingabe; Abschluß durch Enter–

(Return–) Taste– Eingabeoperator „>>“

• speichert den eingelesenen Wert in der Variablen auf der rechten Seite des Operators

• Falls nötig wird eingegebener Typ in den entsprechenden Typ umgewandelt

• Zuweisungsoperator „=“– Weist einer Variablen einen Wert zu

– binärer Operator (2 Operatoren: Variable und Wert)– Beispiel:

summe = zahl1 + zahl2;

Page 6: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

6

11

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Speicherkonzept bei Variablen

• Variablennamen– entsprechen Speicherplatz im Hauptspeicher des Computers– Jede Variable besitzt Name, Typ, Größe und Wert.– Wenn neuer Wert in Variable gespeichert wird, wird alter

Wert überschrieben– Auslesen von Variablen ist nicht destruktiv (Wert bleibt nach

Auslesen erhalten)

à Deitel: 1.23

12

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Speicherkonzept bei Variablen

• std::cin >> zahl1;– Annahme: Benutzer gibt 45 ein

zahl1 45

zahl1 45

zahl2 72

• std::cin >> zahl2;– Annahme: Benutzer gibt 72 ein

zahl1 45

zahl2 72

summe 117

• summe = zahl1 + zahl2;

Page 7: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

7

13

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Arithmetische Berechnungen

• *– Multiplikation

• /– Division– Ganzzahlige Division schneidet den nicht ganzzahligen Rest

ab. Beispiel: 7/5 ergibt 1

• %– Modulo–Operation– Liefert Rest der ganzzahligen Division zurück.

Beispiel: 7%5 ergibt 2

à Deitel: 1.24

14

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Arithmetik: Evaluierungsreihenfolge

• Operatoren in Klammern werden als erstes ausgewertet (bei geschachtelter Klammerung innerste zuerst)

• Multiplikation, Division und Modulo als nächstes (von links nach rechts)

• Addition und Subtraktion als letztes (wieder von links nach rechts)

Page 8: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

8

15

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

1.6 Entscheidungen

• Lernziele:– Verständnis des if–Befehls (Entscheidungen)

– Erste Formulierung von Bedingungen– Gleichheit und relationale Operatoren– Erste Verwendung des Befehls using– Unterscheidung von Fehlerarten

• Unwichtgig (=„kommt später“):– Wie sieht der genaue Aufbau der neuen Befehle aus?

à Deitel: 1.25

16

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Programmtext, 1. Teil

1 // Fig. 1.14: fig01_14.cpp2 // Verwendung des Befehls if und von relationalen Operatoren3 4 #include <iostream>5 6 using std::cout; // Programm benutzt cout7 using std::cin; // Programm benutzt cin8 using std::endl; // Programm benutzt endl9 10 // bei Funktion main startet Programmausführung11 int main()12 {13 int zahl1; // erste vom Benutzer einzugebende Zahl14 int zahl2; // zweite vom Benutzer einzugebende Zahl15 16 cout << “Gib zwei Zahlen ein und ich ermittele “ << endl17 << “deren Relation: ";18 cin >> zahl1 >> zahl2; // lies die beiden ganzen Zahlen ein19 20 if ( zahl1 == zahl2 )21 cout << zahl1 << " ist gleich " << zahl2 << endl;22

using Befehle machen std:: Prefix überflüssig.

Schreibweise cout undcinohne std:: ist nun okay.

Deklariere Variablen.

if Befehl vergleicht Werte von zahl1 und zahl2 um auf Gleichheit zu überprüfen.

Wenn Bedingung wahr ist (d.h. Werte sind gleich), führe diesen Befehl aus.

Page 9: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

9

17

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Programmtext, Teil 2

23 if ( zahl1 != zahl2 )24 cout << zahl1 << " ist ungleich " << zahl2 << endl;25 26 if ( zahl1 < zahl2 )27 cout << zahl1 << " ist kleiner als " << zahl2 << endl;28 29 if ( zahl1 > zahl2 )30 cout << zahl1 << " ist größer als " << zahl2 << endl;31 32 if ( zahl1 <= zahl2 )33 cout << zahl1 << " ist kleiner oder gleich "34 << zahl2 << endl;35 36 if ( zahl1 >= zahl2 )37 cout << zahl1 << " ist größer oder gleich "38 << zahl2 << endl;39 40 return 0; // bedeutet, daß das Programm erfolgreich beendet ist41 42 } // beendet Funktion main

if Befehl vergleicht Wert von zahl1 undzahl2 um auf Ungleichheit zu überprüfen.

Wenn Bedingung wahr ist (d.h. Werte sind ungleich), führe diesen Befehl aus.

Befehle können auf mehrere Zeilen aufgeteilt werden.

18

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Beispiele der Programmausführung

Gib zwei Zahlen ein und ich ermittelederen Beziehung: 22 1222 ist ungleich 1222 ist größer als 1222 ist größer oder gleich 12

Gib zwei Zahlen ein und ich ermittelederen Beziehung: 7 77 ist gleich 77 ist kleiner oder gleich 77 ist größer oder gleich 7

Page 10: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

10

19

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Der if Befehl

• Der if Befehl– fälle eine Entscheidung auf Grund des Wahrheitsgehalts der

Bedingung– wenn Bedingung erfüllt ist, führe Körper aus– andernfalls wird Körper nicht ausgeführt

• Gleichheit und relationale Operatoren– Solange keine Klammern innerhalb der Ausdrücke ins Spiel

kommen gilt: Die Auswertung erfolgt bei allen diesen Operatoren gleichberechtigt, d.h. von links nach rechts.

20

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Relationale Operatoren

Operator C++--Operator Beispiel einer C++--Bedingung

Bedeutung der C++--Bedingung

Relationale Operatoren

> > x > y x ist größer als y

< < x < y x ist kleiner als y

≥ >= x >= y x ist größer als oder gleich y

≤ <= x <= y x ist kleiner als oder gleich y

Gleichheitsoperatoren

= == x == y x ist gleich y

≠ != x != y x ist nicht gleich y

Page 11: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

11

21

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Der Befehl using

• Bei Verwendung braucht Bereichsauflösungsoperator :: mit Namensraum std nicht mehr verwendet zu werden

• using std::cout;– Jetzt kann cout statt std::cout benutzt werden

22

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Fehlerarten

• Syntaxfehler– „Compilerfehler“– tritt dann auf, wenn der Compiler einen Befehl nicht

erkennen kann– Häufigste Ursachen (neben Tippfehlern):

• vergessenes Semikolon am Ende eines Befehls• vergessene Klammern• benutzte Variable nicht definiert

• logische Fehler– Laufzeitfehler– fatale logische Fehler führen zum Programmabbruch

• Beispielsweise Division durch 0– nichtfatale logische Fehler führen nicht zum Programm-

abbruch, resultieren aber meist in fehlerhaften Ergebnissen• häufig bei Verwendung von = an Stelle von ==

Page 12: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

12

23

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

2. Kontrollstrukturen

2.1 Einführung2.2 Arten von Kontrollstrukturen2.3 if–Auswahlstruktur 2.4 if/else–Auswahlstruktur2.5 while–Wiederholungsstruktur2.6 Zählergesteuerte Wiederholung2.7 Wiederholung mit „Abbruchwert“2.8 Schachtelung von Kontrollstrukturen2.9 Zuweisungen in C++2.10 for–Wiederholungsstruktur2.11 switch–Mehrfachauswahl–Struktur2.12 do/while–Wiederholungsstruktur2.13 break und continue2.14 Logische Operatoren2.15 Zusammenfassung

24

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

2.1 Einführung

• Vor Schreiben eines Programmes:– gutes Problemverständnis– Entwicklung eines Lösungsansatzes

• Während des Programmschreibens:– Welche „Programmstrukturen“ sind verfügbar?– Programmierprinzipien umsetzen

Page 13: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

13

25

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Algorithmen

• lösen Probleme durch Ausführung von Anweisungen (Befehlen) in einer vordefinierten Reihenfolge

• Vorüberlegungen:– Was muß getan werden?– In welcher Reihenfolge?– Beispiel: Kochrezept

• Kontrollfluß eines Programmes:– Reihenfolge in der die Anweisungen ausgeführt werden

sollen

26

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Pseudocode

• Künstliche, informelle Sprache zum Entwurf von Programmen

• Ähnlich zu gewöhnlichem Deutsch (bzw. Englisch)• Wird nicht vom Computer ausgeführt• dient zum Programmentwurf• Leicht in C++ umzusetzen• Enthält nur „ausführbare“ Befehle (also beispiels-

weise keine Variablendeklarationen)

Page 14: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

14

27

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

2.2 Arten von Kontrollstrukturen

• Sequentielle Ausführung– Befehle werden in vorgegebener Reihenfolge abgearbeitet

• Kontrollflußsprünge– Nächster ausgeführter Befehl nicht nächster Befehl in

Quelltext

• 3 Kontrollstrukturen:1. sequentielle Struktur

• Programm führt aufeinanderfolgende Befehle in angegebener Reihenfolge aus

2. Auswahlstrukturen• if, if/else, switch

3. Wiederholungsstrukturen• while, do/while, for

28

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Schlüsselwörter in C++

• Dürfen nicht als Funktions-/Variablen-/... namen verwendet werden

auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

asm bool catch class const_cast delete dynamic_cast explicit false friend inline mutable namespace new operator private protected public reinterpret_cast static_cast template this throw true try typeid typename using virtual wchar_t

Page 15: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

15

29

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Kontrollflußdiagramme

• graphische Repräsentation eines Algorithmus• spezielle Symbole durch Pfeile (Fluß) verbunden• Beispiel für sequentielle Ausführung:

30

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

2.3 if–Auswahlstruktur

• Wähle unter alternativen Ausführungssträngen• Beispiel in Pseudocode:

Wenn Punktzahl größer 60 istAusgabe “Bestanden”

• Wenn Bedingung wahr (true)– Print–Befehl wird ausgeführt, Programm fährt bei nächstem

Befehl fort

• Wenn Bedingung falsch (false)– Print–Befehl wird ignoriert und es wird beim nächsten Befehl

fortgefahren

• Adäquates Einrücken erhöht Programmlesbarkeit– Compiler ignoriert „whitespace“–Zeichen (Leerzeichen,

Tabulator, etc.)

Page 16: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

16

31

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

C++– und Kontrollflußdiagramm–Umsetzung

• Übersetzung in C++:Wenn Punktzahl größer 60 ist

Ausgabe “Bestanden”

if ( punkte > 60 ) cout << “Bestanden";

• im Kontrollflußdiagramm:– Raute (=Entscheidungssymbol)– Zeigt Entscheidung an, die gefällt werden muß– Enthält Ausdruck, der wahr oder falsch sein kann

• Überprüfe die Bedingung und folge entsprechendem Pfad im Diagramm

32

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Kontrollflußdiagrammumsetzung

Entscheidung kann auf Grund eines jeden Ausdrucks gefällt werden.

Null – falsch (false)

Nichtnull – wahr (true)

Beispiel:

3 - 4 ist wahr (true)

Page 17: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

17

33

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

if/else–Auswahlstruktur

• if–Befehl– führt Anweisung aus, wenn Bedingung wahr ist

• if/else–Befehl– unterschiedliche Anweisungen, wenn Bedingung wahr oder

falsch ist

• Pseudocode:Wenn Punktzahl größer 60 ist

Ausgabe “Bestanden”sonst

Ausgabe “Durchgefallen”

• C++–Code:if ( punkte > 60 )

cout << “Bestanden";else

cout << “Durchgefallen";

34

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Kontrollflußdiagrammumsetzung

Page 18: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

18

35

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Geschachtelte if/else–Befehle

• Zum Testen auf unterschiedliche Fälle• Sobald eine der Bedingungen erfüllt ist, wird

abgebrochenWenn Punktzahl größer 90 ist

Ausgabe “sehr gut”sonst

Wenn Punktzahl größer 80 istAusgabe “gut”sonst

Wenn Punktzahl größer 70 istAusgabe “befriedigend”

sonst Wenn Punktzahl größer 60 ist

Ausgabe “ausreichend”sonst

Ausgabe “mangelhaft”

36

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Geschachtelte if/else–Befehle

• C++–Code:

if ( punkte > 90 ) // über 90cout << “sehr gut";

else if ( punkte > 80 ) // 81-90cout << “gut";

else if ( punkte > 70 ) // 71-80cout << “befriedigend";

else if ( punkte > 60 ) // 61-70cout << “ausreichend";

else // less than 61cout << “mangelhaft";

Page 19: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

19

37

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Gruppierung von Befehlen

• durch mehrere Befehle in einem paar geschweifter Klammern:if ( punkte > 60 )

cout << “Bestanden.“ << endl;else {

cout << “Durchgefallen.“ << endl;cout << “Der Kurs muß wiederholt werden.“ << endl;

}• Ohne Klammern würde zweiter Befehl

cout << “Der Kurs muß wiederholt werden.“ << endl;

immer ausgeführt.• Befehlsblock:

– Menge an Befehlen innerhalb von Klammern

38

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

2.5 while–Wiederholungsstruktur

• Wiederholungsstruktur:– Aktion wird solange ausgeführt wie Bedingung wahr bleibt– Pseudocode:

Solange noch Gegenstände auf meinem Einkaufszettel stehenKaufe nächsten Gegenstand und streiche ihn von Zettel

– while–Bedingung bricht ab, sobald Bedingung nicht mehr erfüllt ist

• Beispiel in C++:int product = 2;while ( product <= 1000 )

product = 2 * product;

Page 20: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

20

39

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Kontrollflußdiagramm while

40

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

2.6 Zählergesteuerte Wiederholung

• Schleife wird durchlaufen bis Zähler bestimmten Wert erreicht

• Anzahl an Wiederholungen ist fest vorgegeben

• Beispiel:Eine Kurs mit 10 Studenten hat einen Test geschrieben. Die Punktzahlen (ganze Zahlen zwischen 0 und 100) der Bewertung sind verfügbar. Ermittle die durchschnittliche Punktzahl aller Kursteilnehmer indiesem Test.

Page 21: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

21

41

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Pseudocode für „Durchschnittspunktzahl“

Setze Summe auf NullSetze Anzahl auf NullSolange Anzahl kleiner oder gleich Zehn ist

Lies nächste Punktzahl einFüge ihn Summe hinzuZähle Anzahl eins hoch

Setze Kursdurchschnitt auf “Summe” / 10Ausgabe Kursdurchschnitt

42

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

C++–Code für „Durchschnittspunktzahl“ (1)

1 // Fig. 2.7: fig02_07.cpp2 // Class average program with counter-controlled repetition.3 #include <iostream>4 5 using std::cout;6 using std::cin;7 using std::endl;8 9 // function main begins program execution10 int main()11 {12 int summe; // Summe der bisher eingegebenen Punktzahlen13 int anzahl; // Nummer der nächsten eingegebenen Punktzahl14 int punkte; // gerade eingegebene Punktzahl15 int durchschnitt; // Durchschnitt der Punktzahlen16 17 // Initialisierungsphase18 summe = 0; // initialisiere Summe19 anzahl = 1; // initialisiere Schleifenzähler20

Page 22: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

22

43

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

C++–Code für „Durchschnittspunktzahl“ (2)

21 // Verarbeitungsphase22 while ( anzahl <= 10 ) { // 10 Schleifendurchläufe23 cout << “Gibt Punktzahl ein: "; // Eingabeaufforderung24 cin >> punkte; // lies Punkte vom Benutzer25 summe = summe + punkte; // addiere Punkte zu Summe26 anzahl = anzahl + 1; // erhöhe Zähler27 }28 29 // Beendigung30 durchschnitt = summe / 10; // ganzzahlige division31 32 // Ergebnis anzeigen33 cout << “Durchschnittspunktzahl ist " << durchschnitt << endl; 34 35 return 0; // indicate program ended successfully36 37 } // end function main

Der Zähler wird bei jedem Schleifen-durchlauf erhöht. Nach dem 10. Durchlauf beendet er die Schleife.

44

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Ausgabe von „Durchschnittspunktzahl“

Gib Punktzahl ein: 98Gib Punktzahl ein: 76Gib Punktzahl ein: 71Gib Punktzahl ein: 87Gib Punktzahl ein: 83Gib Punktzahl ein: 90Gib Punktzahl ein: 57Gib Punktzahl ein: 79Gib Punktzahl ein: 82Gib Punktzahl ein: 94Durchschnittspunktzahl ist 81

Page 23: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

23

45

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

2.7 Wiederholung mit „Abbruchwert“

• Sei das Problem nun wie folgt:Entwickle ein Durchschnittsermittlungsprogramm das eine nicht vorher bekannte Menge an Punktzahlen bearbeitet.

• Probleme:– Unbekannte Anzahl an Punktzahlen– Wie soll Programm wissen, wann Ende ist?

• „Abbruchwert“– bedeutet „Ende der Daten“– Schleife bricht nach Eingabe des Abbruchwerts ab

– Abbruchwert muß so gewählt werden, daß er nicht mit regulärer Eingabe verwechselt werden kann!

• Hier z.B. „-1“

46

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Algorithmenentwurf: „Top–Down“

• schrittweise Verfeinerung• Beginne mit Pseudocode für oberste (=ungenaueste)

Ebene:Ermittle den Kursdurchschnitt des Test

• Verfeinere in kleinere Teile:Initialisiere VariablenLies Punkte ein, summiere und zähle sieDurchschnitt berechnen und ausgeben

Page 24: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

24

47

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Verfeinerungsschritte

• Verfeinere Initialisierungsphase:Initialisiere Variablen

wird zuInitialisiere Summe auf NullInitialisiere Anzahl auf Null

• Verarbeitungsphase:Lies Punkte ein, summiere und zähle sie

wird zuLies erste Punktzahl ein (evtl. Abbruchwert)Solange Benutzer noch nicht Abbruchwert eingegeben hat

Füge diese Zahl in Gesamtsumme einZähle eins zur Anzahl hinzuLies nächste Punktzahl ein (evtl. Abbruchwert)

48

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Verfeinerungsschritte

• BeendigungDurchschnitt berechnen und ausgeben

wird zuWenn der Zähler nicht Null ist

Setze Durchschnitt auf Punktzahl / AnzahlAusgabe Durchschnitt

SonstAusgabe „Es wurden keine Punktzahlen eingegeben!“

Page 25: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

25

49

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Quellcode „Durchschnittsberechnung 2“ (1)

1 // Fig. 2.9: fig02_09.cpp2 // Class average program with sentinel-controlled repetition.3 #include <iostream>4 5 using std::cout;6 using std::cin;7 using std::endl;8 using std::fixed; // Fließkommaausgabe im Format 88.009 10 #include <iomanip> // Stream-Manipulatoren11 12 using std::setprecision; // Setzt numerische Ausgabeprzision 13 14 // function main begins program execution15 int main()16 {17 int summe; // Summe der Punkte18 int anzahl; // Anzahl eingegebener Punktezahlen19 int punkte; // aktuelle Punktzahl20 21 double durchschnitt; // Fließkommazahl zur Durchschnittsberechnung22

Datentyp double zum Speichern von Dezimalzahlen.

50

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Quellcode „Durchschnittsberechnung 2“ (2)

23 // Initialisierungsphase24 summe = 0; // initialisiere Summe25 anzahl = 0; // initialisiere Anzahl26 27 // Verarbeitungsphase28 // lies erste Zahl vom Benutzer ein29 cout << “Gib Punkte ein, -1 zum Beenden: "; // Eingabeaufforderung30 cin >> punkte; // Lies Punkte vom Benutzer31 32 // wiederhole solange Abbruchwert nicht eingegeben33 while ( punkte != -1 ) { 34 summe = summe + punkte; // füge Punkte zur Summe hinzu35 anzahl = anzahl + 1; // erhöhe Zähler36 37 cout << “Gib Punkte ein, -1 zum Beenden: "; // Eingabeaufforderung38 cin >> punkte; // Lies Punkte vom Benutzer39 40 } // end while41

Page 26: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

26

51

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Quellcode „Durchschnittsberechnung 2“ (3)

42 // Beendigung43 // Wenn Benutzer mindestens eine Punktzahl eingegeben hat ...44 if ( anzahl > 0 ) {45 46 // berechne Durchschnitt aller eingegebenen Punktzahlen47 durchschnitt = static_cast<double>( summe ) / anzahl;4849 // zeige Durchschnitt mit zwei Nachkommastellen Genauigkeit an50 cout << “Durchschnittspunktzahl ist " << setprecision( 2 )51 << fixed << durchschnitt << endl;52

53 } // end if part of if/else54 55 else // wenn keine Punktzahlen eingegeben wurden gib entspr. aus56 cout << “Es wurden keine Punktzahlen eingegeben!" << endl;57 58 return 0; // indicate program ended successfully59 60 } // end function main

52

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Quellcode „Durchschnittsberechnung 2“ (3)

42 // Beendigung43 // Wenn Benutzer mindestens eine Punktzahl eingegeben hat ...44 if ( anzahl > 0 ) {45 46 // berechne Durchschnitt aller eingegebenen Punktzahlen47 durchschnitt = static_cast<double>( summe ) / anzahl;4849 // zeige Durchschnitt mit zwei Nachkommastellen Genauigkeit an50 cout << “Durchschnittspunktzahl ist " << setprecision( 2 )51 << fixed << durchschnitt << endl;52

53 } // end if part of if/else54 55 else // wenn keine Punktzahlen eingegeben wurden gib entspr. aus56 cout << “Es wurden keine Punktzahlen eingegeben!" << endl;57 58 return 0; // indicate program ended successfully59 60 } // end function main

static_cast<double>() behandelt summetemporär als double (casting).Benötigt, da ganzzahlige Division Rest abschneidet.

setprecision(2)gibt zwei Ziffern nach Dezimalpunkt aus (entsprechend gerundet).

Zur Benutzung <iomanip> einbinden.fixed zwingt zur Ausgabe im “fixed point” Format für Dezimalzahlen (nicht wissenschaftliches Format).

<iostream> einbinden.

Page 27: C++ Programmierkurs€¦ · Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader 1. Teil: Addition zweier Zahlen 1 // Fig. 1.6: fig01_06.cpp 2

27

53

Programmierkurs C++ – WS 04/05 Christian Hagemeier – Lehrstuhl Prof. Dr. Schrader

Ausgabe „Durchschnittsberechnung 2“

Gib Punkte ein, -1 zum Beenden: 75Gib Punkte ein, -1 zum Beenden: 94Gib Punkte ein, -1 zum Beenden: 97Gib Punkte ein, -1 zum Beenden: 88Gib Punkte ein, -1 zum Beenden: 70Gib Punkte ein, -1 zum Beenden: 64Gib Punkte ein, -1 zum Beenden: 83Gib Punkte ein, -1 zum Beenden: 89Gib Punkte ein, -1 zum Beenden: -1Durchschnittspunktzahl ist 82.50