2 Rückgabewerte einer Funktion



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



  • 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