Sie sind auf Seite 1von 19

Einfhrung in das Programmieren (fr Ing.

), Grundlagen

Einfhrung in das
Programmieren (fr Ingenieure)
Programmieren in C
Chr. Vetter

bersicht

Planung und Entwurf mit Struktogrammen


Grundlagen
Bedingte Programmierung
Schleifen
Felder
Funktionen
Dateien
Datenstrukturen
Zeigertechnik
Blick in Fensterprogrammierung
(event-orientiert)

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (fr Ing.), Grundlagen

bersicht

Planung und Entwurf mit Struktogrammen


Grundlagen Hallo-Programm
Was ist ein Programm?
Bedingte Programmierung
C-Zeichensatz
Schleifen
Schreibformat, Kommentare
Felder
Bezeichner fr Variablen, Funktionen
Funktionen Elementare Datentypen
Dateien
Ganzzahl Fliekommazahl
Datenstrukturen
Konstanten
Zeigertechnik Deklaration und Initialisierung
Zuweisung, arithmetische Operationen
Blick in Fensterprogrammierung
Typumwandlungen
(event-orientiert)
Ein- und Ausgaben
Basisstruktur eines C-Programms

Am Anfang kommt ein "Hallo"-Programm


#include <iostream>
using namespace std;
int main()
{
cout << "Hallo,
, mein erstes Programm!"
g
<< endl;
system("PAUSE"); // Warten auf Taste
return(0);
}

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Am Anfang kommt ein "Hallo"-Programm


#include <iostream>
using namespace std;
int main()
{
cout << "Hallo,
, mein erstes Programm!"
g
<< endl;
system("PAUSE"); // Warten auf Taste
return(0);
}

Was ist berhaupt ein Programm?


Aus Menschensicht ist ein Programm ein Text (Zeichenfolge),
geschrieben in einer (meist hheren) Programmiersprache,
wie z.B. Fortran, C, Pascal, Java
Dieser Programmtext wird von einem bersetzungsprogramm
(Compiler) eingelesen, auf sprachformale(Syntax) Fehler
berprft und schlielich in ausfhrbaren Programm-Code
b
bersetzt.
t t
Wenn ein Programm gestartet ist, wird der Programm-Code
vom Prozessor abgearbeitet (Maschinensicht).

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Programmentstehung und -nutzung


Idee zur Lsung
eines Fachproblems

Struktogramm

Magnetplatte

g
Algorithmus
Editor
ProgrammDesigner(in)

Fachaufgabe

ProgrammNutzer(in)

Entwicklungsumgebung

bersetzungsProgamm
C++-Compiler

eigenes
Progamm
hallo

Programmtext
hallo.cpp

Ausfhrbares
Programm
hallo exe
hallo.exe
daten.txt
daten.bin

Der C-Zeichensatz:
1. Alphanumerische Zeichen:
26 Grobuchstaben, 26 Kleinbuchstaben, Unterstrich
(lateinisches Alphabet)
--- Gro
Gro- und Kleinschreibung werden unterschieden! --10 Ziffern 0 1 2 3 4 5 6 7 8 9
2. Sonderzeichen: ()[]{}<>+-*/%^~&|=!?#\,.;:'"
3. Steuerzeichen:
Leerzeichen(SP), Zeilenende-Zeichen(CR,LF), horizontaler
Tabulator(HT), vertikaler Tabulator(VT), Seitenvorschub(FF)
4. Zeichen, die leicht verwechselt werden:
- Ziffer 0 und Buchstabe O
- Ziffer 1 und Buchstaben l, I,J
5. Format von C Programmen: formatfrei
(es gibt aber bewhrte Schreibkonventionen, die das Lesen
von Programmen fr Menschen erheblich erleichtern!)

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (fr Ing.), Grundlagen

ASCII-Zeichensatz:

Formatfreiheit Lesbarkeit
#include <iostream>
using namespace std;int main(){cout<<"Hallo, mein erstes Programm!"<<endl;system("PAUSE");return(0);}

#include <iostream>
using namespace std;
int main()
{
cout << "Hallo, mein erstes Programm!"
<< endl;
dl
system("PAUSE");
return(0);
}

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Kommentare im Programmtext
Ein Programmtext kann nach Belieben des Entwicklers mit
Kommentaren ausgestattet werden. Hierbei gilt es, einen
goldenen Mittelweg zu finden nach der Regel "So viel wie
ntig und so wenig wie mglich". Ein Kommentar soll auch
nach langer Zeit helfen, das Programm schnell zu verstehen.
int ap; // Anzahl Punkte (Rest der Zeile)
/* Kommentar ber
mehrere
Zeilen.
*/

