80
Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren ... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Embed Size (px)

Citation preview

Page 1: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Programmieren ... in C++

Page 2: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Ziele dieser Vorlesung

Auffrischen / Kennenlernen nicht objektorientierter Eigenschaften der Sprache C++

Kennenlernen und Einüben des Objektansatzes (Objekte und Klassen) ... siehe gesondertes Skript; dazu zählen Begriffe wie Konstruktoren, Destruktoren, Überladen von Funktionen und Operatoren

Realisieren eines Projekts „Einlesen von Punktdaten und Ausgabe in XML“

Meine Vorstellung: mindestens 1 Mal pro Woche zusätzliches (Programmier-) Üben!

Page 3: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Literatur

P.Prinz, U.Kirch-Prinz: C ++, Lernen und professionell anwenden, MITP-Verlag, 1999

Martin Auppele: Die Kunst der Programmierung mit C++. Exakte Grundlagen für die professionelle Softwareentwicklung. Vieweg, ISBN 3-528-15481-0, 1042 S.

Stroustrup, Bjarne: Die C++-Programmiersprache; Addison-Wesley, 2000, 1048 S.

Nootz, Petra / Morick, Franz: C / C++ Referenz; Franzis' Louis, Dirk: C/C++ Kompendium, Markt & Technik, 2000, 1259 S.

Page 4: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Der Softwareentwicklungszyklus

EditierenHauptspeicher

Laden*.cpp Sichern

*.cpp

*.O BJ

*.EXE

Linken

Sicherungskopie

*.BAK

(M em ory)

Übersetzen

Ausführen

B ib lio theken

Datenträger(Festplatte,Diskette)

Page 5: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Programmsource

C++-Programm: Textdatei, die den Programmcode (Source) enthält, Datennamenserweiterung: .cpp oder cc

wird mit Editor bzw. in einer Entwicklungsumgebung erstellt ... und korrigiert muss vom Compiler übersetzt werden ==> Ergebnis: sogenanntes Object

File. enthält die für den Computer ,,übersetzten`` Informationen der

Programmdatei. In der Regel: Name eines Object Files = Namen des Source Files mit der

Endung – .obj (MSDOS, Windows oder OS/2)– beziehungsweise .o (Unix).

Page 6: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Linken

Object Files nicht direkt ausführbar benötigen spezielle Codeteile für die Ausführung, die nicht selbst

programmiert werden müssen.– vordefinierten Funktionen und Objekten, deren Definitionen nicht im Source File

enthalten sind (zum Beispiel die Ein-/Ausgaben).– in bereits fertig übersetzten Teilen, den sogenannten "Bibliotheken" (Libraries)

abgelegt.

Um aus einem Object File ein ausführbares Programm (.exe) zu machen, ist es daher nötig, dieses mit den benötigten Bibliotheken zu linken (Deutsch: binden). Erst durch diesen Schritt wird ein ausführbares Programm erzeugt.

Page 7: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Projektphasen

Analyse

Algorithmus

Editieren

Compilieren

Linken

Testen

Projektphasen

Page 8: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Algorithmus

Eingangsgrößen

! Gegenstände

! E igenschaften

! Beziehungen

Ergebnisgrößen

! Gegenstände

! E igenschaften

! Beziehungen

Program m interneGrößen

! Datentypen

! Variablen

! Konstante

A lgorithm us

A bstrak tion In te rp re ta tion

A usgabe

Lösung des P rob lem s:

! Verarbe itungsrege ln! Transfo rm ation

??? !!!

Eingangsgrößen

! Gegenstände

! E igenschaften

! Beziehungen

Ergebnisgrößen

! Gegenstände

! E igenschaften

! Beziehungen

Program m interneGrößen

! Datentypen

! Variablen

! Konstante

A lgorithm us

A bstrak tion In te rp re ta tion

A usgabe

Lösung des P rob lem s:

! Verarbe itungsrege ln! Transfo rm ation

??? !!!

Page 9: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Prinzip “Teile und Herrsche”

Ein komplexeres Problem wird in Teilaufgaben zerlegt. Für jede Teilaufgabe wird ein entsprechender Lösungsalgortihmus

entwickelt.

P roblem

Teilproblem 1

Teilproblem 2

Teilproblem n

...

...

Te ila lgorithm us 1

...

...Te ila lgorithm us 2

Teila lgorithm us n

Page 10: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

“Teile und Herrsche” II

Die Teilalgorithmen werden in Funktionen abgebildet. Funktionen kommunizieren untereinander. Die Gesamtheit der Funktionen bilden das Programm.

Im p lem en-tie rung

P roblem

