Einführung in C++ (Teil 1)




Grundstruktur einfacher C++ Programme:

// Kommentar: Dieser Kommentar erstreckt sich bis zum Zeilenende.
/* Kommentar: Dieser Kommentar kann über mehrere Zeilen gehen.
   Alles was zwischen  /* und */ ist ein Kommentar
*/

#include  <iostream.h>                                        // Compiler-Instruktionen

#include ...
...
void main( )                                                         // Hauptfunktion
{
   Vereinbarung von Variablen                           // In diesem Bereich stehen alle Definitionen und
   Anweisungen                                                   // Befehle des Programms
}

Jedes C++ – Programm besteht aus einer Folge von Anweisungen, die nacheinander ausgeführt werden. Nachdem das Programm die letzte Anweisung ausgeführt hat wird es beendet.
Die einzelnen Befehle werden mit ";" voneinander getrennt. Dabei ist es egal ob eine neue Zeile begonnen wird oder nicht:
   int c;
   int b;
ist folglich identisch mit
   int c; int b;
(letzteres kann aber leicht unübersichtlich werden)

Der Quelltext des C++-Programms wird mit einem Text-Editor (z.B. nedit) erstellt. Die Textdatei darf einen beliebigen Namen tragen, muß aber die Erweiterung .cpp haben.

Beispiel 1:

//Programm Hallo.cpp
//Das Programm Hallo gibt das Wort Hallo auf dem Bildschirm aus.

#include  <iostream.h>

void main()
{
cout  <<  "Hallo"  <<  endl;
}

C++ ist alleine nicht in der Lage auf den Bildschirm zu schreiben, daher muß am Anfang des Programms eine Bibliothek aufgerufen werden:

#include <iostream.h>

Der Befehl für die Bildschirmausgabe ist:

cout  <<  "Hallo"  <<  endl; /*Gibt das Wort Hallo auf dem Bildschirm aus.
Mit dem Befehl endl wird eine neue Zeile angefangen.*/

Befehl für die Eingabe:

cin >> i; //Liest den Wert für die Variable i von der Tastatur ein.


Um aus dem Quelltext Hallo.cpp ein ausführbares Programm zu erzeugen gibt man im Terminal folgendes Kommando ein:

> c++  Hallo.cpp

Normalerweise bekommt das Ergebnis der Compilierung den Standardnamen a.out. Mit der Option -o Dateiname kann man dem Programm einen Namen seiner Wahl geben.

> c++  -o Hallo Hallo.cpp

Gibt man zusätzlich noch die Option -Wall an, werden genauere Fehlermeldungen ausgegeben.

> c++  -Wall -o Hallo Hallo.cpp

Um das Programm zu starten gibt man ein:

> chmod u+x Hallo

Dies ist nur notwendig, wenn das Programm noch nicht ausfübar ist.

> ./Hallo

Beispiel 2:

/*Programm Mittelwert
  Dieses Programm berechnet den Mittelwert von zwei (vom Benutzer) eingegebenen Zahlen*/

#include  <iostream.h>

void main( )
{
float  Zahl1; // Deklaration der Variablen Zahl1
cout  <<  "Gib eine Zahl ein:  "; // Eingabe der ersten Zahl
cin  >>  Zahl1; // Zahl1 wird eingelesen

float  Zahl2; // Deklaration der Variablen Zahl2
cout  <<  "Gib eine weitere Zahl ein:  "; // Eingabe der zweiten Zahl
cin  >>  Zahl2; // Zahl2 wird eingelesen

float  Mittelwert; // Deklaration der Variablen Mittelwert

/* Berechnung der Mittelwertes von Zahl1 und Zahl2 */

Mittelwert  =  (Zahl1+Zahl2)/2;

  cout  <<  "Der Mittelwert von  "  <<  Zahl1  <<  "  und  "  <<  Zahl2
           <<  "  ist  "  <<  Mittelwert  <<  endl;
}

Output:

Gib eine Zahl ein: 2
Gib eine weitere Zahl ein: 4
Der Mittelwert von 2 und 4 ist 3