Rechenprogramm (Einfhrungsbeispiel)
#include <iostream>
using namespace std;
int main()
{
int anzahl, anz_a=12, anz_b=5;
anzahl = anz_a + anz_b;
cout << "Die Anzahl ist " << anzahl << "."
<< endl;
dl
system("PAUSE"); // Warten auf Taste
return(0);
}

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Rechenprogramm (Einfhrungsbeispiel)
#include <iostream>
using namespace std;
int main()
{
int anzahl, anz_a=12, anz_b=5;
anzahl = anz_a + anz_b;
cout << "Die Anzahl ist " << anzahl << "."
<< endl;
dl
system("PAUSE"); // Warten auf Taste
return(0);
}

Bezeichner und Namen


Bezeichner(identifier) dienen zur Identifizierung von
Objekten innerhalb eines C-Programms. Sie sollten
ausdrucksvoll gewhlt werden, damit an ihrem Namen schon
der Zweck erkannt werden kann.
Bezeichner bestehen aus einer Folge alphanumerischer
Zeichen, wobei das erste Zeichen ein Buchstabe sein muss.
Dabei zhlt der Unterstrich (_) auch als Buchstabe.
Gro- und Kleinschreibung werden unterschieden!
Signifikant sind 31 Zeichen bei internen Namen.
Es gibt reservierte Schlsselwrter(s.
S

( Tabelle),
) die nicht fr
f
eigene Objektbezeichnungen verwendet werden drfen.
Beispiele:

IPP.TUC, Christian Vetter

gltige Namen: A, _a, a2, vektor, kraft, bereit


ungltige Namen: do, 1a, Kraft-Vektor, const

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Reservierte Schlsselwrter
auto

double

int

struct

break

else

long

switch

case

enum

register

typedef

char

extern

return

union

const

float

short

unsigned

continue

for

signed

void

default

goto

sizeof

volatile

do

if

static

while

Elementare Datentypen
Datentyp

stellt dar

char
int

Zeichen, ganze Zahl


ganze Zahl

float

Fliekommazahl in
einfacher
Genauigkeit
Fliekommazahl in
doppelter
Genauigkeit

double

IPP.TUC, Christian Vetter

Zustze
signed
short, long,
long long,
unsigned,

long

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Grenzen elementarer Datentypen


Datentyp

Bereich, Genauigkeit

char
short int

0 .. 255 oder -128 .. +127


0 .. 65535 oder -32768 .. 32767

int

0 .. 4294967295 oder -2147483648 .. +2147483647

long long int 0 .. 18446744073709551615 oder


-9223372036854775808 .. +9223372036854775807

float

{0.0,
{0
0 (1.175494351e-38
(1 175494351e 38 .. 3.402823466e+38)}
3 402823466e+38)}
bei 7 bis 8 Dezimalstellen Genauigkeit

double

{0.0, (2.2250738585072014e-308 ..
1.7976931348623158e+308)}
bei 15 bis 16 Dezimalstellen Genauigkeit

Speicherbedarf der Datenobjekte


Datentyp
char
short int
int
unsigned
g
int
long long int
float
double

IPP.TUC, Christian Vetter

Speicherbedarf
in Bytes
1
2
4
4
8
4
8

Sammelbegriff

GanzzahlDatentypen

FliekommaDatentypen

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Speicherbedarf ermitteln
Ein Datenobjekt beansprucht entsprechend seinem Typ
einen bestimmten Speicherplatz. Der minimale Speicherb i h iistt ein
bereich
i B
Byte
t (8 Bit)
Bit). D
Der S
Speicherbereich,
i h b i h d
den ein
i
bestimmter Typ bentigt, kann von Compiler zu Compiler
unterschiedlich sein.
Um den bentigten Speicherbereich zu ermitteln, kann man
die Funktion sizeof() verwenden.
Ergebnis in Byte

Schreibweise in C

size = sizeof(int);

size = sizeof(long int);

size = sizeof(long long int);

size = sizeof(float);

Konstanten (I)

031
25
0x19

00011001
Strg-Y

EM
Jede Konstante hat einen Datentyp.
Konstanten vom Ganzzahlen-Datentyp: Ziffernfolge ohne
p
Zahlensystem
y
als Lese- und SchreibschnittDezimalpunkt.
stelle: dezimal, oktal (0) und hexadezimal (0x)
Beispiel: 25(dezimal) = 031(oktal) = 0x19(hexadezimal)
Zeichenkonstanten (char-Konstanten): Darstellung als
ganze Zahl gem ASCII-Zeichensatz.
Beispiele: 'A', 'B', 'C', '_', 'x', 'y', 'z', '3', '7', , '+', '-', '=', '\n', '\0'

