Funktionen mit Rückgabewert

Es gibt Funktionen ohne Rückgabewert - und es gibt Funktionen mit Rückgabewert.

Ganz einfach: Eine Funktion kann zum Beispiel etwas berechnen und danach mit return das Ergebnis der Berechnung an das Hauptprogramm zurückgeben.

Oder es tut etwas anderes wie hier:

Von jeher (von der Programmiersprache C) ist es ganz normal, dass eine Funktion einen Rückgabewert zurückgibt. Dieser Rückgabewert ist vielleicht eine ganze Zahl, oder er ist vielleicht ein Zeiger (dazu später!).

Eine Funktion kann einen Wert zurückliefern. Das ist sehr praktisch.

Sieh Dir das folgende Programm einmal an! Der Datentyp, der an das Hauptprogramm main() zurückgegeben wird, muss feststehen. Hier steht vorne vor dem Namen der Funktion das Schlüsselwort int (int abrunden(float)). Dieses Wort vorne - hier int - zeigt den Rückgabewert an; der Rückgabewert ist der eine Wert, der aus der Funktion "herausfließt". Das Schlüsselwort hinter dem Funktionsnamen (hier float) ist der Datentyp des Arguments, das in die Funktion "hineinfließt".

//funktion.cpp
#include <iostream>//cout

using namespace std;

int abrunden(float);//Funktionsdeklaration

int main()
{
    cout << "Bitte eine Zahl mit Punkt dazwischen eingeben (wie 3.14) : ";
    float eingabe;
    cin >> eingabe;
    int ausgabe = abrunden(eingabe);
    cout << ausgabe;
    cout << endl;
    system("pause");
    return 0;
}

int abrunden(float hinein)//Funktionsdefinition
{
    int aus = hinein;
    return aus;
}

Pounds

Es geht um die so genannte Funktionsdeklaration als Beispiel: float ptok(float pounds);. Das erste float steht für den Wert, der an die übergeordnete Funktion zurückgereicht wird.

Sieh Dir das folgende Programm an! Der Datentyp, der an das Hauptprogramm main() zurückgegeben wird, muss wieder fest sein. Hier steht vorne vor dem Namen der Funktion (ptok) das Schlüsselwort float. Das Wort vorne zeigt den Rückgabewert an. Das Schlüsselwort hinter dem Funktionsnamen (hier auch float in float pounds) ist der Datentyp des Arguments, das in die Funktion "hineinfließt".

//pound.cpp

//nach Lafore Seite 243

 

#include <iostream>

using namespace std;

 

float ptok(float pounds);

 

int main()

{

float pound;

float kg;

cout << "Tippen Sie ein Gewicht in Pound ein! Hier: ";

cin >> pound;

//Funktion gibt Wert in float zurück:

kg = ptok(pound);

cout << endl << "Das Gewicht in kg: " << kg;

return 0;

}

 

float ptok(float pounds)

{

float kilogr = 0.453592 * pounds;

return kilogr;

}

 

Ein gutes Beispiel

