Wie findet ihr diesen Code?
-
Zeig nochmal verbesserte Version her
-
#include <iostream> int main() { double accelaration; double mass; double power; bool fertig = false; int Durchlaeufe = 100; std::cout << "-------------------------------------------\n" << "-----Willkommen bei dem Kraftberechner-----\n" << "------------------------------------------- " << std::endl; std::cout << "\n\n" << std::endl; std::cout << "Bitte Waehlen sie ihre Berechnungsart: \n" << "(1)Kraft = Beschleunigung * Masse \n" << "(2)Beschleuniging = Kraft/Masse \n" << "(3)Masse = Kraft/Beschleunigung " << std::endl; for (int i = 0; (i < Durchlaeufe) && !fertig; ++i) { switch (std::cin.get()) { case '1': std::cout << "Bitte geben Sie ihre Beschleunigung an(in m/s^2):\n"; std::cin >> accelaration; std::cout << "Geben Sie nun ihre Masse an(in Kilogramm): \n"; std::cin >> mass; power = accelaration * mass; system("cls"); std::cout << "Ergebnis:\n" << power << "N\n"; break; case '2': std::cout << "Bitte geben Sie ihre Kraft an(in Newton):\n"; std::cin >> power; std::cout << "Bitte geben Sie ihre Masse an(in Kilogramm):\n"; std::cin >> mass; accelaration = power/mass ; system("cls"); std::cout << "Ergebnis:\n" << accelaration << "m/s^2\n"; break; case '3': std::cout << "Bitte geben Sie ihre Kraft an(in Newton):\n"; std::cin >> power; std::cout << "Bitte geben Sie ihre Beschleuniging an(in m/s^2):\n"; std::cin >> accelaration; mass = power/accelaration; system("cls"); std::cout << "Ergebnis:\n" << mass << "kg\n"; break; } std::cout <<"Wollen sie eine weitere Rechnung machen?(j/n)" << std::endl; char tmp; std::cin >> tmp; switch(tmp) { case 'j': std::cout << "Bitte Waehlen sie ihre Berechnungsart: \n" << "(1)Kraft = Beschleunigung * Masse \n" << "(2)Beschleuniging = Kraft/Masse \n" << "(3)Masse = Kraft/Beschleunigung " << std::endl; break; case 'n': return 0; break; }; } }
flüchtigkeitsfehler vorbehalten xD habs nur schnell verbessert wie du gesagt hast
-
#include <iostream> void processUserInput() { std::cout << "Bitte Waehlen sie ihre Berechnungsart:" << std::endl << "(1)Kraft = Beschleunigung * Masse" << std::endl << "(2)Beschleuniging = Kraft/Masse" << std::endl << "(3)Masse = Kraft/Beschleunigung" << std::endl; char tmp; std::cin >> tmp; switch(tmp) { case '1': std::cout << "Bitte geben Sie ihre Beschleunigung an(in m/s^2):" << std::endl; std::cin >> accelaration; std::cout << "Geben Sie nun ihre Masse an(in Kilogramm):" << std::endl; std::cin >> mass; power = accelaration * mass; std::cout << "Ergebnis:" << std::endl << power << "N" << std::endl; break; case '2': std::cout << "Bitte geben Sie ihre Kraft an(in Newton):" << std::endl; std::cin >> power; std::cout << "Bitte geben Sie ihre Masse an(in Kilogramm):" << std::endl; std::cin >> mass; accelaration = power / mass; std::cout << "Ergebnis:" << std::endl << accelaration << "m/s^2" << std::endl; break; case '3': std::cout << "Bitte geben Sie ihre Kraft an(in Newton):" << std::endl; std::cin >> power; std::cout << "Bitte geben Sie ihre Beschleuniging an(in m/s^2):" << std::endl; std::cin >> accelaration; mass = power/accelaration; std::cout << "Ergebnis:" << std::endl << mass << "kg" << std::endl; break; default: // Was passiert, wenn der User weder '1', '2' oder '3' eingibt? } std::cout << "Wollen sie eine weitere Rechnung machen?(j/n)" << std::endl; std::cin >> tmp; switch(tmp) { case 'j': processUserInput(); break; case 'n': return; default: // Was passiert, wenn der User weder 'j' noch 'n' eingibt? } } int main() { double accelaration, mass, power; std::cout << "-------------------------------------------" << std::endl << "-----Willkommen bei dem Kraftberechner-----" << std::endl << "-------------------------------------------" << std::endl; processUserInput(); }
Habs mal etwas umgestellt.
-
Das ist ja so fürn A**** in dem Fall alles einfach in eine Funktion zu packen...(vorallem weil deine Version nicht mal funktioniert). Schreib ruhig using namespace std; bei einfachen Programmen wie deins.
-
okay danke für den code
ich glaub ich lass den atomkrieg ausbrechen wenn der user nich auf 1,2,3, 'j' oder 'n' drückt >: D
-
Es heisst nicht Edith, sondern edit ohne h (kommt vom Englischen).
Wie du wahrscheinlich schon selbst bemerkt hast, wiederholt sich der Code in den einzelnen switches zum Grossteil. Warum nicht sowas:
int read_acceleration() { std::cout << "Bitte geben Sie ihre Beschleunigung an(in m/s^2):" << std::endl; int i; std::cin >> i; return i; } // analog für alle Grössen case '1': int a = read_acceleration(); int m = read_mass(); std::cout << "Ergebnis:\n" << a*m << "N\n"; break; // analog für alle cases
Das processUserInput würde ich auflösen, solche Sachen können problemlos in main rein.
-
HighLigerBiMBam schrieb:
Das ist ja so fürn A**** in dem Fall alles einfach in eine Funktion zu packen...(vorallem weil deine Version nicht mal funktioniert). Schreib ruhig using namespace std; bei einfachen Programmen wie deins.
Ist ungetestet
-
ich weiß aber die Form "Edith (sagt:)" is auch gebräuchlich
-
In dem Fall hilft immer eine do-while-Schleife die den user erneut auffordert j bzw. n einzugeben. Switchs case finde ich bei so wenigen Optionen unübersichtlich.
char janein; do { std::cout << "Wollen sie eine weitere Rechnung machen?(j/n)" << std::endl; std::cin >> janein; }while(janein != 'j' || janein != 'n'); if(janein == 'j') processUserInput(); //andernfals ka was du machen willst
-
danke für eure ganzen antworten
so jetzt hab ich den schon fast perfekten code
-
dann zeig her ich wette nicht
-
Du sagtest, dass du "Dev C++" als IDE verwendest.
Ich empfehle dir eine andere zu wählen(Visual C++ 2010 Express oder CodeBlocks). Denn Dev C++ wird schon seit Jahren nicht mehr weiterentwickelt und es gibt einfach besseres
-
hm ich find dev-c++ ganz gut
aber wenn du´s sagst dann schau ich mich mal nach einem neuen um
-
Solltest du definitiv. Dev C++ hat so einige Fehler
-
cool das mir das mal jmd sagt
hmm... was könntet ihe den so empfehlen?
(FAQ... is so ein thema mit mir xD)
-
für Windows Microsoft Visual Studio 2010 Express (kostenlos) für Linux G++ (kostenlos)
-
okay
danke nochmal für eure ganzen antworten
mein nächster code wird bestimmt besser
man sieht sich
mux
-
314159265358979 schrieb:
using namespace std; raus und stattdessen std::cout, std::endl,... verwenden.
Sorry, aber das ist Quatsch. Er benützt so viele std Objekte, verwendet keine weiteren Files, keine eigenen Objekte. Wäre idiotisch, anstatt using namespace std; überall den namespace specifier vorne ran zu setzen.
@Prog_mux: Mach den using namespace std; wieder rein und nimm die std:: weg - ist viel übersichtlicher!
Das "using ..." solltest du als Grundregel nur nicht verwenden in header Files, sowie falls du eigene namespaces definiert hast mit denen du ein Chaos bekommen könntest. Dies ist immer eine Frage der Übersichtlichkeit und Klarheit des Codes. Und in deinem Fall ist die using Direktive nicht nur klarer, sondern auch noch viel angenehmer.Gruss
-
Ich hab mal ein bisschen an dem Code rumgewerkelt.
Code, der sich oft wiederholt, sollte in eine Funktion geschrieben werden. (Faustregel).
Außerdem: nimm einfach '\n' statt std::endl. Siehe hier.
system("cls");
ist zwar sehr unschön, aber du kannst es ruhig verwenden. Ich finde, es stört eigentlich keinen. Denn du schreibst vorerst keine Plattformunabhängigen Programme, sodass es zwar unschön ist, wegen uneffizient, scheiße, kacke und von vielen Leuten verflucht, aber es schadet niemanden. Hähä
Zu meiner do-while Schleife und in der while-Bedingung dann die Funktion: Die Schleife wird einmal durchlaufen, dann wird die Funktion aufgerufen. Wird true, also wahr, zurückgegeben, dann ist die Abbruchbedingung, nämlich das die Funktion wahr zurückgibt, nicht gebrochen und alles läuft weiter. Beim Gegenteil ist folglich das Gegenteil der Fall.
Die meisten Tipps und Hinweise stehen im Code drin, also bitte genau durchlesen und Tipps beachten, so verhinderst du viele Anfängerfehler
Hier der Code:
#include <iostream> #include <cstdlib> #include <conio.h> using namespace std; bool nochmal() { //funktion, die entweder wahr oder falsch zurückgibt, daher vom Typ 'bool' ist char zeichen; do { cout << "Wollen sie eine weitere Rechnung machen?(j/n)\n"; cin >> zeichen; switch(zeichen) { case 'j': return true; break; //die funktion gibt wahr ('true') zurück case 'n': return false; break; //die funktion gibt falsch ('false') zurück default: ; //nichts davon? egal. } } while(1); //dauerbefragung. } void gebeKraftAn(double &wert) { //wenn ein parameter als referenz übergeben wird, cout << "Bitte geben Sie ihre Kraft an(in Newton):\n"; //dann wird er icht kopiert cin >> wert; //sondern direkt auf ihn zugegriffen, sodass er verändert werden kann. } void gebeMasseAn(double &wert) { cout << "Geben Sie nun ihre Masse an(in Kilogramm):\n"; cin >> wert; } void gebeBeschAn(double &wert) { cout << "Bitte geben Sie ihre Beschleunigung an(in m/s^2):\n"; cin >> wert; } int main() { double beschleunigung, masse, kraft; //das komma ist hier übersichtlicher int menuWahl; //die variablennamen müssen immer eine aussage haben! etwas wie //'eingabe' sollte man nicht benutzen do { //eine do-while schleife ist für ein menu perfekt, denn sie wird mindestens einmal durchlaufen cout << "-------------------------------------------\n" << "-----Willkommen bei dem Kraftberechner-----\n" << "------------------------------------------- \n\n\n\n" << "Bitte Waehlen sie ihre Berechnungsart:\n" << "(1)Kraft = Beschleunigung * Masse\n" << "(2)Beschleuniging = Kraft/Masse\n" << "(3)Masse = Kraft/Beschleunigung\n"; cin >> menuWahl; switch (menuWahl) { case 1: gebeBeschAn(beschleunigung); //da als referenz übergeben ist das möglich gebeMasseAn(masse); kraft = beschleunigung * masse; system("cls"); cout << "Ergebnis:\n" << kraft << "N\n"; break; case 2: gebeKraftAn(kraft); gebeMasseAn(masse); beschleunigung = kraft/masse ; system("cls"); cout << "Ergebnis:\n" << beschleunigung << "m/s^2\n"; break; case 3: gebeKraftAn(kraft); gebeBeschAn(beschleunigung); masse = kraft/beschleunigung; system("cls"); cout << "Ergebnis:\n" << masse << "kg\n"; break; } } while( nochmal() ); }
-
okay der code sieht doch mal richtig gut aus
verstanden hab ich auch alles
Da kann ich nur dick und fett danke sagen
mux