Teilproblem 1

Teilproblem 2

Teilproblem n

...

...

P rogram m

Funktion 1

Funktion 2

Funktion n

...

...

Page 11: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Dokumentieren eines Algorithmus’

Drei wesentliche Verfahren:

– Umgangssprachliche Beschreibung

– Programmablaufplan

– Struktogramm (Nassi-Shneiderman-Diagramm)

Page 12: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Programmablaufplan

Fummel bloß nicht dran rum!

Du armesSchwein!

Hat es jemandgemerkt?

Alles klar!

Du Rindvieh!

Beginn

Kannst Du jemandem die Schuld zuschieben?

Kümmer' Dichnicht drum!

Hast Du daranherumgespeilt?

Wird man Dichverantwortlich

machen?

Funktioniertdie Anlage?

nein

ja

nein

nein

nein

nein

ja

ja

jaja

Pfeife unauffällig "La Paloma" und verschwinde!

Page 13: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Das übliche “Hello World”

//File: hello.cpp

// Schnittstelle von iostream inkludieren // iostream ist ein vordefiniertes Modul, daher wird // der Name mit den Zeichen <> begrenzt#include <iostream.h> // "Hauptprogramm"int main(int argc, char* argv[]){

using namespace std; cout << "Hello world!" << "\n" << "\n"; return 0;}

Page 14: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Symbole, die Bausteine des Programms

Programmtexte bestehen aus einer Folge von Symbolen (engl. token). Symbol: nicht Signet oder Pictogramm, sondern

– Wortsymbol,– Bezeichner,– Zahlen,– Spezialsymbole oder– Zeichenketten, Zeichenkonstanten.

Symbole durch Trennzeichen voneinander getrennt. Symbole dürfen - auch wenn sie aus mehreren Zeichen bestehen - nie auf

zwei oder mehrere Zeilen verteilt werden.

Page 15: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Trennzeichen

Trennzeichen (white spaces) trennen Symbole voneinander. Trennzeichen sind z.B.

– das Zeilenendezeichen (carriage return),

– das Leerzeichen,

– der Tabulator (innerhalb der IDE),

– ein Kommentar.

Zwischen aufeinanderfolgenden Bezeichnern, Wortsymbolen oder Zahlen muss mindestens ein Trennzeichen eingefügt werden.

Page 16: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Wortsymbole

Wortsymbole der Sprache Cauto double int structbreak else long switchcase enum register typedefchar extern return unionconst float short unsignedcontinue for signed voiddefault goto sizeof volatiledo if static while

zusätzliche Wortsymbole der Sprache C++

asm friend private this class inlineprotected throw catch new public try

delete operator tempplate virtual

Page 17: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Bezeichner

Bezeichner werden vom Programmierer selbst festgelegt und mit einer Bedeutung versehen.

Für Bezeichner gilt:– Ein Bezeichner muss mit einem Buchstaben beginnen, auf den eine

beliebige Kombination von Buchstaben und Ziffern und Unterstrichen "" folgen kann.

– Ein Bezeichner kann beliebig lang sein.

– Bis zu 31 Zeichen sind signifikant.

– Bezeichner dürfen keine Spezialsymbole enthalten.

Page 18: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Bezeichner II

Im Gegenteil zu vielen anderen Sprachen verstehen C und C++ Klein- und Großbuchstaben als völlig unterschiedliche Zeichen. Sie können beispielsweise drei unterschiedliche Variablen

int var1 Var1 VAR1;deklarieren, auch wenn dies normalerweise wenig sinnvoll ist und fehleranfällig ist.

Deutsche Sonderzeichen ä, ö, ü, ß, Ä, Ö und Ü nicht für Bezeichner zulässig.

Deutsche Sonderzeichen: jedoch in Zeichenketten und Kommentaren innerhalb eines Programms zulässig, sofern die oberen 128 Zeichen des erweiterten ASCII-Zeichensatzes unterstützt werden.

Page 19: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Bezeichner III

Beispiele für korrekte Bezeichner sind:– Donaudampfschiffahrtsgesellschaft

– a

– a1

– Pi

– richtiger_Bezeichner.

Beispiele für unzulässige Bezeichner sind– Donaudampfschiffahrts-Gesellschaft

– a?

– 1a

– falscher Bezeichner.

Page 20: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Konventionen I

Traditionell: Namen von normalen Variablen und Funktionen werden immer ausschließlich mit Kleinbuchstaben, Unterstrichen und Ziffern geschrieben. Großbuchstaben werden vermieden.