Konstanten vom Fliekomma-Datentyp: Ziffernfolge mit


Dezimalpunkt; Darstellung mit oder ohne Exponent
(Zehnerpotenz).
Beispiele: 127.4 = 0.1274e+3
0.00432 = 0.432e-2

IPP.TUC, Christian Vetter

10

Einfhrung in das Programmieren (fr Ing.), Grundlagen

0110 0001

Konstanten (II)

0110 0010
0110 0011
0110 0100
0000 0000

Zeichenkettenkonstante:
eine Zeichenkette (string) mit n Zeichen bentigt
Speicherbereich der Lnge n+1 wegen des
abschlieenden Nullzeichens ('\0').
Beispiel: Zeichenkette "abcd"
" b d" wird abgelegt
als 'a' 'b' 'c' 'd' '\0'. Die Lnge
dieser Zeichenkette betrgt 4. Der Speicherbereich ist 5 Bytes gro.

Deklaration und Initialisierung


Alle Variablen eines Programms mssen vor ihrer Benutzung
deklariert, d.h. vereinbart werden (siehe Rechenprogramm).
Deklarationen bestehen aus Datentyp und einer Liste von Variablen,
zB:
z.B.:
int lower, upper, step;
oder gleichwertig:
int lower; // Anfangswert
int upper; // Endwert
int step; // Schrittweite
Initialisierung von Variablen in Deklarationen, z.B.
int i=0;
float eps=1.0e-5;
Die Initialisierung, d.h. Anfangswertzuweisung, erfolgt bereits zur
bersetzungszeit und hilft so Laufzeit einzusparen ;-)
Zu beachten ist auch der Aspekt einer klaren und sicheren Initialisierung
vor einer mglichen Nutzung.

IPP.TUC, Christian Vetter

11

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Zuweisung

Gesetz als Gleichung : F m a


Rechenvorschrift als Zuweisung : F m a

Um Berechnungen zu veranlassen, gibt es in den meisten


Programmiersprachen die Zuweisung:
V i bl (li k S
Variable(linke
Seite)
it ) algebraischer
l b i h Ausdruck(rechte
A d
k( ht S
Seite)
it )
Beispiel (Pascal): F := m*a; // Kraft <- Masse * Beschleunigung
Beispiel (C):
F = m*a; // Kraft <- Masse * Beschleunigung

Es ist wichtig, zu verstehen, dass bei so genannter prozeduraler Programmierung eine Zuweisung als Anweisung oder
Befehl formuliert wird
wird. Es handelt sich nicht um eine
Gleichung im Sinne der Mathematik!
Der algebraische Ausdruck der rechten Seite wird
ausgewertet, und das Ergebnis daraus der Variablen auf der
linken Seite zugewiesen.

Arithmetische Operationen
Ergebnis Operand Operator Operand
Kraft Masse * Beschleunigung
Die Sprache C sieht die blichen arithmetischen Operationen
vor Als Operanden kommen ganze Zahlen oder Fliekommavor.
zahlen in Frage. Als Operatoren stehen + - * /, wie sie allgemein bekannt sind, zur Verfgung.
Allerdings hngt die Funktionsweise der Division ( / ) von den
Typen der Operanden, die der Operator verknpft, ab. Ist
mindestens einer der beiden Operanden
p
vom Fliekommatyp,
yp,
so wird eine Fliekommadivision durchgefhrt.
Beispiel:
7 / 2.0
ergibt
3.5
Sind jedoch beide Operanden vom Ganzzahltyp, wird eine
Ganzzahldivision durchgefhrt!
Beispiel:
7 / 2
ergibt
3

IPP.TUC, Christian Vetter

12

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Arithmetische Operationen (2)


Passend zur Ganzzahldivision gibt es einen weiteren Operator,
der der Restbildung nach einer Ganzzahldivision zweier
Ganzzahloperanden dient:
d M
der
Modulo-Operator
d l O
t %
Beispiel:
7 % 2
ergibt
1
Wozu gibt es diese ungewhnlich erscheinenden Ganzzahl a0 a1 a2 a3
operationen / und %?
Beispiel:

Die Elemente einer m*n-Matrix werden zeilen- a4 a5 a6 a7


weise vom 0
0-ten
ten bis zum (m*n
(m n-1)-ten
1) ten Element a8 a9 a10 a11
gespeichert. Die Zeilen(z)- bzw. Spalten(s)- a12 a13 a14 a15
indizes erhlt man aus der Elementnummer i durch folgende
Anweisungen:
z = i / n; // Ganzzahldivision
s = i % n; // Rest nach Ganzzahldivision

