2 Rückgabewerte einer Funktion



  • 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



  • Tada Neu geschrieben das Programm jetzt aber zeigt er mir bei case5 nichts mehr an also das programm läuft nicht mehr......

    /*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();
    float rechne_optimal();
    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=rechne_optimal();								/*Optimal Berechnung*/
    
    						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);
    }
    
    float rechne_optimal(int volumen)													/*Optimale Material Vebrauch*/        
    {
    	float radius=1;
        float volumen1;
        float oberflaeche;
        float oberflaeche2;
        volumen1=volumen;
        do
          {
            oberflaeche=2*3.14*radius*radius+2*3.14*radius*(volumen1/(3.14*radius*radius));
            radius=radius+0.01;
            oberflaeche2=2*3.14*radius*radius+2*3.14*radius*(volumen1/(3.14*radius*radius));
          }
          while(oberflaeche>=oberflaeche2);
          return(radius);
    }
    
    void ausgabe(float erg)																/*Ausgabefunktion*/
    {
    	printf("\n\nDas Ergebnis ist: %f\n\n", erg);											/*Ergebnisausgabe*/
    }
    

    Das Problem ist bei float rechne_optimal(int volumen) das programm starte nicht mehr wo ist da noch ein fehler ?



  • rechne_optimal hat doch einen int als Parameter, wieso übergibst du ihn nicht beim Aufruf? (und bei der forward declaration steht auch nichts davon)



  • sprich ich könnte auch das int weglassen oder?
    wie würde es dan aussehen kannst mir eine probe version posten bitte`?



  • fflush(stdin) ist undefiniertes Verhalten und somit Schrott.
    Wo holt ihr Anfänger bloß immer so einen Müll her.



  • @Wutz ok schön und gut ich lerne es gerade aber das hilft mir bei meinen problem nicht....



  • Die Profs warens! *g*

    Du kannst alles weglassen, was du willst, solange dein Programm immernoch das macht, was es soll.
    Was es allerdings machen soll, kannst nur du alleine beantworten. Musst du den optimalen Radius für ein festes Volumen berechnen, oder ist Volumen eine variable Größe?



  • volumen ist eine frei wählbare größe ich soll mit nur dem volumen die höhe und den radius berechnen



  • Dann würds Sinn machen, den int drinzulassen, und stattdessen vor dem Aufruf der Funktion das Volumen eingeben und rechne_optimal mit dem neuen Parameter aufrufen.
    Und auch die forward declaration entsprechend anzupassen. Manchmal staun ich echt, was so ein Compiler alles durchgehen lässt ... Welchen benutzt du?


Anmelden zum Antworten