Um Konflikte mit Systemvariablen zu vermeiden: Eigene Variablen nur dann mit einem Unterstrich beginnen lassen, wenn Sie einen Konflikt mit Systemvariablen Ihres Compiler ausschließen können.

Symbolische Konstanten werden normalerweise ausschließlich mit Großbuchstaben, Ziffern und Unterstrichen geschrieben. Kleinbuchstaben werden vermieden. Beispiele sind:

#define MWST 0.16#define TRUE 1

Page 21: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Konventionen II

Aufbauend auf Notation von Charles Simonyi (ungar, Herkunft, Fa. Microsoft): Ungarische Notation, basierend auf Basistyp und Typableitung

Index (integer): i float: ft double float: dft long int: l C-Zeichenkette: sz Zeichen (char): ch ...

unsigned: u long: l Zeiger (pointer):

p ...

Page 22: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Zahlen

ganzzahlig (0, 1, -1, 2, -2, ...) oder reell (0.0, 0.0001, -0.5, ...) häufig dezimale Schreibweise, auch Angaben im Oktal- und Hexadezimalsystem (Sedezimalsystem)

möglich. Jeder Zahl kann ein negatives Vorzeichen (-) vorangestellt sein. Das Komma wird durch den Dezimalpunkt dargestellt. Reelle Werte werden mit Dezimalpunkt, in Exponentialdarstellung oder in

einer Kombination aus beiden geschrieben. Bei der Exponentialschreibweise bedeutet der dem Exponenten

vorangestellte Buchstabe E (oder e) "mal 10 hoch". Bei reellen Zahlen ist zu beachten, dass vor und nach dem Dezimalpunkt jeweils zumindest eine Ziffer stehen muss.

Page 23: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Zahlen II

Beispiele für korrekte Zahlen sind: 1 +2 -9 3.14 5E-9 47.11e10 0x12 0123.

Beispiele für unzulässige Zahlen sind: .1 +2. -9E 3,14 MDCXXI 5E-neun 4711*E10 .

Daneben gibt es noch einige Erweiterungen, die über die uns vertraute Art der Zahlendarstellung hinausgehen.

Page 24: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Spezialsymbole

