pyramide berechnen



  • Für den Matheunterricht versuche ich gerad ein Programm zu schreiben, dass zu zwei gegebenen Variablen die Restlichen Angaben einer Pyramide wie Volumen, Fläche etc. berechnet.

    Der Benutzer soll die beiden Variablen z.B. wie folgt auswählen:

    Das Programm stellt folgendes zur Auswahl:
    1: a
    2: b
    3: h
    4: Höhe der Seite
    5: s
    6: V
    7: O
    8: S

    Durch die Zahlenkombination, z.B. 12 kann dann die entsprechende Programmfunktion ausgewählt werden.

    Wie kann ich die Eingabe des Benutzers sinnvoll auswerten?
    ich kann schlecht 64 if-Bedingungen setzen.



  • du kannst ein menü schreiben, das dem benutzer angezeigt wird und in dem genau festgelegt ist, was berechnet werden kann.
    dem entsprechend muss der benutzer die eingaben machen.



  • Riff schrieb:

    ich kann schlecht 64 if-Bedingungen setzen.

    es sind doch weniger, 8*8/2-4 oder so.
    🙂



  • ja, aber es gibt ja 64 verschiedene Möglichkeiten der Eingabe. Dann müsste ich ja für jede dieser 64 Menümöglichkeiten die entsprechende Formel umstellen und einbinden



  • äääh..wo ist denn das problem? überleg dir doch erstmal, was man denn alles ( eventuell sinnvolles) an einer pyramide ausrechnen könnte.
    dafür stellst du ein menü zusammen.

    so viel kann das doch nicht werden oder ?



  • also ich hab keine Ahnung, was genau du alles berechnen willst, aber um Lineare Gleichungssysteme(das ist wohl eins oder nicht?) zu lösen bieten sich Matrizen an. Dann hast du nur eine einzige Funktion. bloß mit anderen werten.



  • naja, also für eine pyramide gilt ja z.B.:

    Volumen = Grundfläche * Höhe * 1/3

    wenn der benutzer nun angibt, er wisse das volumen und die grundfläche, so könnte man die Höhe einfach berechnen, indem man die Gleichung umstellt.

    Nach dem Prinzip könnte man theoretisch auch bei allen anderen Möglichkeiten vorgehen, nur müsste ich dann 64 Bedingungen eingeben, und für jede die Formel umstellen.

    Da muss es doch ne einfachere Lösung geben



  • Riff schrieb:

    naja, also für eine pyramide gilt ja z.B.:

    Volumen = Grundfläche * Höhe * 1/3

    wenn der benutzer nun angibt, er wisse das volumen und die grundfläche, so könnte man die Höhe einfach berechnen, indem man die Gleichung umstellt.

    Nach dem Prinzip könnte man theoretisch auch bei allen anderen Möglichkeiten vorgehen, nur müsste ich dann 64 Bedingungen eingeben, und für jede die Formel umstellen.

    Da muss es doch ne einfachere Lösung geben

    also, ich bin immer noch für ein menü. das menü verzweigt in untermenüs, wo die daten eingegeben werden können. dadurch wird der aufwand wohlmöglich nicht geringer, denn wenn dein programm 64 berechnungsmöglickeiten zur verfügung stellen soll dann musst du so oder so 64 möglichkeiten programmieren.
    eine verzweigung in untermenüs kann die programmpflege und programmierung allerdings stark vereinfachen.

    so könnte man ein menü machen, alternativ zu den funtkionszeigern kann man auch ne switch anweisung nehmen:

    #include <conio.h>
    #include <stdio.h>
    
    #define CHOICE_MAX 4
    #define MSG_LEN 256
    
    int pyramid_menue()
    {
    	int c = 0;
    	puts("------------ Men\x81 -------------\n");
    
    	printf(" 0) Beenden\n"); 
    	printf(" 1) Gesamtkantenl\x8Enge\n"); 
    	printf(" 2) Mantelfl\x8E\che\n"); 
    	printf(" 3) Oberfl\x8E\che\n");
    	printf(" 4) Volumen\n");
    
    	printf("\n\n    Auswahl: ");
    	return c = _getche() - 48;
    //	if ( !scanf("%d", &c )) return -1;
    //	else return c;
    }
    
    struct Param
    {
    	double result;
    	char msg[MSG_LEN];
    };
    
    int Beenden(struct Param* p)
    {
    	strcpy( p->msg, "\n\n\nTsch\x94\x94\x94\x94\x94 !" );
    	p->result = 0; // 
    	return 0; // wenn alles ok
    }
    
    int Gesamtkantenlaenge(struct Param* p)
    {
    	double result = 1.0;  
    	// weitere lokale parameter
    	puts("\n\nEingabe Gesamtkantenlaenge");
    	//.. Berechnung
    
    	strcpy( p->msg, "\n\nMessage Gesamtkantenlaenge z.b. Fehler" );	
    	// ... return 1
    	p->result = result;  // wenn alles ok
    	return 0; 
    }
    
    int Mantelflaeche(struct Param* p)
    {
    	double result = 2.0;  
    	// weitere lokale parameter
    	puts("\n\nEingabe Mantelflaeche");
    	//.. Berechnung
    
    	strcpy( p->msg, "\n\nMessage Mantelflaeche z.b. Fehler" );	
    	// ... return 1
    	p->result = result;  // wenn alles ok
    	return 0; 
    }
    
    int Oberflaeche(struct Param* p)
    {
    	double result = 3.0;  
    	// weitere lokale parameter
    	puts("\n\nEingabe Oberflaeche");
    	//.. Berechnung
    
    	strcpy( p->msg, "\n\nMessage Oberflaeche z.b. Fehler" );	
    	// ... return 1
    
    	p->result = result;  // wenn alles ok
    	return 0; 
    }
    
    int Volumen(struct Param* p)
    {
    	double result = 4.0;  
    	// ... weitere lokale parameter
    	puts("\n\nEingabe Volumen");
    	//.. Berechnung
    
    	strcpy( p->msg, "\n\nMessage Volumen z.b. Fehler" );
    	// ... return 1
    
    	p->result = result;   // wenn alles ok
    	return 0;
    }
    
    int (*pfunc[])(struct Param* ) =
    {
    	Beenden,
    	Gesamtkantenlaenge,
    	Mantelflaeche,
    	Oberflaeche,
    	Volumen
    };
    
    int main()
    {
    	struct Param parameter={0};
    	int choice = pyramid_menue();
    	if ( choice < 0 || choice > CHOICE_MAX )
    	{
    		puts("\n\nSorry No Bonus :-( Eingabe kagge."); return 1;
    	}
    
    	pfunc[choice](&parameter);
    
    	puts(parameter.msg);
    	printf("Ergebnis: %lf\n", parameter.result );
    
    	return 0;
    }
    

    🙂


Anmelden zum Antworten