[C/C++] Funktion soll mehrere Werte zurückgeben

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von kalash111, 27. Juni 2011 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 27. Juni 2011
    Funktion soll mehrere Werte zurückgeben

    Hallo Leute,

    wenn ich z.B eine Funktion habe, weiß ich nur wie ich einen Wert zurück geben kann. Ich möchte aber 2 zurück geben.Nur weiß ich nicht wie. Eine Structur erstellen?
    Und bitte so einfach es geht, ich befinde mich noch am anfangsten Anfang^^

    Ein Beispiel:

    PHP:
    #include <iostream>


    using  namespace  std ;

    float Kegelvolumen ( float r float h ) //Radius und Höhe werden übergeben
    {
        const 
    float Pi = 3.1415926 ;
        
    float g = Pi * r * r ;
        
    float v = g * h / 3 ;

        return 
    v ;
    }


    Wenn ich aber jetzt noch etwas berechnen möchte, wie die Mantelfläche oder so. Wie kann ich es auf dem einfachsten Weg machen.
    Ich bedanke mich für eure Hilfe.

    MfG
    kalash111
     
  2. 27. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    Einfachste Weg mit Zeiger:
    Code:
    void Kegelvolumen(float r, float h, float *r1, float *r2)//Radius und Höhe werden übergeben 
    { 
     const float Pi=3.1415926; 
     float g=Pi*r*r; 
     float v=g*h/3; 
    
     *r1=v; 
     *r2=g; 
    } 
    
    aufruf:
    
    float result1, result2;
    
    Kegelvolumen(1.0,2.0,&result1,&result2);
    Besser wäre es wohl mit einer Klasse und Instanzvariablen.
     
  3. 27. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    So sieht's aus. Gibt halt noch die Möglichkeit über dynamische Speicherreservierung oder statischen Speicher zu verwenden, aber davon würd ich abraten.

    //E:
    slow :s

    @nos
    das hat ich fast vergessen >D

    //E2:
    würd da in c++ aber doch eher zu Referenzen greifen anstatt die Zeiger - oder?!
     
  4. 27. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    Hmm irgendwie kriege ich das trotzdem nicht hin-.-

    Es geht halt darum, dass ich ne Klausur über Programmieren schreibe, wir aber weder was mit void noch was mit Zeigern gemacht haben, auch nicht mit Funktionen von 2 Rückgabewerten.
    Dann habe ich Altklausuren "gerechnet" und bin auf das Problem gestoßen. Daraufhin hab ich den Dozenten angesprochen und er hat mir rigenwas versucht in der Hetze zu erkären, hats aber nicht hinbekommen außer irgendwelche gebrochenen Sätze.

    verstehe das mit dem 1.0 und 2.0 nicht und die Sternchen * kenne ich auch nicht.

    Vllt. könnten wir ja eine einfaches Programm für die berechnung von v und g schreiben, damit ich das auf solche einfachen Fälle anwenden kann. Wäre echt sehr nice.

    Ich fange mal an soviel ich kann^^

    PHP:
    #include <iostream>


    using  namespace  std ;





    void Kegelvolumen ( float r float h float  * r1 float  * r2 ) //was bedeuten die * genau?

        const 
    float Pi = 3.1415926
        
    float g = Pi * r * r
        
    float v = g * h / 3

        *
    r1 = v
        *
    r2 = g
    }  

    void main ()
    {
        
    float r , h ;

        
    cout << "Bitte geben Sie den Radius r und die Hoehe h ein " << endl ;
        
    cout << "r :" ;
        
    cin >> r ;
        
    cout << endl ;
        
    cout << "h :" ;
        
    cin >> h ;

        
    Kegelvolumen ( 1.0 , 2.0 ,& r ,& h ); //irgendwie nicht richtig
    }
     
  5. 27. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    Nachdem du die Funktion aufgerufen hast (Kegelvolumen(1.0, 2.0, &r, &h)) stehen die Zielwerte in den float-Variablen r und h. Du belegst diese innerhalb der Funktion mit einem Zeiger.. das bedeutet das Sternchen
     
  6. 27. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    1.0 und 2.0 sind ganz einfache Kommawerte, die hier nur zum Testen gedacht sind ^^

    Durch das Sternchen wird angedeutet, dass es sich um einen Zeiger handelt. Wenn ihr
    Zeiger noch nicht hattet, dann macht es jetzt auch wenig Sinn das jetzt zu erklären.
    kann nämlich am Anfang (je nach dem wie fit und interessiert du bist) ganz schöner Brainf*ck sein.

    Der Source von NOS sollte so eigl einwandfrei funktionieren.
    Wenn du Strukturen schon hattes (was ich mir nicht vorstellen kann, da dir
    ja nichtmal void bekannt ist), hab ich hier mal ne Lösung:
    Spoiler
    Code:
    // Definition der Struktur..
    struct volumeinfo {
     float g, v;
    };
    
    volumeinfo Kegelvolumen(float r, float h)
    {
     const float Pi=3.1415926; 
     float g=Pi*r*r; 
     float v=g*h/3;
    
     // Struktur mit werten Definieren
     volumeinfo temp = { g, v };
     return temp;
    }
    
    // Main Funktion
    int main()
    {
     float r = 0.5;
     float h = 2.21;
    
     volumeinfo vinf = Kegelvolumen(r, h);
     cout << vinf.g << endl vinf.v;
     
     return 0;
    }

    Zu deinem Programm:

    Code:
    #include <iostream>
    
    
    using namespace std;
    
    
    
    
    
    void Kegelvolumen(float r, float h, float *r1, float *r2)//was bedeuten die * genau?
    { 
     const float Pi=3.1415926; 
     float g=Pi*r*r; 
     float v=g*h/3; 
    
     *r1=v; 
     *r2=g; 
    } 
    
    [B][COLOR="Red"]Wie kommst du hier auf [U]void[/U]?[/COLOR][/B]
    void main()
    {
     float r,h;
    
     cout<<"Bitte geben Sie den Radius r und die Hoehe h ein "<<endl;
     cout<<"r :";
     cin>>r;
     cout<<endl;
     cout<<"h :";
     cin>>h;
    
     [B][COLOR="Red"]r und h musst du als 1. und 2. Parameter übergeben, dann ach
     kommen die Variablen, wo du die ergebnisse drinn speichern willst[/COLOR][/B]
     Kegelvolumen(1.0,2.0,&r,&h);//irgendwie nicht richtig
    }
    mfg

    //E:
    Warum dann eigl das ganze? Wird ja wohl nicht dran kommen
     
  7. 27. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    Also erstmal danke für die Antworten, werde mir das morgen mit alles anschauen, gleich in Bettchen.
    Wozu das ganze? Der Dozent hat es nicht durchgenommen, heißt nicht, dass es nicht drankommt bei dem -.- . Man könnte zwar davon ausgehen, aber ich möchte das halt wissen fürs Gewissen
    Also Bw sind raus, und gn8. Werde wenn nötig den Kommentar morgen editieren.
     
  8. 27. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    ich denke so sollte es stimmen

    Code:
    #include <iostream>
    
    using namespace std;
    
    void Kegelvolumen(float r, float h, float& g, float& v)
    {
     const float Pi=3.1415926;
    
     g = Pi * r * r;
     v = g * h / 3;
    }
    
    int main()
    {
     float r, h, g, v;
    
     cout<<"Bitte geben Sie den Radius r und die Hoehe h ein "<<endl;
     cout<<"r :";
     cin>>r;
     cout<<endl;
     cout<<"h :";
     cin>>h;
    
     Kegelvolumen(r, h, g, v);
    
     // weitermachen
    
     cout << "g: " << g << endl;
     cout << "v: " << v << endl;
    
     return 0;
    }
    
     
  9. 27. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    So wie das aussieht habt ihr noch nicht viel durchgenommen.
    Wenn es um eine Klausur geht, reicht das Wissen wohl:

    Es gibt diese Möglichkeiten um aus einer Funktion mehr als einen Wert zu bekommen:

    1) Man speichert das Gewünschte in eine globale Variable
    2) Man gibt eine Klasse (in C++) bzw. Struktur (in C) zurück
    3) Man arbeitet mit Zeigern
    4) Kombination von 2 und 3

    Beachte: Eine Funktion sollte immer einfach sein und selbsterklärend. Eine Funktion sollte immer nur einen Logik-Abschnitt verarbeiten.

    z.B. Willst du das Volumen und die Mantelfläche von einem Körper berechnen ->
    2 Funktionen sind nötig mit je einem Rückgabewert. Folglich sind Funktionen mit mehreren Rückgabewerten eher selten.
     
  10. 28. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    Mal so ne dumme frage, kann man in C keine Arrays via Return zurück geben?^^
    das wäre doch wohl erstmal das einfachste ^^
    oder vll auch mehrdimensionale Arrays...
    Ich kann mir net Vorstellen das man Struct schon hatte aber noch keine Zeiger, ist net böse gemeint, aber vor 3 oder 4 Jährchen als ich in der Schule saß, kamen die Zeiger relativ früh nach Datentypen Arrays und Funktionen^^
     
  11. 28. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    das wäre auch meine Lösung gewesen, aber das hat xXsourceXx ja schon oben gemacht.

    Code:
    // Definition der Struktur..
    struct volumeinfo {
     float g, v;
    };
    
    volumeinfo Kegelvolumen(float r, float h)
    {
     const float Pi=3.1415926; 
     float g=Pi*r*r; 
     float v=g*h/3;
    
     // Struktur mit werten Definieren
     volumeinfo temp = { g, v };
     return temp;
    }
    
    // Main Funktion
    int main()
    {
     float r = 0.5;
     float h = 2.21;
    
     volumeinfo vinf = Kegelvolumen(r, h);
     cout << vinf.g << endl vinf.v;
     
     return 0;
    }
    
    Würde auch gern mal von den Cracks hier wissen warum das nicht die bevorzugte Lösung ist? (ernsthaft)

    Viele Grüße

    Neo
     
  12. 28. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    Dein Beispiel führt zu einem undefinierten Verhalten, weil der Gültigkeitsraum deiner Variable nach der Funktion endet.

    Am besten schreibt der TE 2 Funktionen, da es auch, wie n0s schon erwähnte, 2 unterschiedliche Aufgaben sind. Solltest Du dich trotzdem für deine Variante entscheiden, regle es per Referenzen (Mehr brauchst Du hier nicht).
     
  13. 28. Juni 2011
    AW: Funktion soll mehrere Werte zurückgeben

    Sooo Guten Morgen,

    bin mal die Beiträge durchgegangen:

    @xXsoureXx : Kann dein Programm nachvollziehen, mit den Strukturen.Danke!

    @Murdoc : Kann dein Programm auch nachvollziehen.Danke auch dir.

    @N0S und terraNova: Das mit den 2 Funktionen ist natürlich logisch, wenn aber die Aufgabe fortdert eine Funktion zu schreiben die den Wert x und den Wert y zurückgeben soll, dann weiß ich nicht ob zwei funktionen so durchegen^^

    An die anderen auch ein Danke, Bw sind raus und Thema *closed*

    MfG
    kalash111
     
  14. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.