Wie gibt eine Funktion zwei Werte aus?



  • Alternativ:

    void bla(int* p1, int* p2)
    {
      // ..
      *p1 = /*ein Wert*/;
      *p2 = /*ein Wert*/;
    }
    


  • Ich will es mal der Übersichtlichkeit halber konkretisieren:

    double Formel (double a,double b,double c)
    {
    	double p,q;
    	if (a!=0)
    	{
    		p=b/a;
    		q=c/a;
    		if (q<=((p*p)/4))
    		{
    			return -(p/2)+(sqrt((p*p)/4)-q);
    			return -(p/2)-(sqrt((p*p)/4)-q);
    		}
    		else 
    		{
    			return -(p/2)+(sqrt(q-((p*p)/4)));
    			return -(p/2)-(sqrt(q-((p*p)/4)));
    		}
    	}
    	else
    	{
    		if (b!=0)
    		{
    			return -(c/b);
    		}
    		else
    		{
    			return x;
    		}
    	}
    }
    

    Also für den Fall, dass a ungleich 0 und q kleiner gleich p²/4, möchte ich z.B., dass er die Werte -(p/2)+(sqrt((p*p)/4)-q) und -(p/2)-(sqrt((p*p)/4)-q) herausgibt. Wenn es mit dem zweifach hintereinander geschriebenen return nicht funktioniert, ist es hier natürlich dann noch falsch im Code, aber ich denke, man sieht, was ich möchte 😉



  • Wie gesagt, Rückgabe von mehr als einem Wert geht nicht. Entweder Du packst die Ergebnisse in eine Struktur, siehe oben, oder Du definierst die Ergebnisvariablen in der aufrufenden Funktion, und übergibst Zeiger auf diese Variablen, siehe Post von Vicious Falcon.



  • Ich würde einen Pointer auf eine Struktur mit allen erforderlichen Ergebnissen und einen integer Rückgabewert der anzeigt wie die Ergebnisse in der Struktur zu interpretieren sind empfehlen.



  • Du kannst aber auch Call-by-Reference benutzen, also die Adresse der Variablen übergeben (so wie bei scanf).

    int Formel (double a,double b,double c, double *wert1, double *wert2)
    

    In der Funktion selber schreibst du dann statt dem return z.B.:

    *wert1 = -(p/2)+(sqrt((p*p)/4)-q);
    *wert2 = -(p/2)-(sqrt((p*p)/4)-q);
    return 0; // alles ok
    

    Mit return kannst du dann zurückgeben ob der Vorgang erfolgreich war oder nicht.



  • Dankeschön! Damit kann ich was anfangen 🙂



  • Hier stand mal C++ Code...



  • Ist das denn C99?

    int Formel (double a,double b,double c, double& Out_wert1, double& Out_wert2)
    

    (Ich habe gerade gesucht und keinen Hinweis gefunden 😕 )



  • DirkB schrieb:

    Ist das denn C99?

    Aber natürlich nicht. Weiss Gott, was das sein soll.



  • JaykopX schrieb:

    int Formel (double a,double b,double c, double& Out_wert1, double& Out_wert2)
    

    Was sehe ich da? Ich glaube mit diesem Code bist du hier falsch.



  • Japp war natürlich falsch :D. Kann ja mal vorkommen. Jetzt bitte kein C/C++ Krieg...


Anmelden zum Antworten