Vor der Verwendung einer Variablen muß diese erst deklariert werden. Nach der Deklaration ist die Variable im Programm bekannt und kann benutzt werden.
Deklaration der Variablen Zahl1 vom Datentyp float:   float Zahl1
Weitere Datentypen sind im Anhang aufgeführt.Variablen können überall im Programm definiert werden (nicht nur am Anfang, wie bei manch anderer Programmiersprache). Sie können auch zusammen definiert werden, wenn sie durch "," getrennt werden:

float Zahl1, Zahl2;

Im Programm Mittelwert stehen nach << drei verschiedene Arten von Objekten:
     1.) Ein Stück Text zwischen Anführungszeichen, wie beispielsweise
          "Gib eine Zahl ein: " nennt man einen string.
     2.) Ein arithmetischer Ausdruck wie beispielsweise Zahl1.
     3.) Ein Manipulator, nämlich endl, der den Übergang in eine neue Zeile
          bewirkt.

Assignment-statement: Mittelwert = (Zahl1+Zahl2)/2
Der Ausdruck rechts vom Gleichheitszeichen (Zuweisungsoperator) wird berechnet und der Variablen Mittelwert zugewiesen.

Beispiel 3:

Dieses Programm hat die gleiche Funktion wie das Programm Mittelwert, nur daß es unübersichtlicher aufgeschrieben ist.

//Programm Konfus

#include<iostream.h>
void main(){float
Zahl1;cout<<"Gib eine Zahl ein: "
;cin>>Zahl1;float Zahl2
;cout<<
"Gib eine weitere Zahl ein: ";cin
>> Zahl2;
float Mittelwert;Mittelwert
=(Zahl1+Zahl2)
/2;cout<<"Der Mittelwert von "
<< Zahl1<<" und "<<Zahl2<<
" ist "<<Mittelwert <<endl;}


Beispiel 4: Variablenmanipulation

// Programm zur Änderung von Variablen

#include  <iostream.h>

void main( )
{
 int i  =  1;
 cout  <<  i  <<  "   ";
 i = 2 * i + 2;
 cout  <<  i  <<  endl;
 i  =  3  *  i;
 cout  <<  i  <<  "   "  <<  3  *  i  <<  endl;
 }

Output:
1    4
12  36

Scope:

Den Wirkungsbereich einer Variablen nennt man Scope.
Definition Block: Ein Block ist ein Programmbereich, der durch ein Paar geschweifter Klammern
                            { } eingeschlossen ist.
Wird eine Variable innerhalb eines Blocks deklariert, so existiert sie nur innerhalb des Blocks.

Beispiel 5:

//Programm Scope

#include  <iostream.h>

void main( )
{
  float  x  =  1.5;
  {
    cout  <<  "x =  " <<  x  <<  endl;           //Hier ist x = 1.5
    char  x  =  'A';
    {
      cout  <<  "x =  "  <<  x  <<  endl;        //Hier ist x = A
      int  x  =  5;
      cout  <<  "x =  "  <<  x  <<  endl;        //Hier ist x = 5
     }
   cout  <<  "x =  "  <<  x  <<  endl;           //Hier ist x = A
  }
  cout  <<  "x =  "  <<  x  <<  endl;           //Hier ist x = 1.5
}

Output:
x = 1.5
x = A
x = 5
x = A
x = 1.5


Der Inkrementierungs - und Dekrementierungsoperator:

Unter Inkrementierung wird die Addition von 1 verstanden und unter Dekrementierung die Subtraktion von 1.
Inkrementierungsoperator: ++
Dekrementierungsoperator: --
i ++ und ++ i sind Kurzformen von i += 1 (i = i + 1).
i-- und --i sind Kurzformen von i -= 1 (i = i - 1).

Unterschied zwischen i ++ und ++i:

Beispiel 6:

//Programm increment

#include  <iostream.h>

void main( )
{
  int i  =  0, j  =  0, k  =  0, n  =  0;
  j  =  i++; k  =  ++n;
  cout  <<  "j =   "  <<  j  <<  "   "  <<  "i =   "  <<  i  <<  endl;  
  cout  <<  "k =   "  <<  k  <<  "   "  <<  "n =   "  <<  n  <<  endl;
}

Output:
j = 0    i = 1
k = 1   n = 1


Schleifen:

Schleifen dienen zur Wiederholung von Anweisungen. Die Wiederholung wird durch eine Bedingung kontrolliert, die nach jeder Wiederholung überprüft wird. Innerhalb einer Schleife sollte es eine Veränderung derart geben, daß die Bedingung irgendwann einmal unwahr wird, so daß die Schleife abbricht.

1.) while - Schleife:

     Syntax: while (Bedingung)  Anweisung bzw. {Anweisungen}

Die Anweisung wird ausgeführt, solange die Bedingung wahr ist. Die Bedingung wird zuerst geprüft und danach die Anweisung ausgeführt. Wenn die Bedingung von vornherein unwahr ist, wird die Anweisung nicht ausgeführt.

Beispiel 7:

s  =  0; i  =  1;
while (i  <=  n)
{
  s  +=  i;                   // s  =  1 + 2 + 3 + ... + n
  i++;
}

2.) for - Schleife:

    Syntax: for (Initialisierung; Bedingung; Veränderung)  Anweisung bzw. {Anweisungen}

Beispiel 8:

s  =  0;
for (int  i  =  0; i  <  n; i ++)
s  +=  i;                     //  s  =  1 + 2 + 3 + ... + n

Die erste Anweisung in der Klammer initialisiert die Laufvariable i (int wird nur gebraucht, wenn i noch keinen Typ zugewiesen bekommen hat). Die Schleife wird solange ausgeführt, wie die zweite Anweisung wahr ist. Falls die Bedingung wahr ist, wird die Anweisung und die Veränderung der Laufvariablen ausgeführt.


Auswahl treffen mit if und switch:

Eine if - Anweisung erlaubt die Auswahl zwischen 2 Möglichkeiten. Durch Verschachtelung kann eine Auswahl zwischen mehreren Möglichkeiten getroffen werden. Dies kann bei größerer Verschachtelungstiefe sehr unübersichtlich werden. Einfacher und übersichtlicher ist dann die Fallunterscheidung mit switch.

1.) if - Anweisung:

Syntax: if (Bedingung) //Anweisung1 wird nur ausgeführt
          Anweisung1 //wenn die Bedingung erfüllt ist.
else //Ansonsten wird Anweisung2 (else-
          Anweisung2 //Zweig) ausgeführt.


Beispiel 9:

/* Römische Ziffern
    Zu einer eingegebenen römischen Ziffer wird die zugehörige arabische Ziffer angezeigt */

#include  <iostream.h>

void main( )
{
  int  arabische_Ziffer  =  0;
  char  roemische_Ziffer;
  cout  <<  "Gib eine römische Ziffer ein:  ";
  cin  >>  roemische_Ziffer;

  if (roemische_Ziffer  = =  'I') arabische_Ziffer = 1;
  else if (roemische_Ziffer  = =  'V') arabische_Ziffer  =  5;
  else if (roemische_Ziffer  = =  'X') arabische_Ziffer  =  10;
  else if (roemische_Ziffer  = =  'L') arabische_Ziffer  =  50;
  else if (roemische_Ziffer  = =  'C') arabische_Ziffer  =  100;
  else if (roemische_Ziffer  = =  'D') arabische_Ziffer  =  500;
  else if (roemische_Ziffer  = =  'M') arabische_Ziffer  =  1000;
 
  if (arabische_Ziffer  = =  0)    cout  <<  "Es wurde keine römische Ziffer "
                                                                     "eingegeben!"  <<  endl;
  else cout  <<  "Zugehörige arabische Ziffer:  "  <<  arabische_Ziffer  <<  endl;
}

Output:
Gib eine römische Ziffer ein:  X
Zugehörige arabische Ziffer:  10

Zur Zweifachauswahl gehört auch der bedingte Ausdruck:

Syntax:  Bedingung ? Ausdruck1 : Ausdruck2

Falls die Bedingung wahr ist, ist der Wert des gesamten Ausdrucks der Wert von Ausdruck1, ansonsten der Wert von Ausdruck2. Ein Ausdruck mit dem Bedingungoperator kann lesbarer durch eine if - Anweisung ersetzt werden, wie das folgende Beispiel zeigt.

Beispiel 10:

/*Programm Vergleich. Dieses Programm vergleicht zwei vom Benutzer eingebene Zahlen und gibt die größere von beiden aus.*/

#include  <iostream.h>

