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: SDurch 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](¶meter); puts(parameter.msg); printf("Ergebnis: %lf\n", parameter.result ); return 0; }