Menuschleife



  • Hallo zusammen,
    derzeit lernen wir C++ Programierung an der Schule. Wir verwenden dazu Code::Blocks (Version 13.12).
    Unser Lehrer hat uns mit einem "Herbstprojekt" beglückt, bei dem ich allerdings jetzt auf ein Problem gestossen bin, wo ich dringend externe Hilfe benötige.
    Wir haben 5 Einzelaufgaben bekommen, die wir in einem Programm kombinieren sollen. Soweit kein Problem die einzelnen Aufgaben hab ich erledigt die funktionieren wunderbar. Allerdings würde ich gern der besseren Übersicht halber das ganze mit einem Auswahlmenu etwas minimalistischer gestalten. Meine bisherige Internetsuche hat mich zum Thema Schleifen geführt und genau da ist das Problem. Das Thema haben wir im Unterricht noch nicht behandelt und das was ich mir bis jetzt im Netz erlesen habe lässt die Fragezeichen über meinem Kopf nur noch größer werden. 😕 😕 😕 Ich hoffe hier kann mir jemand step-by-step erklären wie ich das in meinem Program realisieren kann.
    Ach und vllt. findet ja nebenbei noch jemand die Muse mir einen Tip zu geben wie ich das Ohm Zeichen hier hineinbekomme.

    Hier mein bisheriger Quellcode:

    #include <iostream>
    #include <string.h>
    #include <cmath>
    #define _USE_MATH_DEFINES
    
    using namespace std;
    
    int main()
    
    {
        cout<<"Was m\224chten Sie berechnen?\n"; //Auswahlmenü
            cout<<"\t1. Strom [I in Ampere] nach dem Ohmschen Gesetz\n";
            cout<<"\t2. Strom [I in Ampere] mittels Leistungsformel\n";
            cout<<"\t3. Leitungswiederstand [R in Ohm]\n";
            cout<<"\t4. Reihen- und Parallelwiederstand [Rr und Rp in Ohm]\n";
            cout<<"\t5. Kugelvolumen [V in cm\xFC]\n";
            cout<<"\t6. Programm beenden\n"<< endl;
    
        cout<<"Auswahl: ";
        char auswahl;
        cin>> auswahl;
    
        if(auswahl == '1') {
            cout<<"<<<<<<<<<<Stromberechnung nach dem Ohmschen Gesetz>>>>>>>>>>" << endl;
            cout<<endl; //Leerzeile
    
            cout<<"Geben Sie hier die Spannung ein ";
    
            double Spannung1;
            cin >>Spannung1;
            cout<<"Die Spannung betr\204gt: " <<Spannung1 <<" V"<< endl;
            cout<<endl; //Leerzeile
    
            cout<<"Geben Sie hier den Wiederstand ein ";
    
            double Wiederstand1;
            cin >>Wiederstand1;
            cout<<"Der Wiederstand betr\204gt: " <<Wiederstand1 <<" Ohm"<< endl;
            cout<<endl; //Leerzeile
    
            double Strom1;
            Strom1 = Spannung1 / Wiederstand1;
    
            cout<<"Der Strom betr\204gt: " <<Strom1 <<" A"<< endl;
    
        } else if(auswahl == '2') {
            cout<<"<<<<<<<<<<Stromberechnung nach der Leistungsformel>>>>>>>>>> " << endl;
            cout<<endl; //Leerzeile
    
            const int Spannung2 = 230;
    
            cout<<"Geben Sie hier die Leistung (in W) ein ";
    
            double Leistung1;
            cin >>Leistung1;
            cout<<endl; //Leerzeile
            double Strom2;
            Strom2 = Leistung1 / Spannung2;
    
            cout<<"Die Spannung betr\204gt: " <<Spannung2 <<" V"<< endl;
            cout<<"Die Leistung betr\204gt: " <<Leistung1 <<" W"<< endl;
            cout<<"Der Strom betr\204gt: " <<Strom2 <<" A"<< endl;
    
        } else if(auswahl == '3') {
            cout<<"<<<<<<<<<<Berechnung des Leitungswiederstands>>>>>>>>>>" << endl;
            cout<<endl; //Leerzeile
    
            const double WiederstandCu = 0.0178;
    
            cout<<"Geben Sie hier die Leiterl\204nge (in m) ein ";
    
            double Leiterlaenge1;
            cin >>Leiterlaenge1;
            cout<<endl; //Leerzeile
    
            cout<<"Geben Sie hier den Leiterquerschnitt (in mm\xFD) ein ";
    
            double Leiterquerschnitt1;
            cin >>Leiterquerschnitt1;
            cout<<endl; //Leerzeile
    
            double Leitungswiederstand1;
            Leitungswiederstand1 = Leiterlaenge1 * WiederstandCu / Leiterquerschnitt1;
    
            cout<<"Die Leiterl\204nge [l] betr\204gt: " <<Leiterlaenge1 <<" m"<< endl;
            cout<<"Der Leiterquerschnitt [A] betr\204gt: " <<Leiterquerschnitt1 <<" mm\xFD"<< endl;
            cout<<"Der Leitungswiederstand [R] betr\204gt: " <<Leitungswiederstand1 <<" Ohm"<< endl;
    
        } else if(auswahl == '4') {
            cout<<"<<<<<<<<<<Berechnung des Reihen- und Parallelwiederstands>>>>>>>>>>" << endl;
            cout<<endl; //Leerzeile
    
            double R1,R2,R3,Rreihe,Rparallel;
    
            cout<<"Geben Sie hier den Wiederstand R1 ein ";
            cin >>R1;
    
            cout<<"Geben Sie hier den Wiederstand R2 ein ";
            cin >>R2;
    
            cout<<"Geben Sie hier den Wiederstand R3 ein ";
            cin >>R3;
    
            Rparallel = 1 / R1 + 1 / R2 + 1 / R3;
            Rreihe = R1 + R2 + R3;
    
            cout<<endl; //Leerzeile
    
            cout<<"Der Parallelwiederstand [Rpges.] betr\204gt: " <<Rparallel <<" Ohm"<< endl;
            cout<<endl; //Leerzeile
    
            cout<<"Der Reihenwiederstand [Rrges.] betr\204gt: " <<Rreihe <<" Ohm"<< endl;
    
        } else if(auswahl == '5') {
            cout<<"<<<<<<<<<<Volumenberechnung einer Kugel>>>>>>>>>>" << endl;
            cout<<endl; //Leerzeile
    
            double Volumen1;
            double Durchmesser1;
    
            cout<< "Geben Sie hier den Durchmesser [d in cm] der Kugel ein: ";
    
            cin>>Durchmesser1;
            cout<<endl; //Leerzeile
    
            double x;
            x = pow(Durchmesser1,3);
            Volumen1 = M_PI * x / 6;
    
            cout<< " Das Kugelvolumen [V] betr\204gt: "<<Volumen1<<" cm\xFC "<<endl;
    
        } else if(auswahl == 6) {
            return 0;
        }
        cin.get();
        return 0;
    }
    


  • Allerdings würde ich gern der besseren Übersicht halber das ganze mit einem Auswahlmenu etwas minimalistischer gestalten. Meine bisherige Internetsuche hat mich zum Thema Schleifen geführt und genau da ist das Problem.

    Mit einer Schleife wirst du die Übersicht nicht verbessern. Das was du suchst nennt sich eher "Programmstrukturierung", "Modulare Programmgestaltung", oder präziser "Funktionen".

    Beispiel (besser gesagt: primitives Beispiel):

    void StromberechnungOhmsche()
    {
    	cout << "<<<<<<<<<<Stromberechnung nach dem Ohmschen Gesetz>>>>>>>>>>" << endl;
    	cout << endl; //Leerzeile 
    
    	cout << "Geben Sie hier die Spannung ein ";
    
    	double Spannung1;
    	cin >> Spannung1;
    	cout << "Die Spannung betr\204gt: " << Spannung1 << " V" << endl;
    	cout << endl; //Leerzeile 
    
    	cout << "Geben Sie hier den Wiederstand ein ";
    
    	double Wiederstand1;
    	cin >> Wiederstand1;
    	cout << "Der Wiederstand betr\204gt: " << Wiederstand1 << " Ohm" << endl;
    	cout << endl; //Leerzeile 
    
    	double Strom1;
    	Strom1 = Spannung1 / Wiederstand1;
    
    	cout << "Der Strom betr\204gt: " << Strom1 << " A" << endl;
    }
    

    Im Menü selbst reicht es dann völlig aus, wenn du die Funktion zur gegebenen Zeit aufrufst:

    if(auswahl == '1') {
    StromberechnungOhmsche();
    }
    

    Du solltest dir noch Rückgabetypen, Parameterübergaben, Switch/-Case Ausdrücke und do-while/ bzw. While-Schleifen anschauen.



  • Ohhh man bin ich vllt. blöd.

    Ersteinmal vielen Dank Olaf für die Hilfe ich werde mein Programm dahingehend noch einmal überarbeiten. Allerdings ist mein Problem etwas anderes (habe ich völlig falsch formuliert 🙄 ).

    Also was ich suche ist ein weg, um nach dem ausführen einer Einzelaufgabe, mittels drücken einer bestimmten Taste das Programm a) zu beenden oder b) zurück zu kehren zum Auswahlmenu, um dort dann mit einer anderen Einzelaufgabe weiter zu machen ohne das ich jedesmal das Programm neu starten muss.

    Bsp.:

    Wenn ich jetzt im Auswahlmenu bin und die 2 (Stromberechnung nach Leistungsformel) drücke läd er "else if 2" wenn ich dann meine Berechnung durchgeführt habe, möchte ich mit Taste b (back) zurück zum Auswahlmenu gelangen, um dort über die "if auswahl" eine andere berechnung durchzuführen,
    oder mit Taste e(end) das Programm beenden.

    PS: nach 20 stunden internetrecherche habe ich immernoch keine Idee wie das mit dem blöden Ohm Zeichen funzt.



  • Inkramon schrieb:

    PS: nach 20 stunden internetrecherche habe ich immernoch keine Idee wie das mit dem blöden Ohm Zeichen funzt.

    omega ansi oem



  • Inkramon schrieb:

    Wenn ich jetzt im Auswahlmenu bin und die 2 (Stromberechnung nach Leistungsformel) drücke läd er "else if 2" wenn ich dann meine Berechnung durchgeführt habe, möchte ich mit Taste b (back) zurück zum Auswahlmenu gelangen, um dort über die "if auswahl" eine andere berechnung durchzuführen,
    oder mit Taste e(end) das Programm beenden.

    Geh gleich zum Hauptmenu zurück, da besteht auch die Möglichkeit zum beenden.

    while (1) { // 1 ist immer wahr
      Alles innerhalb der Klammern wird als (unendliche) Schleife ausgeführt
    }
    

    Und nutze Funktionen.



  • DirkB schrieb:

    Geh gleich zum Hauptmenu zurück, da besteht auch die Möglichkeit zum beenden.

    Hallo DirkB genau da liegt mein Problem ich weis nicht wie ich nach dem durchlaufen des Programms mittels Tastendruck zurück zum Hauptmenu gelange. 😞



  • Also so langsam hab ich etwas brauchbares zusammengetippt. (Hoffe ich jedenfalls) Menufunktionen usw funktionieren wie gewünscht. Jetzt noch die letzten 2 Macken beseitigen.
    Sorry aber mit der Antwort:"omega ansi oem" kann ich auch nicht viel mehr anfangen also besteht immernoch meine Frage bezüglich des Ohm Zeichens.
    Und des weieren habe ich mich gefragt ob man in C++ auch buchstaben tiefgestellt im Programm anzeigen lassen kann. Wenn ja ... Wie?
    Falls jemand unnötige Zeilen oder sonstigen Unsinn entdecken sollte.... bitte ein comment da lassen!
    Vielen dank für alle Tips und Tricks.

    neuer Quellcode

    #include <iostream>
    #include <string.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <cmath>
    #define _USE_MATH_DEFINES
    
    using namespace std;
    
    int main()
    {
        char auswahl;
        const int Spannung2 = 230;
        const double WiederstandCu = 0.0178;
        double Spannung1,Wiederstand1,Strom1,Leistung1,Strom2,x;
        double Leiterlaenge1,Leiterquerschnitt1,Leitungswiederstand1;
        double R1,R2,R3,Rreihe,Rparallel,Volumen1,Durchmesser1;
    
    do
    {
        cout<<endl; //Leerzeile
        cout<<endl; //Leerzeile
        cout<<"Was m\224chten Sie berechnen?\n"; //Auswahlmenü
            cout<<"\t1. Strom [I in Ampere] nach dem Ohmschen Gesetz\n";
            cout<<"\t2. Strom [I in Ampere] mittels Leistungsformel\n";
            cout<<"\t3. Leitungswiederstand [R in Ohm]\n";
            cout<<"\t4. Reihen- und Parallelwiederstand [Rr und Rp in Ohm]\n";
            cout<<"\t5. Kugelvolumen [V in cm\xFC]\n";
            cout<<"\t6. Programm beenden\n"<< endl;
    
        cout<<"Auswahl: ";
        cin>> auswahl;
        cout<<endl; //Leerzeile
    
        switch (auswahl)
        {
            case('1'):
            cout<<"<<<<<<<<<<Stromberechnung nach dem Ohmschen Gesetz>>>>>>>>>>" << endl;
            cout<<endl; //Leerzeile
    
            cout<<"Geben Sie hier die Spannung ein ";
    
            cin >>Spannung1;
            cout<<"Die Spannung betr\204gt: " <<Spannung1 <<" V"<< endl;
            cout<<endl; //Leerzeile
    
            cout<<"Geben Sie hier den Wiederstand ein ";
    
            cin >>Wiederstand1;
            cout<<"Der Wiederstand betr\204gt: " <<Wiederstand1 <<" Ohm"<< endl;
            cout<<endl; //Leerzeile
    
            Strom1 = Spannung1 / Wiederstand1;
    
            cout<<"Der Strom betr\204gt: " <<Strom1 <<" A"<< endl;
            break;
    
            case('2'):
            cout<<"<<<<<<<<<<Stromberechnung nach der Leistungsformel>>>>>>>>>> " << endl;
            cout<<endl; //Leerzeile
    
            cout<<"Geben Sie hier die Leistung (in W) ein ";
    
            cin >>Leistung1;
            cout<<endl; //Leerzeile
            Strom2 = Leistung1 / Spannung2;
    
            cout<<"Die Spannung betr\204gt: " <<Spannung2 <<" V"<< endl;
            cout<<"Die Leistung betr\204gt: " <<Leistung1 <<" W"<< endl;
            cout<<"Der Strom betr\204gt: " <<Strom2 <<" A"<< endl;
            break;
    
            case('3'):
            cout<<"<<<<<<<<<<Berechnung des Leitungswiederstands>>>>>>>>>>" << endl;
            cout<<endl; //Leerzeile
    
            cout<<"Geben Sie hier die Leiterl\204nge (in m) ein ";
    
            cin >>Leiterlaenge1;
            cout<<endl; //Leerzeile
    
            cout<<"Geben Sie hier den Leiterquerschnitt (in mm\xFD) ein ";
    
            cin >>Leiterquerschnitt1;
            cout<<endl; //Leerzeile
    
            Leitungswiederstand1 = Leiterlaenge1 * WiederstandCu / Leiterquerschnitt1;
    
            cout<<"Die Leiterl\204nge [l] betr\204gt: " <<Leiterlaenge1 <<" m"<< endl;
            cout<<"Der Leiterquerschnitt [A] betr\204gt: " <<Leiterquerschnitt1 <<" mm\xFD"<< endl;
            cout<<"Der Leitungswiederstand [R] betr\204gt: " <<Leitungswiederstand1 <<" Ohm"<< endl;
            break;
    
            case('4'):
            cout<<"<<<<<<<<<<Berechnung des Reihen- und Parallelwiederstands>>>>>>>>>>" << endl;
            cout<<endl; //Leerzeile
    
            cout<<"Geben Sie hier den Wiederstand R1 ein ";
            cin >>R1;
    
            cout<<"Geben Sie hier den Wiederstand R2 ein ";
            cin >>R2;
    
            cout<<"Geben Sie hier den Wiederstand R3 ein ";
            cin >>R3;
    
            Rparallel = 1 / R1 + 1 / R2 + 1 / R3;
            Rreihe = R1 + R2 + R3;
    
            cout<<"Der Parallelwiederstand [Rpges.] betr\204gt: " <<Rparallel <<" Ohm"<< endl;
            cout<<endl; //Leerzeile
            cout<<"Der Reihenwiederstand [Rrges.] betr\204gt: " <<Rreihe <<" Ohm"<< endl;
            break;
    
            case('5'):
            cout<<"<<<<<<<<<<Volumenberechnung einer Kugel>>>>>>>>>>" << endl;
            cout<<endl; //Leerzeile
    
            cout<< "Geben Sie hier den Durchmesser [d in cm] der Kugel ein: ";
    
            cin>>Durchmesser1;
    
            x = pow(Durchmesser1,3);
            Volumen1 = M_PI * x / 6;
    
            cout<< " Das Kugelvolumen [V] betr\204gt: "<<Volumen1<<" cm\xFC "<<endl;
            break;
    
            case('6'):
            cout<<"Das Programm wird beendet. Auf wiedersehen bis zum n\204chsten mal!"<<endl;
            break;
    
            default:
            cout<<"Keine Korrekte Eingabe";
            break;
        }
        getch();
        system("cls");
    }
    while(auswahl !='6');
    
    cin.ignore();
    return 0;
    }
    

  • Mod

    Inkramon schrieb:

    Sorry aber mit der Antwort:"omega ansi oem" kann ich auch nicht viel mehr anfangen also besteht immernoch meine Frage bezüglich des Ohm Zeichens.

    Google: omega ansi oem 🙄

    Und des weieren habe ich mich gefragt ob man in C++ auch buchstaben tiefgestellt im Programm anzeigen lassen kann. Wenn ja ... Wie?

    Mach dir weniger Gedanken um die äußere Darstellung, versuch lieber ein vernünftig strukturiertes und funktionierendes Programm zu erstellen. Ansprechende grafische Präsentation eines Programms ist eher Fleißarbeit. Jeder kann es, wenn man nur genug Zeit und Mühe rein steckt, aber du lernst nichts wesentliches über Programmierung. Es lohnt einfach nicht für eine Hausaufgabe, die du nach der Bewertung wegwerfen und vergessen wirst.


Log in to reply