void main( )
{
  float  a, b;

  cout  <<  "Gib die erste Zahl ein: "; cin  >>  a;
  cout  <<  "Gib die zweite Zahl ein: "; cin  >>  b;

   //Möglichkeit 1
   if (a  <  b)  cout  <<  "Die größere der beiden Zahlen  "  <<  a  <<  "  und  "  <<  b
                                <<  "  ist:  "  <<  b  <<  endl;
   else  cout  <<  "Die größere der beiden Zahlen  "  <<  a  <<  "  und  "  <<  b
                      <<  "  ist:  "  <<  a  <<  endl;

   //Möglichkeit 2
   cout  <<  "Die größere der beiden Zahlen  "  <<  a  <<  "  und  "  <<  b  <<  "  ist:  "
            <<  (a  <  b  ?  b  :  a)  <<  endl;
}

Output:
Gib die erste Zahl ein: 3
Gib die zweite Zahl ein: 5
Die größere der beiden Zahlen 3 und 5 ist: 5
Die größere der beiden Zahlen 3 und 5 ist: 5


2.) switch - Anweisung:

Syntax: switch (Ausdruck)
{   case const1: Anweisungen break;
     case const2: Anweisungen break;
     ...
     default: Ersatzanweisungen
}

Für die Fallunterscheidung wird der Ausdruck ausgewertet und der Programmablauf nach dem case fortgesetzt, dessen Konstante mit dem Wert des Ausdrucks übereinstimmt.


Wichtig: Nach Ausführung der entsprechenden Anweisungen wird nicht automatisch aus der
                switch - Anweisung gesprungen. Erst break führt zum Verlassen von switch.

Beispiel 11:

/* Römische Ziffern. Zu einer eingegebenen römischen Ziffer wird die zugehörige arabische Ziffer angezeigt */

#include  <iostream.h>

void main( )
{
  int  arabische_Ziffer  =  0; char  roemische_Ziffer;
  cout  <<  "Gib eine römische Ziffer ein: ";
  cin  >>  roemische_Ziffer;
 
  switch (roemische_Ziffer)
  {
   case 'I' : arabische_Ziffer  =  1;  break;
   case 'V' : arabische_Ziffer  =  5;  break;
   case 'X' : arabische_Ziffer  =  10;  break;
   case 'L' : arabische_Ziffer  =  50;  break;
   case 'C' : arabische_Ziffer  =  100;  break;
   case 'D' : arabische_Ziffer  =  500;  break;
   case 'M' : arabische_Ziffer  =  1000; break;
   default : arabische_Ziffer  =  0;
  }

  if (arabische_Ziffer  >  0)    cout  <<  "Zugehörige arabische Ziffer: "<<  arabische_Ziffer  <<  endl;
  else  cout  <<  "Es wurde keine römische Ziffer eingegeben!"  <<  endl;
}


Anhang

Elementare Datentypen


Datentyp Bedeutung Größe
char Zeichen 8 Bit
int Integer 16 Bit
short int oder nur short Integer 8 Bit
long int oder nur long Integer 32 Bit
float Fließkomma
einfache Genauigkeit
32 Bit
double Fließkomma
doppelte Genauigkeit
64 Bit


Operatoren


Operator Beispiel Bedeutung
Arithmetische Operatoren:    
+ i + 2 Addition
- i - 4 Subtraktion
* 8 * i Multiplikation
/ i / 3 Division
% i % 5 Modulo
++ ++ i vorherige Inkrementierung um Eins
  i ++ nachfolgende Inkrementierung um Eins
-- -- i vorherige Dekrementierung um Eins
  i -- nachfolgende Dekrementierung um Eins
= i = m + 5 Zuweisung
+= i += 5 i = i + 5
-= i -= 5 i = i - 5
*= i *= 5 i = i * 5
/= i /= 5 i = i / 5
%= i %= 5 i = i % 5
Relationale Operatoren:    
< i < m kleiner als
> i > m größer als
<= i <= m kleiner gleich
>= i >= m größer gleich
== i == m gleich
!= i != m ungleich
Logische Operatoren:    
! !Ausdruck logische Negation
&& Ausdruck1 && Ausdruck2 logisches UND
|| Ausdruck1 || Ausdruck2 logisches ODER

















Last update: 30.Dezember 2000
E-Mail: rcbruens@astro.uni-bonn.de