Anfänger : Logisches Oder in While Schleifen



  • @ pumuckl
    deine Wahrheitstabelle ist zwar richtig aber sie entspricht nicht dem obigen code.
    Die dritte spalte müsste ! ( bedingung1() || bedingung2() ) sein.
    Dann sind die beiden Ausdrücke wieder gleich.
    Kurt



  • sry, klammer übersehn *schäm*



  • So, Sorry ich kriegs immer noch nicht hin...

    Irgendwie bricht die Schleife bei mir immer erst ab, wenn beide Bedingungen erfüllt sind... und wenn ich das ! versuchte wurde es eine Endlosschleife.... 😕

    hier also der Code :

    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <string>
    
    using namespace std;
    
    int ATK(int M_DEF, int P_ATK)
    {
    	int DAM=(M_DEF-P_ATK);
    	return DAM;
    }
    
    int C_ATK(int P_DEF, int M_ATK)
    {
    	int C_DAM=(P_DEF-M_ATK);
    	return C_DAM;
    }
    
    int main()
    {
    
    string P_Name="Ruby";
    
    int  P_LVL=1;
    int  P_EXP=0;
    int  P_HP=100;
    int  P_DEF=5;
    int  P_ATK=15;
    
    int  M_HP=50;
    int  M_ATK=10;
    int  M_DEF=5;
    
    cout << "Gegner 1 " << endl;
    
    cout << P_Name << " VS " << " Gegner 1 " << endl;
    
    /*
    int M_DAM(M_DEF-P_ATK);
    cout << " Der ausgeteilte Schaden betr\204gt : " << (M_DAM*-1) << endl;
    
    int P_DAM(P_DEF-M_ATK);
    cout << " Der erhaltene Schaden betr\204gt : " << (P_DAM*-1) << endl;
    */
    
    cout << " Dein Gegner hat : " << M_HP << " Lebenspunkte. " << endl;
    cout << " Du hast : " << P_HP << " Lebenspunkte. " << endl;
    cout << " Du greifst an " << endl;
    
    while ( P_HP>=1 || M_HP>=1 )
    {
    
    ATK(M_DEF,P_ATK);
    cout << "Ausgeteilter Schaden : " << ATK(M_DEF,P_ATK)*(-1) << endl;
    
    M_HP+=ATK(M_DEF,P_ATK);
    cout << " Neue Monster HP = " << M_HP << endl;
    
    if ( M_HP<=0 ) { cout << " Der Gegner ist Tod " << endl; }
    
    else {cout << " Los weiter !!! " << endl; }
    
    C_ATK(P_DEF,M_ATK);
    cout << "Erhaltener Schaden : " << C_ATK(P_DEF,M_ATK)*(-1) << endl;
    
    P_HP+=C_ATK(P_DEF,M_ATK);
    cout << " Deine neuen Trefferpunkte : " << P_HP << endl;
    
    if ( P_HP<=0 ) { cout << " Du bist leider gestorben... " << endl; }
    
    else { cout << " Du lebst noch, gib nicht auf ! " << endl; }
    
    getchar();
    
    }
    
    fflush(stdin);
    getchar();
    
    return 0;
    
    }
    

    Irgendwas überseh ich hier.. 😕 .. oder ist der Ansatz komplett falsch ?

    Bitte gebt mir einen Tip...



  • Whitedragon276 schrieb:

    Irgendwie bricht die Schleife bei mir immer erst ab, wenn beide Bedingungen erfüllt sind... und wenn ich das ! versuchte wurde es eine Endlosschleife.... 😕

    Es würde würde wahrscheinlich enorm helfen, wenn du dir darüber klar würdest, dass eine while-Schleife nicht abbricht, wenn eine Bedingung erfüllt ist, sondern läuft, solange eine Bedingung erfüllt ist (sonst würde sie until heißen).

    while ( P_HP>=1 || M_HP>=1 )
    

    Das wird dann wohl ein Und sein (&&) und kein Oder ...



  • OK... habs zwar noch nicht ganz kapiert... aber das funkioniert tatsächlich mit dem Und statt Oder...

    zum Verständnis :

    Also Während/solange beide Bedingungen nicht erfüllt sind läuft die Schleife ?

    Und sie läuft nicht weiter wenn eine der beiden Bedingungen erfüllt ist ?

    Aber sie läuft weiter wenn Bedingung 1 oder Bedingung 2 erfüllt wurde ?

    😕 😕 😕

    Das wird wohl noch ne Zeit dauern bis ich das "Logisch" anwenden kann....

    Aber erst mal Dank an alle die mir hier geholfen haben...:-)



  • Whitedragon276 schrieb:

    Also Während/solange beide Bedingungen nicht erfüllt sind läuft die Schleife ?

    Wie kommst du immer auf das "nicht"?



  • Naja... Die Schleife läuft doch solage P_HP & M_HP >=1 sind, und wird nicht mehr wiederholt wenn eine der beiden Bedingungen ... ?

    OK.. ich glaub ich habs... Die Schleife läuft bis die Bedingungen erfüllt sind ? **Hoff**

    Danke



  • Es heisst while -> läuft solange die Bedingung erfüllt ist == läuft bis die Bedingung nicht mehr erfüllt ist.
    Kurt



  • Whitedragon276 schrieb:

    Naja... Die Schleife läuft doch solage P_HP & M_HP >=1 sind, und wird nicht mehr wiederholt wenn eine der beiden Bedingungen ... ?

    Sie läuft, solange P_HP >= 1 UND M_HP >= 1. Das heißt, sie bricht ab, sobald eine der Bedingungen nicht mehr erfüllt ist.

    Vielleicht benutzt du das Wort "erfüllt" auch nur komisch 😉



  • ...aber diesen Quellcode würde man doch schneller und unkomplizierter ohne die ganzen Funktionsaufrufe schreiben können, oder ? 😋 C++4eVer



  • @Bashar >>

    Sie läuft, solange P_HP >= 1 UND M_HP >= 1. Das heißt, sie bricht ab, sobald eine der Bedingungen nicht mehr erfüllt ist.

    Das war genau der Satz, der den Groschen zum fallen brachte, Danke !!!


Anmelden zum Antworten