2 Rückgabewerte einer Funktion



  • Hallo liebe Community habe folgendes Problem:
    Ich möchte das mein Programm mir jetzt 2 Funktion auf dem Bildschirm zurück gibt, das Problem ist beim [b]5 Case Fall und ist als Funktion ganz unten als Volumenv1 Deklariert[/b] wo ich einmal die Höhe und den Radius angezeigt haben möchte, aber er zeigt mir immer den 1 Rückgabewert an und nicht beide auf einmal.
    Bitte um Hilfe

    /*Burak Ücöz 12.01.2010*/
    /*Copyright*/
    
    #include<stdio.h>
    #include<math.h>
    
    /*Prototyp*/
    
    int eingabe();
    float volumen();
    float grundflaeche();
    float mantelflaeche();
    float oberflaeche();
    float volumenv1();
    void ausgabe(float erg);
    
    int main(void)																		/*Mainfunktion*/
    {
    	int auswahl, antwort;															/*Variablen deklarieren*/
    	float ergebnis;
    
    	do																/*Programm Schleife*/
    	{
    																	/*auswahl bestimmen*/
    		do
    		{
    			auswahl=eingabe();
    			antwort=0;
    
    			switch(auswahl)
    			{
    																			/*Grundfläche*/
    				case 1:	ergebnis=grundflaeche();
    						break;
    																			/*Mantelfläche*/
    				case 2:	ergebnis=mantelflaeche();
    						break;
    																			/*Oberfläche*/
    				case 3:	ergebnis=oberflaeche();
    						break;
    																			/*Volumen*/
    				case 4:	ergebnis=volumen();
    						break;
    
    				case 5: ergebnis=volumenv1();
    						break;
    
    				default:	printf("\nSie haben eine falsche Eingabe gemacht\n\n");		/*Fehleingabe abfangen bei ungültiger Zahl*/
    							antwort=1;
    							break;
    			}
    		}
    		while(antwort==1);															
    
    		ausgabe(ergebnis);															/*Ausgabefunktion*/
    
    		printf("\n\nWollen Sie das Programm erneut starten? \n1: Ja!\n0: Nein!");			/*Neustarteingabe*/
    		scanf("%i", &antwort);
    		fflush(stdin);
    	}
    	while(antwort==1);
    
    }
    
    /*Funktionen*/
    
    int eingabe()
    {
    
    	int eingabe;
    
    	printf("\n\nBitte suchen Sie sich aus was Sie berechnen moechten\n\n");
    	printf("Fuer Grundflaeche die\t\t[1]\n");
    	printf("Fuer Mantelflaeche die\t\t[2]\n");
    	printf("Fuer Oberflaeche die\t\t[3]\n");
    	printf("Fuer Volumen die\t\t[4]\n");
    	printf("Fuer Minimal Material verbaucht die [5]\n");
    	scanf("%i",&eingabe);
    	fflush(stdin);
    	return(eingabe);
    }
    
    float volumen()																		/*Volumenberechnung*/
    {
    	float hoehe, radius;															/*Variablendeklaration*/
    	float const pi=3.14159265;
    
    	printf("\nBitte geben Sie die Hoehe an:\t");									/*Eingabe Höhe*/
    	scanf("%f", &hoehe);
    	fflush(stdin);
    	printf("\nBitte geben Sie den Radius an:\t");									/*Eingabe Radius*/
    	scanf("%f", &radius);
    	fflush(stdin);
    
    	return(radius*radius*pi*hoehe);
    }
    
    float grundflaeche()																/*Grundflächenberechnung*/
    {
    	float radius;																	/*Variablendeklaration*/
    	float const pi=3.14159265;
    
    	printf("\nBitte geben Sie den Radius an:\t");									/*Eingabe Radius*/
    	scanf("%f", &radius);
    	fflush(stdin);
    
    	return(radius*radius*pi);
    }
    
    float mantelflaeche()																	/*Mantelflächenberechnung*/
    {
    	float hoehe, radius;															/*Variablendeklaration*/
    	float const pi=3.14159265;
    
    	printf("\nBitte geben Sie die Hoehe an:\t");									/*Eingabe Höhe*/
    	scanf("%f", &hoehe);
    	fflush(stdin);
    	printf("\nBitte geben Sie den Radius an:\t");									/*Eingabe Radius*/
    	scanf("%f", &radius);
    	fflush(stdin);
    
    	return(2.0*radius*pi*hoehe);
    }
    
    float oberflaeche()																	/*Oberflächenberechnung*/
    {
    	float hoehe, radius;															/*Variablendeklaration*/
    	float const pi=3.14159265;
    
    	printf("\nBitte geben Sie die Hoehe an:\t");									/*Eingabe Höhe*/
    	scanf("%f", &hoehe);
    	fflush(stdin);
    	printf("\nBitte geben Sie den Radius an:\t");									/*Eingabe Radius*/
    	scanf("%f", &radius);
    	fflush(stdin);
    
    	return(2.0*radius*pi*hoehe+2*radius*radius*pi);
    }
    
    float volumenv1()
    {
    	float volumen, mantelflaeche;
    	float const pi=3.14159265;
    
    	printf("\nBitte geben Sie ihr Volumen an:\t");
    	scanf("%f", &volumen);
    	fflush(stdin);
    	printf("\nBitte geben Sie ihre Mantelfläche an:\t");
    	scanf("%f", &mantelflaeche);
    	fflush(stdin);
    
    	return(2.0*volumen/mantelflaeche);
    	return(mantelflaeche*mantelflaeche/(4*pi*volumen));
    }
    
    void ausgabe(float erg)																/*Ausgabefunktion*/
    {
    	printf("\n\nDas Ergebnis ist: %f\n\n", erg);											/*Ergebnisausgabe*/
    }
    


  • Geht nicht.
    Mit dem return wird die Funktion verlassen.

    Du kannst
    - Call by reference machen
    - Eine struct zurückgeben
    - Im Forum suchen (Die Frage gab es schon oft)

    Und nimm double statt float.



  • Einfaches Beispiel für Call by Reference:

    void CallbyReference(int *a, double *b)
    {
    	*a = 5;
    	*b = 5.5;
    }
    
    int main()
    { 
    	int v1;
    	double v2;
    
    	CallbyReference(&v1, &v2);
    
    	printf("%d %lf\n", v1, v2);
    
    	return 0; 
    }
    


  • Ok ich versuche es mal danke bis morgen



  • Wie baue ich das in meine Funktion unten ein bitte hilft mir verzweifel langsam



  • Du must die Variablen noch ein wenig umstellen, aber vom Prinzip her wie ich es oben gepostet habe.

    void volumenv1(float *r1, float *r2) 
    { 
        float volumen, mantelflaeche; 
        float const pi=3.14159265; 
    
        printf("\nBitte geben Sie ihr Volumen an:\t"); 
        scanf("%f", &volumen); 
        fflush(stdin); 
        printf("\nBitte geben Sie ihre Mantelfläche an:\t"); 
        scanf("%f", &mantelflaeche); 
        fflush(stdin); 
    
        *r1 = (2.0*volumen/mantelflaeche); 
        *r2 = (mantelflaeche*mantelflaeche/(4*pi*volumen)); 
    }
    

    So könntest du es aufrufen

    case 5:
       float ergebnisA, ergebnisB; //An Anfang des Programms
       volumenv1(&ergebnisA, &ergebnisB); //Beide dann später ausgeben
    break;
    


  • case 5: volumenv1(&*r1,&*r2);				 
    					break;
    

    Habs so gemacht wie du es gesagt hast,

    int main(void)																		/*Mainfunktion*/
    {
    	int auswahl, antwort;															/*Variablen deklarieren*/
    	float ergebnis;
    	float ergebnisA, ergebnisB; 
    	float *r1, *r2;
    

    Er sagt mir jetzt aber Fehler 1 error C2660: 'volumenv1': Funktion akzeptiert keine 2 Argumente c:\users\atilla\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp 52 1 Praktikum13



  • Habs so gemacht wie du es gesagt hast

    Mit Sicherheit nicht. Schau mal genauer hin. Du solltest eventuell auch deine Vorwärtsdeklararation an den neuen Funktionskopf anpassen.



  • habe es noch nicht kapiert ich weis aber nicht wie es geht bitte schreib es mal hin mit dem prog ich verzweifel langsam echt.



  • bitte bitte ich hab alles ausprobiert weiß wirklich nicht mehr weiter bitte bitte.......



  • Meinen Post anschauen und abschreiben ist ja kein Ding der Unmöglichkeit!

    Ersetze deine voulumen1() mit meiner volumenv1(..., ...) passe die Vorwärtsdeklaration aus deiner Zeile 14 an.
    Schreibe float ergebnisA, ergebnisB; in oder hinter Zeile 20.
    Rufe die Funktion mit volumenv1(&ergebnisA, &ergebnisB); auf.
    Und lass dir ergebnisA und ergebnisB ausgeben.



  • So ist das Richtig wie ich es jetzt verstanden habe, aber er sagt mir noch die Funktion darf keine 2 Argumente enthalten???

    /*Burak Ücöz 27.01.2010*/
    /*Copyright*/
    
    #include<stdio.h>
    #include<math.h>
    
    /*Prototyp*/
    
    int eingabe();
    float volumen();
    float grundflaeche();
    float mantelflaeche();
    float oberflaeche();
    float volumenv1();
    void ausgabe(float erg);
    float ergebnisA, ergebnisB;
    
    int main(void)																		/*Mainfunktion*/
    {
    	int auswahl, antwort;															/*Variablen deklarieren*/
    	float ergebnis;
    	float ergebnisA, ergebnisB; 
    
    	do																/*Programm Schleife*/
    	{
    																	/*auswahl bestimmen*/
    		do
    		{
    			auswahl=eingabe();
    			antwort=0;
    
    			switch(auswahl)
    			{
    																			/*Grundfläche*/
    				case 1:	ergebnis=grundflaeche();
    						break;
    																			/*Mantelfläche*/
    				case 2:	ergebnis=mantelflaeche();
    						break;
    																			/*Oberfläche*/
    				case 3:	ergebnis=oberflaeche();
    						break;
    																			/*Volumen*/
    				case 4:	ergebnis=volumen();
    						break;
    
    				case 5: volumenv1(&ergebnisA, &ergebnisB);							 //Beide dann später ausgeben 
    						break;
    
    				default:	printf("\nSie haben eine falsche Eingabe gemacht\n\n");		/*Fehleingabe abfangen bei ungültiger Zahl*/
    							antwort=1;
    							break;
    			}
    		}
    		while(antwort==1);															
    
    		ausgabe(ergebnis);															/*Ausgabefunktion*/
    
    		printf("\n\nWollen Sie das Programm erneut starten? \n1: Ja!\n0: Nein!");			/*Neustarteingabe*/
    		scanf("%i", &antwort);
    		fflush(stdin);
    	}
    	while(antwort==1);
    
    }
    
    /*Funktionen*/
    
    int eingabe()
    {
    
    	int eingabe;
    
    	printf("\n\nBitte suchen Sie sich aus was Sie berechnen moechten\n\n");
    	printf("Fuer Grundflaeche die\t\t\t[1]\n");
    	printf("Fuer Mantelflaeche die\t\t\t[2]\n");
    	printf("Fuer Oberflaeche die\t\t\t[3]\n");
    	printf("Fuer Volumen die\t\t\t[4]\n");
    	printf("Fuer Minimal Material verbaucht die \t[5]\n");
    	scanf("%i",&eingabe);
    	fflush(stdin);
    	return(eingabe);
    }
    
    float volumen()																		/*Volumenberechnung*/
    {
    	float hoehe, radius;															/*Variablendeklaration*/
    	float const pi=3.14159265;
    
    	printf("\nBitte geben Sie die Hoehe an:\t");									/*Eingabe Höhe*/
    	scanf("%f", &hoehe);
    	fflush(stdin);
    	printf("\nBitte geben Sie den Radius an:\t");									/*Eingabe Radius*/
    	scanf("%f", &radius);
    	fflush(stdin);
    
    	return(radius*radius*pi*hoehe);
    }
    
    float grundflaeche()																/*Grundflächenberechnung*/
    {
    	float radius;																	/*Variablendeklaration*/
    	float const pi=3.14159265;
    
    	printf("\nBitte geben Sie den Radius an:\t");									/*Eingabe Radius*/
    	scanf("%f", &radius);
    	fflush(stdin);
    
    	return(radius*radius*pi);
    }
    
    float mantelflaeche()																	/*Mantelflächenberechnung*/
    {
    	float hoehe, radius;															/*Variablendeklaration*/
    	float const pi=3.14159265;
    
    	printf("\nBitte geben Sie die Hoehe an:\t");									/*Eingabe Höhe*/
    	scanf("%f", &hoehe);
    	fflush(stdin);
    	printf("\nBitte geben Sie den Radius an:\t");									/*Eingabe Radius*/
    	scanf("%f", &radius);
    	fflush(stdin);
    
    	return(2.0*radius*pi*hoehe);
    }
    
    float oberflaeche()																	/*Oberflächenberechnung*/
    {
    	float hoehe, radius;															/*Variablendeklaration*/
    	float const pi=3.14159265;
    
    	printf("\nBitte geben Sie die Hoehe an:\t");									/*Eingabe Höhe*/
    	scanf("%f", &hoehe);
    	fflush(stdin);
    	printf("\nBitte geben Sie den Radius an:\t");									/*Eingabe Radius*/
    	scanf("%f", &radius);
    	fflush(stdin);
    
    	return(2.0*radius*pi*hoehe+2*radius*radius*pi);
    }
    
    void volumenv1(float *r1, float *r2) 
    { 
        float volumen, mantelflaeche; 
        float const pi=3.14159265; 
    
        printf("\nBitte geben Sie ihr Volumen an:\t"); 
        scanf("%f", &volumen); 
        fflush(stdin); 
        printf("\nBitte geben Sie ihre Mantelfläche an:\t"); 
        scanf("%f", &mantelflaeche); 
        fflush(stdin); 
    
        *r1 = (2.0*volumen/mantelflaeche); 
        *r2 = (mantelflaeche*mantelflaeche/(4*pi*volumen)); 
    }
    
    void ausgabe(float erg)																/*Ausgabefunktion*/
    {
    	printf("\n\nDas Ergebnis ist: %f\n\n", erg);											/*Ergebnisausgabe*/
    }
    


  • Zeile 14 ändern!



  • DirkB schrieb:

    Zeile 14 ändern!

    🙄



  • Und bei Zeile 60 musst du bei auswahl == 5 ergebnisA und ergebnisA ausgeben



  • Zeile 60 sieht so aus und bringt nichts:

    }
    		while(antwort==1);															
    
    		ausgabe(ergebnis==5);															/*Ausgabefunktion*/
    
    		printf("\n\nWollen Sie das Programm erneut starten? \n1: Ja!\n0: Nein!");			/*Neustarteingabe*/
    		scanf("%i", &antwort);
    		fflush(stdin);
    	}
    	while(antwort==1);
    

    und Zeile 14 so wie ich es mit meinen Dummen Kopf verstanden habe:

    #include<stdio.h>
    #include<math.h>
    
    /*Prototyp*/
    
    int eingabe();
    float volumen();
    float grundflaeche();
    float mantelflaeche();
    float oberflaeche();
    float volumenv1(ergebnisA, ergebnisB);
    void ausgabe(float erg);
    float ergebnisA, ergebnisB;
    
    int main(void)																		/*Mainfunktion*/
    {
    	int auswahl, antwort;															/*Variablen deklarieren*/
    	float ergebnis;
    	float ergebnisA, ergebnisB;
    

    Läuft nicht tja...... und kamm man es nicht über printf im 5 case ausgeben 😡 😡 😡



  • Das ist kein Funktionskopf!

    void volumenv1(float *r1, float *r2)
    

    Das ist er!



  • Uberleg doch mal selber was da passieren soll. Von volumenv1 bekommst du zwei Werte zurück, also musst du aush zwei Werte ausgeben, sonst brauchst du den Aufriss nich machen.

    DirkB schrieb:

    Und bei Zeile 60 musst du bei auswahl == 5 ergebnisA und ergebnisA ausgeben

    Das heisst in Pseudocode

    wenn auswahl == 5 ist dann
      ausgabe von ergebnisA
      ausgabe von ergebnisB
    sonst
      ausgabe von ergebnis
    endewenn
    

    und nicht das du (auswahl == 5) ausgeben sollst.



  • Und vergiss in Zeile 14 nicht das Semikolon am Ende.



  • Danke Läuft


Anmelden zum Antworten