[ ( ->* .* ] ( . -> ++ -- & * + - ~ ! / % << >> < > <= >= == != ^ | && || ?: = *= /= %= += -= <<= >>= &= ^= |= , # ## ::

[ ( ->* .* ] ( . -> ++ -- & * + - ~ ! / % << >> < > <= >= == != ^ | && || ?: = *= /= %= += -= <<= >>= &= ^= |= , # ## ::

Page 25: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Trigraph-Zeichen

Trigraphs sind Folgen von drei Zeichen, die in der Sprache C bestimmte (Sonder-)Zeichen ersetzen, die auf manchen Tastaturen (z. B. wie früher in Host-Umgebungen) nicht vorhanden sind.

TrigraphZeichen??= #??( [??/ \??) ]??' ^??< {??! |??> }??- ~

TrigraphZeichen??= #??( [??/ \??) ]??' ^??< {??! |??> }??- ~

Page 26: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Zeichenketten

Als Zeichenketten werden Folgen von Zeichen (Buchstaben, Ziffern, Sonderzeichen) bezeichnet, die in doppelte Hochkommata ("') eingeschlossen sind, wie z.B.

"Hallo FJB""a""Zeichenkette""3.14""Diese Zeichenkette hat 33 Zeichen".

Soll ein Hochkomma in eine Zeichenkette eingeschlossen werden, muss es doppelt erscheinen:

cout << "Dies zeigt uns Goethes ""Faust""." ;

Page 27: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Zeichenkonstanten

Zeichen aus dem Zeichensatz und müssen in einzelne Hochkommata eingeschlossen werden, wie z.B.

'A' 'a' '?' '\'' Ein Zeichen kann über seine dreistellige oktale Ordnungszahl spezifiziert

werden:'\211'

oder durch eine hexadezimale Darstellung:'\x11'

Gewisse Zeichen können in Zeichenkonstanten und in konstanten Zeichenketten mit Hilfe von Ersatzdarstellungen angegeben werden, die zwar wie zwei Zeichen aussehen, jedoch nur ein Zeichen repräsentieren. Meist handelt es sich dabei um Steuerzeichen, wie z.B.

\n Zeilenvorschub (Zeilentrenner, neue Zeile, newline).\t Tabulator

Page 28: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Die Funktion main

In jedem [Konsolen-] C-/C++-Programm kommt die Funktion main genau ein Mal vor.

main ist die Hauptfunktion jedes C/C++-Programms und wird vom C++-Laufzeitsystem beim Programmstart automatisch aktiviert.

An main können von der Kommandozeile aus Parameter übergeben werden. Standardmäßig hat dazu main zwei Parameter: argc und argv.

Optional kann zusätzlich der Parameter envp verwendet werden.

Page 29: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Programmrahmen

// short description of your program// include section#include <iostream>using namespace std;// global constants sectionconst char* PROGNAME = "bgrund";const char* VERSION = "0.0.5";const char* HELPTEXT = "Only shows prog frame";

int main(int argc, char *argv[], char *env[]) {

cout << PROGNAME << endl << VERSION << HELPTEXT << endl;

// here comes your codereturn 0;

}

Page 30: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Aufbau von main

Prototypdefinition:

int main(int argc, char* argv[ ]);

beziehungsweise

int main(int argc, char* argv[ ], char* envp[ ]);

– argc: Anzahl der Argumente, immer >= 1 , da Name des Programms automatisch als Argument übergeben wird.

– argv: Feld, das die Argumente (Zeichenketten) enthält. – envp: aufgebaut wie argv, enthält aber Zeiger auf die Umgebungs-

variablen. envp muß nicht verwendet werden. Wird es verwendet, so müssen auch die beiden anderen Parameter deklariert werden.

Page 31: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Inhalt des Argumentvektors

Der Argumentvektor argv enthält im Detail folgende Einträge:

– argv[0] enthält den Programmnamen,

– argv[1] enthält das erste Argument,

– ...

– argv[argc] enthält den Wert 0.

Page 32: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Argumente anzeigen

//File: mainargs.cpp// shows command arguments#include <iostream>using namespace std;int main(int argc, char *argv[], char *env[]) {

int i;cout << "Der Wert von argc ist " << argc << endl;

cout << "Dies sind die Kommandozeilen-Parameter, uebergeben an main:"

<< endl << endl;for (i = 0; i < argc; i++)

cout << "argv[" << i << "] = " << argv[i] << "\n";cout << "\nDie Umgebungsvariable(n) sind:" << endl << endl;for (i = 0; env[i] != NULL; i++)

cout << "envv[" << i << "] = " << env[i] << "\n";return 0;}

Page 33: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Argumente anzeigen: Ergebnis

Page 34: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Abfrage von Optionen bei Programmaufruf

bool CommandLineOptionExists(const int argc, char *argv[], const char* szPattern){

for (int i=0; argv[i]!=0; ++i){

if (strcmp(argv[i],szPattern) == 0){

return true;}

}return false;

}

if (CommandLineOptionExists(argc, argv, "-debug")){ ...

Aufruf mit:

Page 35: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Einen Umgebungsparameter abfragen

char * GetEnvironmentParameter(char* envp[],char* szTest, char* szDefault){ for (int i = 0; envp[i] != NULL; i++) { if (envp[i] != NULL) { if (strstr(envp[i],szTest)) // test, ob 2. Zeichenkette in 1. Enthalten { char* szTestString = envp[i]; char* pszLastToken; char* szSeparator = "="; char* pszPosition = szTestString; pszPosition = strtok(szTestString,szSeparator); while (pszPosition) { if ((pszPosition = strtok(0,szSeparator)) != 0) { pszLastToken = pszPosition; } } return pszLastToken; } } return pszDefault;}

Page 36: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Lesbarkeit!

// Acht-Damen-problem// 1990 als Sieger beim jährlichen Obfuscated C Code Contest// hervorgegangen - Kategorie Best Small Program.

v,i,j,k,l,s,a[99];main() { for(scanf("%d",&s);*a-s;v=a[j*=v]-a[i],k=i<s,j+=(v=j< s&&(!k&&!!printf(2+"\n\n%c"-(!l<<!j)," #Q"[l^v?(l^j) &1:2])&&++l||a[i]<s&&v&&v-i+j&&v+i-j))&&!(l%=s),v|| (i==j?a[i+=k]=0:++a[i])>=s*k&&++a[--i]);}

Quelle: C++ Programmieren mit Stil, Thomas Strasser dpunkt Verlag 1997

Page 37: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Lesbarkeit II

#include <stdlib.h>

#include <stdio.h>

main(l

,a,n,d)char**a;{

for(d=atoi(a[1])/10*80-

atoi(a[2])/5-596;n="@NKA\

CLCCGZAAQBEAADAFaISADJABBA^\

SNLGAQABDAXIMBAACTBATAHDBAN\

ZcEMMCCCCAAhEIJFAEAAABAfHJE\

TBdFLDAANEfDNBPHdBcBBBEA_AL\

H E L L O, W O R L D! "

[l++-3];)for(;n-->64;)

putchar(!d+++33^

l&1);}

#include <stdlib.h>

#include <stdio.h>

main(l

,a,n,d)char**a;{

for(d=atoi(a[1])/10*80-

atoi(a[2])/5-596;n="@NKA\

CLCCGZAAQBEAADAFaISADJABBA^\

SNLGAQABDAXIMBAACTBATAHDBAN\

ZcEMMCCCCAAhEIJFAEAAABAfHJE\

TBdFLDAANEfDNBPHdBcBBBEA_AL\

H E L L O, W O R L D! "

[l++-3];)for(;n-->64;)

putchar(!d+++33^

l&1);}

Aufruf mit weltkart 50 50 (Quelle: Rolf Isernhagen)

Page 38: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Kommentare

Zwei Formen:– // Kommentar: Dieser Kommentar erstreckt sich bis zum Zeilenende

(nur C++).

– /* Kommentar: Dieser Kommentar kann über mehrere Zeilen gehen. Alles was zwischen /* und */ ist ein Kommentar */

Innerhalb des Zeilenkommentars haben die Zeichen /* */ keine besondere Bedeutung, ebensowenig die Zeichen // innerhalb des /* */-Kommentars.

Page 39: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Sie erzeugen gut lesbare...

überschaubare und pflegbare Programme, wenn Sie den Quelltext

– durch Leerzeilen sinnvoll gliedern,

– mit Kommentaren versehen,

– pro Zeile nur eine Anweisung schreiben,

– den Programmsource je Blockebene um mindestens zwei Zeichen einrücken!

Page 40: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Kontrollstrukturen

Verzweigung do-Schleife (annehmende Schleife) while-Schleife (abweisende Schleife) for-Schleife

Page 41: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Verzweigung

Arten– unvollständige Alternative

– vollständige Alternative

– Mehrfachverzweigung

– Fallauswahl

Page 42: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Unvollständige Alternative (if)

Struktogramm

Ausdruckwahr falsch

Anweisung1

Pseudocode

IF bedingung THEN anweisungsfolgeEND IF

Syntaxdiagramm

Page 43: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

If-Anweisung

Ausdruck nach if wird ausgewertet und mit true (!=0) verglichen: Ausdruck !=0

nachfolgende Anweisungen werden ausgeführt.

Page 44: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Beispiel

float konto, temperatur;int hunger, durst;

if ( konto > 10 ) essen_bestellen();

if ( konto ) /* entspricht if ( konto != 0 ) */ essen_bestellen();

if ( (konto > 20) && (temperatur >= 25) ) { essen_bestellen(); trinken_bestellen(); }

if ( (konto > 20) || hunger || durst ) { essen_bestellen(); trinken_bestellen(); }

Quelle: P. Böhme, http://www.informatik.uni-halle.de/~boehme/

Page 45: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Fallen bei if-Konstrukten

Wertzuweisung statt Vergleich

if (temperatur = 25) { ... }/* statt von temperatur == 25 */

temperatur = 25 realisiert eine Wertzuweisung anstelle eines Vergleichs und ist immer "wahr".Es treten zwei unbeabsichtigte Effekte auf:

• der Wert von temperatur wird verändert • die an die if-Anweisung geknüpfte Aktion wird immer ausgeführt

Page 46: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

C-Spezialität

Der im Rahmen des if-Konstrukts ausgewertete Ausdruck kann mit einer Wertzuweisung an eine Variable kombiniert werden:

Besser:

FILE *f;if ( ( f = fopen(filename, "r") ) == NULL ) { perror(filename); /* Fehlermeldung*/ exit(1); /* Programmabbruch, Rueckkehrcode 1 */}

f = fopen(filename, "r");if ( f == NULL ) { ... }

Page 47: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Vollständige Alternative (if ... else)

Struktogramm

Ausdruckwahr falsch

Anweisung1 Anweisung2

Pseudocode

IF bedingung THEN anweisungsfolgeELSE anweisungsfolgeEND IF

Beispiel

if (a >= b) // Maximum zweier Zahlen ermitteln max = a;else max = b;

Page 48: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Ausdruck nach if wird ausgewertet und mit true (!=0) verglichen: Ausdruck !=0

nachfolgende Anweisungen werden ausgeführt. Ausdruck ==0

optionaler else-Zweig wird abgearbeitet

Page 49: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Hinweise

Bei fehlender Klammerung wird ein else-Zweig immer dem letzten if zugeordnet, welches noch nicht mit einem else versehen ist.

Bei der Verschachtelung von if - else - Konstrukten sollte– durch { } die Zuordnung deutlich sichtbar gemacht werden

– der Anweisungstext mehrzeilig mit Einrückungen entsprechend der Strukturtiefe notiert werden ( günstig sind Einrückungen um zwei bis vier Spalten

Grundsätzlich: keine zu tiefen Verschachtelungen

Page 50: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Mehrfache Alternativen (else if)

Ausdruck_1wahr falsch

wahr

Ausdruck_2

falsch

wahr

Ausdruck_3

falschAnweisung_1

Anweisung_2 Anweisung_3 Anweisung_else

Struktogramm Pseudocode

IF bedingung_1 THEN anweisungsfolge_1ELSIF bedingung_2 THEN anweisungsfolge_2 ...ELSE anweisungsfolge_nEND IF

Page 51: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Mehrfache Alternativen: Beispiel

Beispiel

enum wtag {montag, dienstag, mittwoch, donnerstag, freitag, samstag, sonntag} wochentag; float : konto, minimum; if ( (wochentag == samstag) && (konto > minimum)) feiern(); else if ( (wochentag == sonntag) && (konto > minimum)) ausruhen(); else arbeiten();

Page 52: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Fallauswahl (case)

Ausdruck

case1 case2 ..... caseN default

Struktogramm PseudocodeSELECT ausdruck CASE fall_1: anweisungsfolge_1 ... CASE fall_n: anweisungsfolge_n ELSE anweisungsfolge_0END SELECT

Page 53: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Fallauswahl (case) II

Ausdruck (... ganzzahlige Variable) wird ausgewertet (Schalter) Konstante Ausdrücke nach case entsprechen Sprungmarken Ausführung der zugehörigen Anweisungen bei Übereinstimmung Sprung an Ende mit break, sonst weitere Anweisungen ausführen Keine Übereinstimmung default-Anweisung ausführen

Qu

ell

e:

Gle

nn

La

ng

em

eie

r,U

ni

Hil

de

sh

eim

Page 54: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Fallauswahl: Beispiel

char choice;

choice = GetChoice();switch (choice){ case 'A': case 'a': ProcessChoiceA(); break; case 'B': case 'b': ProcessChoiceB(); break; // other cases for other choice possibilities default: cout << "Invalid choice \n";}

char choice;

choice = GetChoice();switch (choice){ case 'A': case 'a': ProcessChoiceA(); break; case 'B': case 'b': ProcessChoiceB(); break; // other cases for other choice possibilities default: cout << "Invalid choice \n";}

Page 55: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Wiederholungsanweisungen

In vielen Fällen ist es nötig, Teile eines Programmes wiederholt abzuarbeiten; dabei spricht man auch von Schleifen innerhalb des Programms. C++ sieht hierfür drei verschiedene Kontrollstrukturen vor: – die do-Schleife, – die while-Schleife, – die for-Schleife.

Der Schleifenrumpf enthält zu wiederholende Anweisungsfolge Grundsätzlich lassen sich Schleifenkonstruktionen auch über

Sprunganweisungen und Sprungmarken realisieren; dies ist jedoch aus Gründen einer korrekten Programmstruktur zu vermeiden.

Page 56: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Annehmende Schleife (do ... while)

Struktogramm Pseudocode

do AnweisungWhile (Ausdruck);

solange Ausdruck

Anweisung

doStatement

while ExpressionStatement ( )do ;

Syntaxdiagramm

Qu

ell

e:

Gle

nn

La

ng

em

eie

r,U

ni

Hil

de

sh

eim

Page 57: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Do-Schleife: Beispiele

int zahl1, zahl2;do{ cout << "Bitte 2 mal dieselbe Zahl eingeben:"; cin >> zahl1 >> zahl2;} while( zahl1 != zahl2 );cout << "Na also, es geht doch ;-)" << endl;

// größter gemeinsamer Teiler nach Eukliddo { rest = a % b; a = b; b = rest;} while ( rest > 0 );

Beispiel 2

Beispiel 1

Page 58: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Abweisende Schleife (while ... do)

Struktogramm Pseudocode

Syntaxdiagramm

while (Ausdruck) Anweisung;

solange Ausdruck

Anweisung

whileStatement

while Expression Statement( )

Qu

ell

e:

Gle

nn

La

ng

em

eie

r,U

ni

Hil

de

sh

eim

Page 59: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Abweisende Schleife: Beispiel

// calculate square and triple values#include <iostream.h>#include <iomanip.h>main(){ int st = 1, end = 10, step = 1, num, sq, cube; num = st; while (num <= end) {

sq = num * num; cube = num * sq; cout << setw(8) << num << setw(8) << sq

<< setw(8) << cube << endl; num = num + step;

}}

Page 60: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

while-Schleife: Haken und Ösen

Nach der schließenden Klammer der while-Schleife darf kein

Semikolon folgen – der Schleifenrumpf würde als leere Anweisung

interpretiert werden.

Abbruchbedingungen nicht unnötig kompliziert formulieren.

Schleifenvariablen nur an wenigen Stellen modifizieren.

Schleifenvariablen nach Möglichkeit nicht in evt. aufgerufenen

Funktionen modifizieren.

Bei Nutzung der continue-Anweisung endlose Iterationen

vermeiden!

Page 61: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

for-Schleife

Struktogramm Pseudocode

Beispiel

for (Ausdruck1; Ausdruck2; Ausdruck3)

Anweisung;

Ausdruck_1;

Ausdruck_2

Anweisung

Ausdruck_3;

boolean CopyString(char *dest, char *s, int from, int to){ int i; char *dptr, *sptr; for (i=from, dptr=dest, sptr=s+from; i<=to; i++,*dptr++ = *sptr++); *dptr = '\0'; return(TRUE);}

Page 62: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

for-Schleife II

Steuert den Kontrollfluß des Programms wie folgt:

1. Anfangs werden Variablen (ggf. definiert und) initialisiert (Init)

2. Solange die Schleifenbedingung (Expr) !=0 ergibt, wird der Schleifenrumpf (Statement) wiederholt

3. Anschließend werden die (Zähl-)Variablen aktualisiert (Update) und der Ausdruck erneut überprüft

Syntaxdiagramm:

Qu

ell

e:

Gle

nn

La

ng

em

eie

r,U

ni

Hil

de

sh

eim

Page 63: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Einsatzmöglichkeiten

Bearbeitung von Feldern Analyse und Bearbeitung von Zeichenketten

// Umdrehen einer Zeichenkette s ("abcd"->"dcba"for(i=0, j=strlen(s)-1; i<j; i++, j--){ c = s[i]; s[i] = s[j]; s[j] = c;}

Quelle: Thomas Strasser: C++ Programmieren mit Stil

Page 64: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

C-Spezialitäten der for-Schleife I

Einzelne Ausdrücke können “leer” bleiben:

unsigned var = 0;for (; var < max; ++var ) { ... }

Page 65: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

C-Spezialitäten der for-Schleife II

Der Update-Teil wird nicht mit Strichpunkt abgeschlossen. Im Init-, Expr- und Update-Teil können mehrere Anweisungen

stehen, die durch den Kommaoperator getrennt sind (siehe nachfolgendes Beispiel).

Page 66: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

C-Spezialitäten der for-Schleife II

For-Schleife mit zwei Laufvariablen

Beispiel: Kopieren eines Feldes in ein anderes, jedoch in umgekehrter Reihenfolge:

for (int i = 0, int j = 999; i < 1000; i++, j++){ b[j] = a[j];}

Page 67: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Verschachtelte Schleifen

Im Gegensatz zur while- und do-Schleife werden for-Schleifen öfters verschachtelt eingesetzt.

Einsatzmöglichkeiten:– Matrizenrechnung, z.B. Produkt zweier Matrizen

– allgemein Verarbeitung mehrdimensionaler Felder

– Achsenbeschriftung bei Erzeugung von Rahmenkarten

Page 68: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Verschachtelte Schleifen: Beispiel

#include <iostream.h>#define SPALTEN 10#define ZEILEN 5int main() // MUL_ARR.CPP mehrdimensionale Arrays nach D. Louis{ char x[ZEILEN][SPALTEN]; int i, j; for (i = 0; i < ZEILEN; i++)

{ for (j = 0; j < SPALTEN; j++)

x[i][j] = 'a' + i; }

for (i = 0; i < ZEILEN; i++) { for (j = 0; j < SPALTEN; j++)

cout << x[i][j]; cout << endl; }

return 0;}

Page 69: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Initialisierung der for-Schleife I

Initialisierungsausdruck mit Liste von Anweisungsausdrücken

Definition der Zählvariablen i und j vor der Schleife

Zählvariablen i und j sind auch nach der Schleife noch gültig

int i, j;for( i=0 , j=10 ; i < j ; i++ , j-- ){ cout << "i= " << i << " / j= " << j << endl;}// i und j bleiben gültigcout << "i= " << i << " / j= " << j << endl;

Page 70: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Initialisierung der for-Schleife II

Definition von schleifen-lokalen Variablen

• Definition der Zählvariablen i und j im Schleifenheader

Zählvariablen i und j sind nach der Schleife ungültig

for( int i=0 , j=10 ; i < j ; i++ , j-- ){ cout << "i= " << i << " / j= " << j << endl;}// ungültig:// cout << "i= " << i << " / j= " << j << endl;

Hinweis: Bei älteren Compilern sind die in der Schleife deklarierten Variablen auch nach der Schleife noch gültig!

Page 71: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Überprüfen der Schleifenbedingung

Bei false ( ==0 ) erfolgt ein Sprung hinter das Schleifenende. Fehlende Bedingung wird wie true ( !=0 ) behandelt! Schleifenrumpf kann jederzeit mit break verlassen werden

Sprung hinter das Schleifenende

In C++: false entspricht 0 , alles andere !=0 ist true!!!

Page 72: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

for-Schleife: Haken und Ösen

Von den drei Teilen der for-Schleife (Initialisierung, Bedingung, ) werden nur die ersten beiden durch Strichpunkt abgeschlossen.

Hinter der schließenden, runden Klammer der for-Schleife darf kein Semikolon stehen, da sonst als Inhalt der for-Schleife immer nur eine leere Anweisung durchlaufen wird!

Die Abbruchbedingung muss tatsächlich erreicht werden ... also beispielsweise sicherstellen, dass eine Laufvariable inkrementiert wird!

Vermeiden Sie, eine Laufvariable im Schleifenrumpf zu modifizieren:for (i = 0; i != 10; i++) cout << i++ << endl;

Page 73: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Schleifen: Performanceaspekte

Entfernen Sie alle unnötigen Anweisungen aus Schleifen.

Prüfen Sie alle Anweisungen, in denen keine Schleifenvariable auftaucht, ob Sie diese Anweisungen nicht im Sinnen einer Initialisierung vor der Schleife oder hinter der Schleife einfügen können.

Vermeiden Sie, soweit es geht, zeitraubende Operationen (Ein- und Ausgabeoperationen, Kontrollausgaben, Funktionsaufrufe, ...).

Page 74: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Welche Schleifenkonstuktion?

for while

Anzahl der Iterationen feststehend + -

Anzahl der Iterationen berechenbar + -

Schleifenvariable im Schleifenrumpf ändern

- +

Schleifen ohne Schleifenvariable - +

Ereignisse als Abbruchbedingung - +

Abbruchbedingung in Anweisungsteil - +

sequentielle Dateiverarbeitung - +

gewollte Endlosschleife - +

nach: Dirk Louis: C/C++ Kompendium, Markt & Technik, 2000:531

Page 75: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Die for-Schleife in einem ersten Beispiel

Schreiben Sie ein C++-Programm (loop1.cpp)

Aufgabe des Programms:

• Einlesen von 10 Gleitkommazahlen (über Tastatur),

• Berechnung Summe und Mittelwert,

• Prüfung, ob Ergebnis < oder >= 0.

• Ergebnisausgabe.

Page 76: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Die break-Anweisung

beendet die Ausführung einer Schleife durch Sprung unmittelbar hinter den Schleifenrumpf;

bei geschachtelten Schleifen wird nur die Schleife beendet, in der die break-Anweisung aufgerufen wird.

+ Geringere Schachtelungstiefe von Kontrollstrukturen

- Schlechtere Lesbarkeit von Programmen

Page 77: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Auswirkungen der break-Anweisung

while( true ){ ... if( i > j ) break; ...}// hierhin Sprung mit break...

while

for( int i=0 , j=10 ; ; i++ ){ ... if( i > j ) break; ...}// hierhin Sprung mit break...

for

do{ ... if( i > j ) break; ...} while( true );// hierhin Sprung mit break...

do

Page 78: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Vorzeitiges Beenden eines Schleifenduchgangs - die continue-Anweisung

Beendet die aktuelle Iteration des Schleifenrumpfs.

Die Schleife wird mit der nächsten Iteration fortgesetzt.

+ Geringere Schachtelungstiefe von Kontrollstrukturen

- Schlechtere Lesbarkeit von Programmen

Page 79: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

Auswirkungen der continue-Anweisung

while( i < 100 ){ ... if( i == j ) continue; ...}...

while

for( int i=0 ; i < 100 ; i++ ){ ... if( i == j ) continue; ...}...

for

do{ ... if( i == j ) continue; ...} while( i < 100 );...

do

Page 80: Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I Programmieren... in C++

Prof. Dr.-Ing. Franz-Josef Behr, HfT StuttgartProgrammeiren I

goto-Anweisung

Programmablauf wird an selbst definierter Sprungmarke fortgesetzt. Syntax:

goto Label1;...Label1: ...

Sprünge nur innerhalb der gleichen Funktion möglich Führt leicht zu unübersichtlichem Programmcode