[C/C++] Problem mit Void Funktion

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Leon, 17. November 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 17. November 2008
    Problem mit Void Funktion

    Hi,

    habe in C ein problem mit einer Void Funktion, in dieser Berechne ich 2 Werte (Umfang und Flaeche), die Variablen umfang und flaeche werden aus der übergeordneten Funktion übergeben, Bis jetzt war es so dass ich den umfang & die flaeche in der Berechne Funktion ausgegeben habe, nun möchte ich die Ausgabe Funktion aber in der Funktion aufrufen , in der ich auch die berechnen Funktion aufrufe.

    Bisher:
    Code:
    void Berechnung(char eingabe[],float zahlen[],float umfang,float flaeche)
    {
     if(eingabe[0]=='K')
     {
     umfang=2*PI*zahlen[0];
     flaeche=(zahlen[0]*zahlen[0])*PI;
     Ausgabe(eingabe[0],umfang,flaeche); 
     }
    }
    
    void Ausgabe(char figur, float umfang, float flaeche)
    {
     printf("Figur:%c Umfang:%f Fläche:%f\n",figur,umfang,flaeche);
    }
    
    Aufruf:
    Berechnung(eingabe,zahlen,umfang,flaeche);
    
    Nun:
    Code:
    void Berechnung(char eingabe[],float zahlen[],float umfang,float flaeche)
    {
     if(eingabe[0]=='K')
     {
     umfang=2*PI*zahlen[0];
     flaeche=(zahlen[0]*zahlen[0])*PI;
     }
    }
    
    void Ausgabe(char figur, float umfang, float flaeche)
    {
     printf("Figur:%c Umfang:%f Fläche:%f\n",figur,umfang,flaeche);
    }
    
    Aufruf:
    Berechnung();
    Ausgabe();
    
    Bei der zweiten Variante kommt nach der Berechnung jedoch bei beiden Zahlen (umfang und flaeche) 0 oder schwachsinnige Zahlen raus, obwohl diese ja in der Funktion Berechnung() geändert werden müssten ? Mit der ersten Variante funktioniert alles tadellos.
    Hoffe ihr könnt mir helfen .
     
  2. 17. November 2008
    AW: Problem mit Void Funktion

    hi,

    kenne mich nun mit c nicht aus. aber könnte es nicht daranliegen, dass du die variablen nicht public deklariert hast (umfang und fläche)???
    denn woher soll das programm wissen, dass du diese variablen sichtbar für die klasse sind.

    hoffe du verstehst was ich meine.


    nice day!!!
     
  3. 17. November 2008
    AW: Problem mit Void Funktion

    Probiers mal so:

    Code:
    #include <iostream>
    #include <math.h>
    
    float PI = 3.14;
    
    using namespace std;
    
    void Berechnung(char *eingabe,float *zahlen, float [B]&[/B]umfang, float [B]&[/B]flaeche)
    {
     if(eingabe[0]=='K')
     {
     umfang=2*PI*zahlen[0]; // hier wird in die Vaiable 'umfang' in main() geschrieben
     flaeche=(zahlen[0]*zahlen[0])*PI; // hier wird in die Vaiable 'umfang' in main() geschrieben
     }
    }
    
    void Ausgabe(char figur, float umfang, float flaeche)
    {
     printf("Figur:%c Umfang:%f Fläche:%f\n",figur,umfang,flaeche);
    }
    
    int main()
    {
     float umfang = 0, flaeche = 0;
    
     char eingabe[1] = {'K'};
     float zahlen[1] = {1};
    
     Berechnung(eingabe, zahlen, umfang, flaeche);
     Ausgabe('a', umfang, flaeche);
    
     return 0;
    }
    Erklärung: In der main() werden zwei Variablen (umfang, flaeche) angelegt, die dann per Referenz an die Funktion Berechnung übergeben werden (der &-Operator in der Funktionsparameterliste sagt, dass es sich um eine Referenz handelt). Bei einer Referenz wird in die Variable geschrieben, die übergeben wird, es wird also keine Kopie angelegt, wie es ohne Referenz-Operator der Fall ist. Anschließend werden die Variablen umfang und flaeche ohne Referenz an die Funktion Ausgabe übergeben und ausgegeben :]

    (Ich hab oben PI definiert, weil ich net weiß, in welchem Include die drin is )
     
  4. 17. November 2008
    AW: Problem mit Void Funktion

    Sind die übergebenen Parameter mit vorangegangenem & dann Zeigervariablen?
     
  5. 17. November 2008
    AW: Problem mit Void Funktion

    Nein, Referenzvariablen. Zeiger erkennt man am *

    Kleines Beispiel:

    Code:
    #include <iostream>
    
    using namespace std;
    
    void Test_Referenz(int&);
    void Test_Pointer(int*);
    
    int main()
    {
     int iTest = 0;
    
     Test_Referenz(iTest);
    
     cout << iTest; // 1
    
     Test_Pointer(&iTest); // hier ist das & der Adressoperator, das hat nichts mit einer Referenz zu tun
    
     cout << iTest; // 2
    
     return 0;
    }
    
    void Test_Referenz(int &iRef)
    {
     iRef = 1;
    }
    
    void Test_Pointer(int *pRef)
    {
     *pRef = 2; // das nennt man "dereferenzieren", es wird auf die Variable zugegriffen, auf die der Zeiger pRef zeigt
    }
     
  6. 17. November 2008
    AW: Problem mit Void Funktion

    Tja, in C gibts nur leider keine Referenzen. Also musst du Zeiger verwenden.
     
  7. 17. November 2008
    AW: Problem mit Void Funktion

    Habs jetzt anderweitig gelöst , halt 2 verschiedene Funktionen mit Rückgabewert jeweils für Umfang und Flaeche, darf Zeiger nicht benutzen
     
  8. 18. November 2008
    AW: Problem mit Void Funktion

    ~closed~
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.