MezData-Logo Creative Commons License 215 Lösungen Button :CPP: Übungen zu Unterprogrammen

Globale Variablen und return

Erstellen Sie für folgenden Quelltext ein Variablendiagramm und ermitteln Sie die Ausgabe.

int a=10,b=5; 

int sum(){  // Unterprogramm namens sum(), Rückgabe vom Typ int
  return a+b;
}

void main(){ 
  cout << sum(); // sum() aufrufen und den Wert von sum() ausgeben
}

Unterprogramm mit Eingabe und Rückgabe

Erstellen Sie für folgenden Quelltext ein Variablendiagramm und ermitteln Sie die Ausgabe.

int a=10;

int plusfive(int b){  // Rückgabe vom Typ int
  b= b+5; // zu b 5 addieren;
  return b; // b zurückgeben
}

void main(){
  cout << plusfive(a); // plusfive(a) aufrufen
}

Beschreiben Sie ihrem Nachbarn was beim Aufruf von main() genau passiert.

plusfive(int b) wird mit dem Wert von a also 10 aufgerufen. (int b) nennt man den Parameter oder die Schnittstelle der Funktion. Der Wert 5 wird der Parametervariablen b der Funktion übergeben, nennt man "call by value", weil er in b kopiert wird. Innerhalb der Funktion steht nun die Variable b zur Verfügung. Auf den Wert von b wird nun 5 addiert und das Ergebnis zurückgegeben. Das ist dann der Wert von plusfive(10). Die Ausgabe 15.

Parameter und lokale Variablen

Erstellen Sie für folgenden Quelltext ein Variablendiagramm und ermitteln Sie die Ausgabe.

int a=10;

int plusfive(int b){
  int c;  // lokale Variable c
  c= b+5; // zu b 5 addieren und in c speichern;
  return c; // c zurückgeben
}

void main(){
  cout << plusfive(a); // plusfive(a) aufrufen und den Wert von plusfive(a) ausgeben
}

Lokale Variablen verdecken globale Variablen mit dem selben Namen

Erstellen Sie für folgenden Quelltext ein Variablendiagramm und ermitteln Sie die Ausgabe.

int a=10;

int plusfive(int b){
  int a;  // lokale Variable a, verdeckt globales a
  a= b+5; // zu b 5 addieren und in a speichern;
  return a; // a zurückgeben
}

void main(){ // dieses Rezept wird ausgeführt
  cout << plusfive(a); // plusfive(a) aufrufen und den Wert von plusfive(a) ausgeben
}

Die lokale Variable a in der plusfive-Funktion verdeckt das globale a, d.h. was innerhalb von plusfive mit a gemacht wird hat keine Auswirkung auf das globale a, der Wert bleibt unverändert! Gilt auch für die Parametervariable b, sie würde auch eine globales b entsprechend verdecken.

Unterprogramm mit Eingabe ohne Rückgabe

Beispiel aus Java: Die Methode setText("Hallo") des Textfeldes oder des Labels. Wirkung durch Seiteneffekt.
Erstellen Sie für folgenden Quelltext ein Variablendiagramm und ermitteln Sie die Ausgabe.

int a=10,c;

void plusfive(int b){
  c= b+5; // zu b 5 addieren und in c speichern;
}

void main(){ // dieses Rezept wird ausgeführt
  plusfive(a);
  cout << c; // plusfive(a) aufrufen, Seiteneffekt auf c und den Wert von c ausgeben
}

Hier besteht die Wirkung durch den Seiteneffekt auf die globale Variable c, in der das Ergebnis gespeichert wird.

Seiteneffekt

Erstellen Sie für folgenden Quelltext ein Variablendiagramm und ermitteln Sie die Ausgabe.

int a=10,b=5,c; // Variablen vereinbaren

void sum(){  // Unterprogramm namens sum()
 a= a-5; 
 c= a+b;
}

void ButtonClick(){ // dieses Rezept wird ausgeführt
  sum();  // sum() aufrufen
  sum();  // sum() aufrufen
  Ausgabe(c);
}

Zahlenmatrix modularisieren

Die Lösung der Zahlen-Matrix soll nun modularer gestaltet werden, einzelne Module sollen weiterverwendet werden können.
Dazu ist es notwendig, die das Programm in Module, d.h. Unterprogramme bzw. Funktionen zu zerlegen.
Es soll schrittweise in dieses Thema eingeführt werden.

FrageWelche Module sind sinnvoll, welche Aufgaben-Gliederung ergibt sich?

Unterprogramme

Globale Variablen

mögliche Lösung...

Weitere Zerlegung in Funktionen..

Erstellen Sie ein Struktogramm für Ihre Lösung.

 

© Oliver Mezger 28.02.2006 MezData.de Den Kontakt herstellen...