Hilfe



  • Das kann nicht sein, dass er nach der Addition zur Subtraktion übergeht. Du musst einfach nur eine do-while Schleife einbauen, die bei der Menüausgabe anfängt und nach der switch aufhört.



  • Ich weis leider nicht, wie ich die "do-while Schleife" einbaut.

    Bitte um Erklärung.

    danke! 🙂



  • Hier gibt's ne super Erklärung:
    http://bit.ly/1sQtfA8



  • Vom Prinzip her weiß ich wie die Schleife funktioniert, nur ich weis nicht welchen Part ich mit ihr umschließen soll, ich hab fast alles versucht (in der "int main ()" Funktion) doch es kommt immer eine fehler Meldung.
    Ich habs auch geschafft eine wiederholung hinzubekommen aber nur, den ganzen Block ("switch case").

    Ich möchte das sich z.B. case '1' ausführt und man dann wieder ins Menu zurückkommt, um dann wieder ein "case" auswähelen zu können.



  • #include <iostream>
    
    using namespace std;
    
    //"Inhaltsverzeichnis"
    void addition ();
    void subtraktion ();
    void multiplikation ();
    void division ();
    
    int main()
    {
    do
    {
        char auswahl;
        cout <<"*********\n"
             <<"*Rechner* \n"
             <<"*********\n";
        cout << endl;
        cout << "Menu:\n"
             << "1.Addition:\n"
             << "2.Subtraktion:\n"
             << "3.Multiplikation:\n"
             << "4.Division:\n"
             << "5.Beenden\n";
    
        cin >> auswahl;
    
        switch(auswahl)
        {
        case '1' :
            addition (); // hier das "std::cout <<"  entfernt. Die Funktion gibt schließlich nichts zurück, deshalb der Fehler
            break;
        case '2' :
            subtraktion (); // hier das "std::cout <<"  entfernt. Die Funktion gibt schließlich nichts zurück, deshalb der Fehler
            break;
        case '3' :
            multiplikation (); // hier das "std::cout <<"  entfernt. Die Funktion gibt schließlich nichts zurück, deshalb der Fehler
            break;
        case '4' :
            division (); // hier das "std::cout <<"  entfernt. Die Funktion gibt schließlich nichts zurück, deshalb der Fehler
            break;
        case '5' :
            return 0;
        default:
            cout << "Du hast nichts ausgewählt Penner!!!" << endl;
            return 0;
        }
    }
    while( true );
    
    /*
        addition (); // Addieren
        subtraktion (); // Subtrahieren
        multiplikation (); //Multiplizieren
        division (); // Dievidieren
    */
    
        cin.sync ();
        cin.get (); // Hält die Konsole offen
        return 0; // Beendet das Programm
    
    }
    void addition () // Eigene Funktion "addition"
    {
        static float zahl_1, zahl_2;
        cout << "1.Zahl zum addieren eingeben: ";
        cin >> zahl_1;
        cout << "2.Zahl zum addieren eingeben: ";
        cin >> zahl_2;
        cout << " Ergebniss: "<< zahl_1 + zahl_2 << endl;
    }
    
    void subtraktion () // Eigene Funktion "subtraktion"
    {
        static float zahl_3, zahl_4;
        cout << "1.Zahl zum subtrahieren eingeben: ";
        cin >> zahl_3;
        cout << "2.Zahl zum subtrahieren eingeben: ";
        cin >> zahl_4;
        cout << "Ergebniss: "<< zahl_3 - zahl_4 << endl;
    }
    
    void multiplikation () // Eigene Funktion "multiplikation"
    {
        static float zahl_5, zahl_6;
        cout << "1.Zahl zum multiplizieren eingeben: ";
        cin >> zahl_5;
        cout << "2.Zahl zum multiplizieren eingeben: ";
        cin >> zahl_6;
        cout << "Ergebniss: " << zahl_5 * zahl_6 << endl;
    }
    
    void division () // Eigene Funktion "divisions"
    {
        static double zahl_7, zahl_8;
        cout << "1.Zahl zum dividieren eingeben: ";
        cin >> zahl_7;
        cout << "2.Zahl zum dividieren eingeben: ";
        cin >> zahl_8;
        cout <<"Ergebniss: " << zahl_7 / zahl_8;
    }
    

    [/quote]

    Sgaf schrieb:

    "int mein ()" Funktion

    😃



  • Sorry das ich so viele (vllt. für euch dumme) Fragen stellen.

    Soweit bin ich gekommen:
    --------------------------------------------------------------------------------

    #include <iostream>

    using namespace std;

    //"Inhaltsverzeichnis"
    void addition ();
    void subtraktion ();
    void multiplikation ();
    void division ();

    int main()
    {
    char auswahl, wiederholung;

    if (auswahl == '1','2','3','4','5' || wiederholung == 'j','J') {
    do{

    cout <<"*********\n"
    <<"*Rechner* \n"
    <<"*********\n";
    cout << endl;
    cout << "Menu:\n"
    << "1.Addition:\n"
    << "2.Subtraktion:\n"
    << "3.Multiplikation:\n"
    << "4.Division:\n"
    << "5.Beenden\n"
    << endl;
    cout << "Auswahl: ";
    cin >> auswahl;

    switch(auswahl)
    {
    case '1' :
    addition ();
    break;
    case '2' :
    subtraktion ();
    break;
    case '3' :
    multiplikation ();
    break;
    case '4' :
    division ();
    break;
    case '5' :
    return 0;
    default:
    cout << "Du hast nichts ausgewählt Penner!" << endl;
    return 0;

    }
    cout << "Wiederholen? (J|N): ";
    cin >> wiederholung;
    cout << endl;
    cout << endl;
    }
    while (wiederholung != 'n' || 'N' );

    } else {
    return 0;
    }

    addition (); // Addieren
    subtraktion (); // Subtrahieren
    multiplikation (); //Multiplizieren
    division (); // Dievidieren

    cin.sync ();
    cin.get (); // Hält die Konsole offen
    return 0; // Beendet das Programm

    }
    void addition () // Eigene Funktion "addition"
    {
    static float zahl_1, zahl_2;
    cout << "1.Zahl zum addieren eingeben: ";
    cin >> zahl_1;
    cout << "2.Zahl zum addieren eingeben: ";
    cin >> zahl_2;
    cout << "-----------------------------" << endl;
    cout << " Ergebniss: "<< zahl_1 + zahl_2 << endl;
    cout << endl;
    }

    void subtraktion () // Eigene Funktion "subtraktion"
    {
    static float zahl_3, zahl_4;
    cout << "1.Zahl zum subtrahieren eingeben: ";
    cin >> zahl_3;
    cout << "2.Zahl zum subtrahieren eingeben: ";
    cin >> zahl_4;
    cout << "---------------------------------" << endl;
    cout << "Ergebniss: "<< zahl_3 - zahl_4 << endl;
    cout << endl;
    }

    void multiplikation () // Eigene Funktion "multiplikation"
    {
    static float zahl_5, zahl_6;
    cout << "1.Zahl zum multiplizieren eingeben: ";
    cin >> zahl_5;
    cout << "2.Zahl zum multiplizieren eingeben: ";
    cin >> zahl_6;
    cout << "-----------------------------------" << endl;
    cout << "Ergebniss: " << zahl_5 * zahl_6 << endl;
    cout << endl;
    }

    void division () // Eigene Funktion "divisions"
    {
    static double zahl_7, zahl_8;
    cout << "1.Zahl zum dividieren eingeben: ";
    cin >> zahl_7;
    cout << "2.Zahl zum dividieren eingeben: ";
    cin >> zahl_8;
    cout << "------------------------------" << endl;
    cout <<"Ergebniss: " << zahl_7 / zahl_8 << endl;
    cout << endl;
    }
    --------------------------------------------------------------------------------

    Doch nun frage ich mich warum sich das Programm nicht beenden will wenn ich 'n' || 'N' bei der auswahl eintippe?



  • Weil 'N' immer true ist.

    In deiner while-Bedingung steht: (wenn wiederholung nicht gleich 'n') ODER (wenn 'N'). Du willst sicher: (wenn wiederholung nicht gleich 'n') UND (wenn wiederholung nicht gleich 'N')

    Hier stecken zwei Fehler drin:

    1. 'N' wird als true ausgewertet und sobald etwas beim Or true ist, ist der gesamte Ausdruck true.

    2. Du benutzt Or. Richtig wäre aber And. Ein Beispiel:

    wiederholung = 'n';
    
    // Bedingung
    if( wiederholung != 'n' || wiederholung != 'N')
    

    Der erste Teil ist false, weiter oben steht ja, dass wiederholung = 'n' ist. Der zweite Teil ist true, denn wiederholung ist nicht 'N', sondern 'n'. Wir haben also

    if( false || true )
    

    und das gibt auf jeden Fall true. Stände hier aber ein And, wäre der Ausdruck false, da beim And beide Operanden true sein müssen.

    Eine andere Möglichkeit das zu zeigen:

    Wir nehmen erst einmal den gegenteiligen Fall an:

    if(wiederholung == 'n' || wiederholung == 'N')
    

    Das passt: Die Bedingung ist true, wenn wiederholung entweder 'n' oder 'N' ist. Jetzt drehen wir die Bedingung um:

    if( !(wiederholung == 'n' || wiederholung == 'N') )
    

    So lassen wir nur Fälle durch, in denen wiederholung nicht 'n' und nicht 'N' ist.
    Wenn wir jetzt das ! vorne wegbekommen wollen, dann wenden wir die De Morgansche Gesetze an (http://de.wikipedia.org/wiki/De_Morgansche_Gesetze):

    1. Schritt: Jeder Teilausdruck wird negiert

    if( !(wiederholung != 'n' || wiederholung != 'N')) // Noch nicht funktionsfähig!
    //                 ^^                     ^^
    

    2. Schritt: Der komplette Ausdruck wird negiert. Doppelte Negierungen geben wieder den Ausgangszustand, deshalb fällt das ! vorne weg.

    if(  (wiederholung != 'n' || wiederholung != 'N')) // Noch nicht funktionsfähig!
    // ^^
    

    3. Schritt: And wird zu Or und Or wird zu Und:

    if( (wiederholung != 'n' && wiederholung != 'N')) // Fertig
    //                       ^^
    

    Somit kommen wir hier auch zum Schluss, dass statt dem Or ein And dort hingehört.



  • OK, soweit hab ich es verstanden doch wenn ich jetzt 'n' oder 'N' drücke fängt es beim addieren an.
    Warum wird beim else das retun 0; nicht ausgeführt?

    ------------------------------------------------------------------------------
    #include <iostream>

    using namespace std;

    //"Inhaltsverzeichnis"
    void addition ();
    void subtraktion ();
    void multiplikation ();
    void division ();

    int main()
    {
    char auswahl, wiederholung;

    if (wiederholung != 'n' && wiederholung != 'N') {
    do{

    cout <<"*********\n"
    <<"*Rechner* \n"
    <<"*********\n";
    cout << endl;
    cout << "Menu:\n"
    << "1.Addition:\n"
    << "2.Subtraktion:\n"
    << "3.Multiplikation:\n"
    << "4.Division:\n"
    << "5.Beenden\n"
    << endl;
    cout << "Auswahl: ";
    cin >> auswahl;

    switch(auswahl)
    {
    case '1' :
    addition ();
    break;
    case '2' :
    subtraktion ();
    break;
    case '3' :
    multiplikation ();
    break;
    case '4' :
    division ();
    break;
    case '5' :
    return 0;
    default:
    cout << "Du hast nichts ausgewählt Penner!" << endl;
    return 0;

    }
    cout << "Wiederholen? (J|N): ";
    cin >> wiederholung;
    cout << endl;
    cout << endl;
    }
    while (wiederholung != 'n' && wiederholung != 'N' );

    } else {
    return 0;
    }

    addition (); // Addieren
    subtraktion (); // Subtrahieren
    multiplikation (); //Multiplizieren
    division (); // Dievidieren

    cin.sync ();
    cin.get (); // Hält die Konsole offen
    return 0; // Beendet das Programm

    }
    void addition () // Eigene Funktion "addition"
    {
    static float zahl_1, zahl_2;
    cout << "1.Zahl zum addieren eingeben: ";
    cin >> zahl_1;
    cout << "2.Zahl zum addieren eingeben: ";
    cin >> zahl_2;
    cout << "-----------------------------" << endl;
    cout << " Ergebniss: "<< zahl_1 + zahl_2 << endl;
    cout << endl;
    }

    void subtraktion () // Eigene Funktion "subtraktion"
    {
    static float zahl_3, zahl_4;
    cout << "1.Zahl zum subtrahieren eingeben: ";
    cin >> zahl_3;
    cout << "2.Zahl zum subtrahieren eingeben: ";
    cin >> zahl_4;
    cout << "---------------------------------" << endl;
    cout << "Ergebniss: "<< zahl_3 - zahl_4 << endl;
    cout << endl;
    }

    void multiplikation () // Eigene Funktion "multiplikation"
    {
    static float zahl_5, zahl_6;
    cout << "1.Zahl zum multiplizieren eingeben: ";
    cin >> zahl_5;
    cout << "2.Zahl zum multiplizieren eingeben: ";
    cin >> zahl_6;
    cout << "-----------------------------------" << endl;
    cout << "Ergebniss: " << zahl_5 * zahl_6 << endl;
    cout << endl;
    }

    void division () // Eigene Funktion "divisions"
    {
    static double zahl_7, zahl_8;
    cout << "1.Zahl zum dividieren eingeben: ";
    cin >> zahl_7;
    cout << "2.Zahl zum dividieren eingeben: ";
    cin >> zahl_8;
    cout << "------------------------------" << endl;
    cout <<"Ergebniss: " << zahl_7 / zahl_8 << endl;
    cout << endl;
    }



  • Sgaf schrieb:

    Warum wird beim else das retun 0; nicht ausgeführt?

    Warum sollte es?

    Wozu gehört das else ?
    Wann wird dieses if ausgeführt?
    und welche Werte haben die Variablen da gerade?

    Und benutze bitte endlich die Code-Tags.



  • Wie mache ich das mit den Code-Tags?



  • Beim Editieren eines Beitrages findest du unter dem Textfeld Smileys.
    Darunter sind lauter helle, rechteckige buttons.
    Nutze den Button C++ und du erhältst
    "

    "
    nutze ihn nochmal und du bekommst
    "
    

    "

    zwischen diesen beiden Konstrukten kopierst/tippst du deinen Code.

    Außerdem erstell deine Threads bitte mit aussagekräftigeren Titeln. "Hilfe" sagt so ziemlich nichts, vor allem wird in den meisten Threads nach Hilfe gefragt.
    Eine kurze und knackige beschreibung für dein Problem/Problemgebiet wäre da nützlicher.

    LG



  • hardware schrieb:

    Nutze den Button C++ und du erhältst
    "

    "
    nutze ihn nochmal und du bekommst
    "
    

    "
    LG

    Ok aus diesem Grund sollte man sich einloggen >.>
    Das war jetzt ein ziemliches Fail, aber ich denke das war trotzdem zu verstehen: Mit dem C++ Button unter dem Textfeld 😉



  • "Danke"
    


  • Du kannst im Übrigen einfach den if-else teil da weglassen. Dann sollte das Programm bei N bzw n beenden.


Anmelden zum Antworten