2 Rückgabewerte einer Funktion



  • 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?



  • visual studio 2010



  • Wie sieht das im programm aus ich weiß ich nerve aber bitte poste mir die gute version ich sehe nichts mehr .......



  • Du weisst wie man Eingaben mit scanf macht (siehe die eingabe()-Methode) und du weisst wie man Parameter übergibt (siehe ausgabe()-Methode und vor allem deren Aufruf).
    Probiers mal selbst, ich denke das schaffst du locker.



  • float rechne_optimal()													/*Optimale Material Vebrauch*/        
    {
        float radius=1;
        float volumen1;
        float oberflaeche;
        float oberflaeche2;
        float const pi=3.14159265;
    	volumen1=volumen;
    
    	printf("Bitte geben Sie das Volumen an");
    	scanf("%f", &volumen1);
    	fflush(stdin);
    
    	do
          {
            oberflaeche=2*pi*radius*radius+2*pi*radius*(volumen1/(pi*radius*radius));
            radius=radius+0.01;
            oberflaeche2=2*pi*radius*radius+2*pi*radius*(volumen1/(pi*radius*radius));
          }
    		while(oberflaeche>=oberflaeche2);
    		return(radius);
    }
    
    void ausgabe(float erg)																/*Ausgabefunktion*/
    {
    	printf("\n\nDas Ergebnis ist: %f\n\n", erg);											/*Ergebnisausgabe*/
    }
    

    SO? geht auch nicht bei mir



  • Was gibst du denn für ein Volumen ein?



  • kann ich frei auswählen aber er starte das programm nicht bei mir:

    1> Pr13.cpp
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(59): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(82): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(92): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'const float'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(95): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(98): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(107): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'const float'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(110): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(119): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'const float'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(122): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(125): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(128): warning C4244: 'return': Konvertierung von 'double' in 'float', möglicher Datenverlust
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(134): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'const float'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(137): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(140): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(143): warning C4244: 'return': Konvertierung von 'double' in 'float', möglicher Datenverlust
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(152): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'const float'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(153): warning C4244: '=': Konvertierung von 'int' in 'float', möglicher Datenverlust
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(157): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304): Siehe Deklaration von 'scanf'
    1>c:\users\burak\documents\visual studio 2010\projects\praktikum13\praktikum13\pr13.cpp(165): warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust
    1>Pr13.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""float __cdecl rechne_optimal(void)" (?rechne_optimal@@YAMXZ)" in Funktion "_main".
    1>C:\Users\Burak\documents\visual studio 2010\Projects\Praktikum13\Debug\Praktikum13.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.



  • Ich habe deine Berechnungen nicht wirklich verstanden, aber in etwa so müsste es gehen:

    http://ideone.com/g08ec



  • ja genau aber jetzt gibt er mir nur einen wert und das ist der radius aber die höhe gibt er nicht zurück, aber das programm starte nicht bei mir....



  • Du berechnest ja auch nur den Radius.

    Auch ist das Ergebnis in dem Beispiel von Wutz falsch.



  • generell getchar



  • Jetzt möchte ich das er mir beim 5 case unten in der Berechnung den wert zurück gibt aber dies macht er nicht: und zwar soll er diese rechnung zurückgeben bei float rechne_optimal(int volumen)!!!

    #include<stdio.h>
    #include<math.h>
    
    /*Prototyp*/
    
    int eingabe();
    float volumen();
    float grundflaeche();
    float mantelflaeche();
    float oberflaeche();
    float rechne_optimal();
    void ausgabe(float erg);
    
    int main(void)																		/*Mainfunktion*/
    {
    	int auswahl, antwort;															/*Variablen deklarieren*/
    	int radius;
    	int volumen1;
    	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 des Materialeinsatzes*/
    						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;
        float const pi=3.14159265;
    	volumen1=volumen;
    
    	printf("Bitte geben Sie das Volumen an");
    	scanf("%f", &volumen1);
    	fflush(stdin);
    
    	do
          {
            oberflaeche=2*pi*radius*radius+2*pi*radius*(volumen1/(pi*radius*radius));
            radius=radius+0.01;
            oberflaeche2=2*pi*radius*radius+2*pi*radius*(volumen1/(pi*radius*radius));
          }
    		while(oberflaeche>=oberflaeche2);
    		return(radius);
    }
    void ausgabe(float erg)																/*Ausgabefunktion*/
    {
    	printf("\n\nDas Ergebnis ist: %f\n\n", erg);											/*Ergebnisausgabe*/
    }
    


  • float rechne_optimal(int volumen)       // ist aber anders deklariert, Zeile 11: float rechne_optimal();    /*Optimale Material Vebrauch*/        
    {
        float radius=1;                // ist dieser Startwert sinnvoll?
    ...}
    

    Was passiert eigentlich genau?
    Stürzt da Programmab oder reagiert es nicht mehr?
    Welchen Wert gibst du ein? (Die Zahlen will ich wissen)


Anmelden zum Antworten