Weitere Berechnungen
Weitere Rechenoperationen werden mit Funktionen aus der
Mathematik-Bibliothek durchgefhrt. Diese enthlt neben der
Exponentiation mit pow(x,y) z.B. auch eine ganze Reihe von
ti
trigonometrischen
ti h F
Funktionen
kti
((sin(), cos(), tan(),
atan() usw.). Um die Leistungen einer Bibliothek in
Anspruch nehmen zu knnen, muss diese mittels Prprozessordirektive bekannt gemacht werden. Im Beispiel der
System-Mathematik-Bibliothek mit:
#include <math.h>
Mit #include wird formal nur die angegebene Datei eingelesen. Diese enthlt fr den Compiler notwendige Informationen. Will man eine eigene so genannte Header-Datei
aus dem Projektverzeichnis einlesen, so geschieht dies mit
#include "mybib.h"

IPP.TUC, Christian Vetter

13

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Informationen ber Bibliotheken


Es gibt eine ganze Reihe von Bibliotheken, die man im
Allgemeinen nicht kennt und deren Inhalte und Leistungen
ebenfalls nicht. Grundstzlich besteht die Mglichkeit, die
H d D t i selbst
Header-Dateien
lb t zu llesen. E
Es gibt
ibt einige
i i Lit
Literatur,
t von
der nur zwei Originale genannt seien:
Kernighan, Ritchie: Programmieren in C
Bjarne Stroustrup: Einfhrung in die Programmierung mit C++

Die Masse an Literatur muss jeder selbst nach seinem


Geschmack bewerten und ggf. daraus selektieren.
Es g
gibt jjede Menge
g an Tutorien und andere Unterlagen
g
im Internet zu finden, die auch sehr unterschiedlich sind. Als
hilfreich hat sich die C++-Referenz auf
http://www.cppreference.com/wiki/start
erwiesen. Hier lohnt es sich, zu suchen und den Umgang mit
der Seite zu ben.

Typumwandlungen
Es gibt zwei sprachimplizite automatische Typumwandlungen
1. bei Verknpfungen zweier typunterschiedlicher
Operanden in algebraischen Ausdrcken
2. bei der Zuweisung auf eine Ergebnisvariable
Die Reihenfolge ist dabei zu beachten:
erst Auswertung des algebraischen Ausdrucks,
dann Anpassung an Ergebnistyp
Achtung!
Bei der Anpassung an den Ergebnistyp kann durchaus
wieder ein niedrigerer Typ entstehen und dabei das
Ergebnis durch Abschneiden verndert werden!

IPP.TUC, Christian Vetter

14

Einfhrung in das Programmieren (fr Ing.), Grundlagen

1. Typumwandlung der Operanden


Bei Verknpfungen von Operanden unterschiedlichen Datentyps
findet eine automatische Typumwandlung statt, und zwar
vom niedrigeren zum hheren Datentyp
( char < short int < int < long long int < float < double )
entsprechend der Tabelle:
Operand 2

Operand 1

Operator

+, -, *, /

int

float

double

int

int

float

double

float

float

float

double

double

double

double

double

Ergebnistyp

2. Typumwandlung bei Zuweisung


Auch bei der Zuweisung findet eine Typumwandlung statt,
wenn sich der Datentyp der Variablen auf der linken Seite
vom Datentyp des Ausdrucks auf der rechten Seite unterscheidet.
variable = ausdruck;
Der Datentyp des Ausdrucks wird ohne Rcksicht auf Verluste
i d
in
den D
Datentyp
t t d
der Zi
Ziel-Variablen
l V i bl gewandelt.
d lt
Explizite Angabe des Zieldatentyps durch type casting:
variable = (Datentyp variable) ausdruck

IPP.TUC, Christian Vetter

15

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Beispiele zu Typumwandlungen
Mit folgenden Deklarationen und Initialisierungen sind die
Beispiele nachzuvollziehen:
int i=2, j, k=7;
float f=2.0, h;
Ergebnistyp
und -wert

C-Anweisung

Typ und Wert der


rechten Seite

int 3

j = k/i;

int 3

int 3

j = k/f;

float 3.5

float 3.5

h = k/f;

float 3.5

float 3.0

h = k/i;

int 3

float 3.0

h = (float) (k/i);

float 3.0

int 3

j = ((float) k)/i;

float 3.5

Es ist dringend zu empfehlen, die Typumwandlungen durch


eigenes ben zu studieren.

Ein- und Ausgaben


Es gibt grundstzlich viele Wege zur Ein- und Ausgabe von
Informationen. Zur besseren Verstndigung zwischen den
Teilnehmern der Veranstaltung und zur weitestgehenden Vereinfachung wird hier auf eine Variante aus der Sprache C++
ber die Bibliothek <iostream> zurckgegriffen.
Um Leistungen dieser Bibliothek nutzen zu knnen, wird sie im
Kopf eines Programms mit der Prprozessordirektive
#include <iostream>
und einer wichtigen Anweisung bezglich des zu verwendenden Namensraumes
using namespace std;
bekannt gegeben.

IPP.TUC, Christian Vetter

16

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Ausgabe mit cout


Es gibt eine formale Ausgabe-"Datei", die bibliotheksseitig
schon mit cout bezeichnet ist. In Wirklichkeit verbirgt sich
dahinter ein Zeichenstrom, der automatisch an das Ausgabefenster geschickt wird. Mittels des Operators << wird der
Zeichenstrom zusammen gebaut. Die zusammensetzbaren
Operanden knnen Zeichen, Zeichenketten, Variablen und
sogar Ausdrcke sein. Das besondere Entgegenkommen der
Bibliothek ist, dass Variablen und ausgewertete Ausdrcke
automatisch in fr Menschen lesbare Zeichenketten umgewandelt und dem Zeichenstrom (stream) hinzu gefgt werden.
cout << "Hallo, Welt!" << endl;
cout << "Die Kraft betrgt " << force << " N." << endl;
cout << "Der Radius ist " << Diam/2.0 << '.' << endl;

Eingabe mit cin


Es gibt eine formale Eingabe-"Datei", die bibliotheksseitig
schon mit cin bezeichnet ist. Auch diese ist ein Zeichenstrom,
der jedoch automatisch aus den Tastatureingaben gelesen
wird. Mittels des Operators >> wird der Zeichenstrom auf die
angegebene(n) Variable(n) verteilt.
Die wichtige Leistung der Bibliothek ist, die Zeichenkettenstcke zwischen Whiteblanks automatisch entsprechend den
Datentypen der angegebenen Variablen umzuwandeln.
Beim Einlesen sollte man an einen geeigneten Aufforderungstext denken.
cout << "Anzahl Messwerte? "; cin >> mess_anz;
cout << "Werte x, y, z? "; cin >> vx >> vy >> vz;

IPP.TUC, Christian Vetter

17

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Beispiel mit cin und cout

Basisstruktur eines C-Programms


Die Minimalstruktur eines C-Programms sieht folgendermaen
aus:
int main()
{ // hier beginnt der Rumpf des Hauptprogramms
return(0); // Ergebnisrckgabe
} // hier endet der Rumpf
Die Kopfzeile enthlt den Rckgabe-Datentyp, den festgelegten Namen main und eine Parameterliste, die leer sein kann.
Wenn es einen konkreten Rckgabe-Datentyp gibt, muss es
dazu passend eine Rckgabe mit return() geben. Als
Parameter wird die Konstante oder Variable angegeben, die
zurck gegeben werden soll. Ein Programm kann so dem
aufrufenden System seinen Erfolg oder Misserfolg mitteilen.

IPP.TUC, Christian Vetter

18

Einfhrung in das Programmieren (fr Ing.), Grundlagen

Praktisch erweiterte Basisstruktur


#include <iostream>
#include <math.h>
// ggf. noch mehr #include-Zeilen
using namespace std; // Standard-Namensraum
int main()
{
// eigentliche Programm-Anweisungen
system ("PAUSE"); // Warten auf Taste
return(0);
}

Blcke in C
Eine Sequenz von Anweisungen wird als Block aufgefasst und
in ein Paar von geschweiften Klammern {} eingeschlossen.
Auch der Rumpf des Hauptprogramms main() ist ein Block.
Es muss zu einer ffnenden Klammer { immer eine zugehrige
schlieende Klammer } folgen. Blcke drfen beliebig ineinander geschachtelt werden, sie drfen sich aber nicht
berschneiden. Genau deshalb eignen sich Struktogramme
ideal als Vorbereitung von Programmen in blockorientierten
Sprachen. Regelgerechte Struktogrammentwrfe vermeiden
schwere Strukturfehler beim Programmieren in einer konkreten
Sprache. Die im Programmtext oftmals verwirrend erscheinende Struktur von Blcken kann meist schnell anhand guter
Struktogrammdokumente aufgeklrt werden.

IPP.TUC, Christian Vetter

19