Im folgenden Programm wird eine Funktion mit einem Rückgabewert eingeführt. Die Funktion heißt: istGerade(). Der Rückgabewert ist vom Typ bool (Bool'scher Wert: true oder false). Im Hauptprogramm wird diese Funktion einmal aufgerufen.

//gerade.cpp

#include <iostream>//cout, cin
#include <conio.h>//getch
using namespace std;

bool istGerade(int za) //Rueckgabewert bool
{
    bool bo = za % 2 == 0;
    return bo;
}

int main()
{
    cout << "Bitte gib eine ganze Zahl ein: ";
    int zahl;
    cin >> zahl;
    bool b = istGerade(zahl);
    cout << endl << "BOOL: " << b;
    cout << endl << zahl << " ist ";
    switch (b)
    {
        case false: cout << "ungerade."; break;
        case true: cout << "gerade.";
    }
    getch();
    return 0;
}



Jahr: Das Schaltjahr ermitteln

Im unten hineingestellten Programm geschieht ganz Ähnliches. Der Rückgabewert ist wieder vom Typ bool (true oder false). Im Hauptprogramm wird diese Funktion zweimal aufgerufen.

//jahr.cpp

//Ermittlung des Schaltjahrs

#include <iostream> //cout, endl, <<

#include <conio.h> //getch()

using namespace std;

 

//Funktionsdeklaration:

bool istSchaltjahr(int j);

 

int main()

{

bool wahrheit;

int jahr = 2000;

wahrheit = istSchaltjahr(jahr);

if (wahrheit == true)

cout <<endl<< jahr << " ist ein Schaltjahr.";

else

cout <<endl<< jahr << " ist kein Schaltjahr! Also kein 29.2.!";

 

jahr = 2015;

wahrheit = istSchaltjahr(jahr);

if (wahrheit == true)

cout <<endl<< jahr << " ist ein Schaltjahr.";

else cout <<endl<< jahr << " ist keins.";

 

cout << endl << endl << "Taste bitte ...";

getch();

return 0;

}//Ende main()

 

bool istSchaltjahr(int j) //Rueckgabewert bool

{

if (j % 400 == 0) return true;

else if (j % 100 == 0) return false;

else if (j % 4 == 0) return true;

else return false;

}

 


Im folgenden Programm gibt es auch Funktionen mit einem Rückgabewert. Hier ist es ein int (Integer, ganze Zahl). Es ist ganz praktisch, diese ganze Zahl an das Hauptprogramm zurückzugeben.

//rechner.cpp

#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

 

int addier();

int subtrahier();

int multiplizier();

int dividier();

 

const int RECHENMETHODEN = 4;

const int MAX = 12;

 

int main()

{

            const unsigned char oe = static_cast<unsigned char>(148);

            const unsigned char ue = static_cast<unsigned char>(129);

            srand(time(NULL));

            cout << "Dieser Rechner kann f" << ue << "r dich addieren, subtrahieren," << endl;

            cout << "multiplizieren und dividieren. Aber zuerst musst du!" << endl;

            char wiederhol;

            do

            {

                        int zaehler = 0;//Hier mit Null anfangen!

                        for(int x=0; x<MAX; ++x)

                        {

                                   cout << endl;

                                   int zufall = rand()%RECHENMETHODEN;

                                   int loesung;

                                   switch(zufall)

                                   {

                                               case 0: loesung = addier(); break;

                                               case 1: loesung = subtrahier(); break;

                                               case 2: loesung = multiplizier(); break;

                                               case 3: loesung = dividier();

                                   }//switch

                                   int eingabe;

                                   cin >> eingabe;

                                   bool merker = false;

                                   if(eingabe==loesung) { merker=true; zaehler++; }

                                   cout << (merker?"Richtig":"Falsch") << ".  ";

                                   cout << loesung << " ist die richtige L" << oe << "sung." << endl;

                        }//for

                        cout << endl << endl;

                        cout << "Du hast " << zaehler << " von " << MAX << " Aufgaben richtig gel"

                                                << oe << "st." << endl;

                        cout << "Noch einmal genauso rechnen? (j/n und RETURN) ";

                        cin >> wiederhol;

            } while(wiederhol=='j');

            cout << "Am Ende bitte RETURN dr" << ue << "cken!" << endl;;

            cin.sync();

            cin.get();

            return 0;

}

 

int addier()

{

            int a = rand()%91+2;

            int b = rand()%52+2;

            cout << "Was ist " << a << " plus " << b << "?" << endl;

            return a + b;

}

int subtrahier()

{

            int a = rand()%38+2;

            int b = rand()%20+2;

            int c = a + b;

            cout << "Was ist " << c << " minus " << b << "?" << endl;

            return a;

}

int multiplizier()

{

            int a = rand()%19+2;

            int b = rand()%19+2;

            int c = a * b;

            cout << "Was ist " << a << " mal " << b << "?" << endl;

            return c;

}

int dividier()

{

            int a = rand()%10+2;

            int b = rand()%9+2;

            int c = a * b;

            cout << "Was ist " << c << " geteilt durch " << b << "?" << endl;

            return a;

}

Der um eine gewisse Nuance verbesserte Rechner:


Und hier noch ein ziemlich raffiniertes Programm mit Bitmanipulation und Rückgabewerten.