Bedingung aufstellen



  • player4245 schrieb:

    Kein Wunder das in diesem Forum jeder C verabscheut wenn du solchen Code postest.

    Jeder...?
    http://www.cliquenabend.de/spiele/asterix/asterix1.jpg
    🙂



  • Einigen wir uns auf: die meisten



  • player4245 schrieb:

    Einigen wir uns auf: die meisten

    Hast du eine Statistik?
    🙂



  • nicht unbedingt aber erfahrung



  • µngbd schrieb:

    ;fricky schrieb:

    manche basteln sich sogar noch 'ne eigene abbruchvariable zurecht, damit es passt (<--*scheusslich*)

    Das sind sicher C++ler, die glauben, dass jeder Compiler Gedanken lesen kann.

    oder die armen schweine, die nach misra-regeln u.ä. coding-styles programmieren müssen. man versucht, typische C-fehlerquellen auszuschliessen, macht aber durch seltsame umwege zur einhaltung der regeln den code weniger verständlich. es gibt nun mal nichts geschenkt. *fg*

    µngbd schrieb:

    ...und damals hab ich wohl begonnen, mir meine eigene Meinung zurechtzulegen. Bin immer noch nicht damit fertig.

    das ist doch gut so, allerdings gibts kein 'fertig werden'.

    player4245 schrieb:

    Das ist übelster Anfänger-Code ...

    ja, den versteht jeder anfänger. ist doch gut, oder nicht?
    🙂



  • Dieser Code sah alles andere als gut aus. Sicher gibt es Fälle in denen sich ein solches Konstrukt nicht vermeiden lässt, aber das ist gewiss keiner davon.



  • player4245 schrieb:

    Dieser Code sah alles andere als gut aus.

    ich kann deine abneigung ja irgendwie verstehen, 'break' ist der kleine bruder von 'goto'. von mir aus mach 'ne klammer drum, ein 'not' davor und nimm es als 'while'-ausdruck. ich sagte ja schon: ist geschmackssache.
    🙂



  • Ich hab keine Abneigung gegen break und continue. Ich bin auch kein Anhänger von diesen "... ist böse" Sätzen, nur dieses Konstrukt finde ich sieht einfach stümperhaft aus.



  • player4245 schrieb:

    Ich hab keine Abneigung gegen break und continue. Ich bin auch kein Anhänger von diesen "... ist böse" Sätzen

    setsam, ich dachte immer du bist C++ fan. *fg*

    player4245 schrieb:

    ...nur dieses Konstrukt finde ich sieht einfach stümperhaft aus.

    so unterschiedlich sind die standpunkte. ich finde es z.b. stümperhaft, wenn man dinge nicht vereinfacht.
    🙂



  • Ich mag beide Sprachen. C++ benutz ich aber eher in grösseren Projekten. Ich mache die Dinge auch so einfach wie möglich, nur finde ich, dass man möglichst immer eine Abbruchbedingung formulieren sollte. In der Schleife kann man dann ruhig break und continue benutzen.



  • ;fricky schrieb:

    Jedenfalls bin ich einverstanden mit:

    l'abra d'or schrieb:

    Man löst ein Problem ja nicht nur, dass es gelöst ist, sondern dass man auch später wieder weiß wie sie funktioniert 😉

    Ich nicht. Gelöst ist gelöst, das ist ja der Witz an modularer Programmierung. Die Frage ist ja eher, wie man sicherstellen will, daß man nicht immer wieder ähnliche Probleme neu durchkaut.

    ;fricky schrieb:

    ich finds am besten, wenn man's ganz straight programmiert, so wie man denkt, dann kannste auch auf kommentare verzichten. Da ist sicher was dran. 🙂

    Bin ich wieder einverstanden, am ehesten kommentiere ich Fremdcode, bei Eigenproduktion halte ich mich an die Stackkommentarregel für FORTH. Ich muß nicht mehr wissen, wenn ein Modul funzt und wenn nicht, stimmt eher die Regel:
    KOMMENTARE LÜGEN!
    😉

    ;fricky schrieb:

    ich kann deine abneigung ja irgendwie verstehen, 'break' ist der kleine bruder von 'goto'. von mir aus mach 'ne klammer drum, ein 'not' davor und nimm es als 'while'-ausdruck. ich sagte ja schon: ist geschmackssache.
    🙂

    Jaja, und viele returns in einer Funktion sind die bösen Stiefschwestern 😃

    player4245 schrieb:

    Ich hab keine Abneigung gegen break und continue. Ich bin auch kein Anhänger von diesen "... ist böse" Sätzen, nur dieses Konstrukt finde ich sieht einfach stümperhaft aus.

    Ja, do .. while wäre naheliegender, aber solange jeder sofort sieht, was Sache ist, ist es doch egal, oder? Über Geschmack läßt sich trefflich wie sinnlos, aber auf jeden Fall endlos debattieren ...



  • pointercrash() schrieb:

    ;fricky schrieb:

    Jedenfalls bin ich einverstanden mit:

    l'abra d'or schrieb:

    Man löst ein Problem ja nicht nur, dass es gelöst ist, sondern dass man auch später wieder weiß wie sie funktioniert 😉

    Ich nicht. Gelöst ist gelöst, das ist ja der Witz an modularer Programmierung. Die Frage ist ja eher, wie man sicherstellen will, daß man nicht immer wieder ähnliche Probleme neu durchkaut.

    Na wunderbar, ich ziehe meinen Hut vor deinen Fähigkeiten.
    Mir ist nämlich noch kein Codeabschnitt untergekommen, der früher oder später nicht überarbeitet worden ist. Sei es aus Performancegründen oder Bugs. Und wenn ich mir dann immer die Bedingungen im Code verstreut zusammensuchen muss, macht das auf Dauer echt keinen Spaß. Vor allem wenn es wie in diesem Fall auch anders ginge.
    Und von Erweiterungen haben wir noch gar nicht gesprochen! Es taucht ein neuer Fall auf, der behandelt werden muss. Oder eine neue Variable im struct. Oder neue Funktionen, die zur Vereinfachung neu eingeführt wurden. Und dann ohne Fehler zu machen und einen Fall zu vergessen in einem möglicherweise riesigen do { ... } rumzugruschen und zu schubsen...
    So ist wahrscheinlich Windows entstanden 😃



  • nachdem hier ja dem schlechten stil gefröhnt wird post ich doch auch mal meine version 😉

    loop:
        if(a==4||b==1)
            goto loopEnd;
        goto loop;
    loopEnd:
    

    oder evtl. gefällt euch das besser

    loop:
        if(a!=4&&b!=1)
            goto loop;
    

    happy coding lolo



  • l'abra d'or schrieb:

    FreakY<3Cpp schrieb:

    Damit das Verständnis erhalten bleibt, kann man statt "||" auch "or" verwenden.

    do
    {
        ...
    }while(a != 4 or b != 1);
    

    Führe die Schleife solange aus, bis a 4 ODER b 1 entspricht.

    Die Schleife soll abgebrochen werden, falls a==4 oder b==1, oder beides eintritt.
    while(a!=4 || b!=1) bricht aber eben nur ab, wenn a==4 UND b==1!
    Mannmannmann 😃

    Was soll daran falsch sein? Der OP meinte, die Schleife soll abgebrochen werden, wenn a = 4 oder b = 1 ist. Die schleife wird also jetzt ausgeführt und wiederholt, wenn dies nicht zutrifft. Wenn jetzt aber a nicht 4 entspricht (a != 4), wird die Schleife wiederholt. Außerdem weiß ich nicht was ihr für IDE's oder Compiler habt, aber meiner highlighted or und and sogar.

    Und das hier wieder eine endlose Diskussion entsteht, war zu erwarten, weil sich jeder für den Klügeren hält 😃 . Naja amüsant ist es von meiner Seite aus schon.



  • FreakY<3Cpp schrieb:

    Was soll daran falsch sein? Der OP meinte, die Schleife soll abgebrochen werden, wenn a = 4 oder b = 1 ist.

    Es soll rausspringen wenn a==4 oder b==1 bzw in beiden Fällen.

    Das Problem ist dass

    a != 4 or b != 1
    

    wahr ist, wenn a!=4 bzw b!=1. Auch wenn b==1 bzw. a==4! Aber das ist ja nicht die Bedingung. Es soll ja eben abgebrochen werden wenn a==4 oder b==1 ist.



  • player4245 schrieb:

    C++ benutz ich aber eher in grösseren Projekten.

    Oo.

    noopLolo schrieb:

    nachdem hier ja dem schlechten stil gefröhnt wird post ich doch auch mal meine version

    loop:
        if(a==4||b==1)
            goto loopEnd;
        goto loop;
    loopEnd:
    

    für meinen geschmack zu extrem, aber trotzdem intuitiv lesbarer als ein ausdruck im 'while', wobei eiiner die klammer aufgelöst hat und das || zu einem && wurde. vielleicht, als leicher verbesserungsvorschlag, so:

    loop:
        if (a==4)
           goto loopEnd;
        if (b==1)
           goto loopEnd;
        goto loop;
    loopEnd:
    

    ^^ *fg*

    FreakY<3Cpp schrieb:

    Und das hier wieder eine endlose Diskussion entsteht, war zu erwarten, weil sich jeder für den Klügeren hält

    das schimpft sich 'erfahrungsaustausch'. man bekommt mit, wie andere darüber denken. ich kann daran nix negatives sehen.

    FreakY<3Cpp schrieb:

    Außerdem weiß ich nicht was ihr für IDE's oder Compiler habt, aber meiner highlighted or und and sogar.

    leider kann deine IDE keine boolschen ausdrücke umformen. *fg* meine VHDL-IDE highlighted auch 'or' und 'and', aber unter C sind beides keine keywords.
    🙂



  • FreakY<3Cpp schrieb:

    Was soll daran falsch sein?

    Alles. Die ganze Bedingung ist falsch. Damit die Schleife abbricht, muß der while Ausdruck 0 ergeben. Die richtige Bedingung hat Diener gleich zu Anfang geschrieben. Im Zweifellsfall kann man sich schnell eine kleine Tabelle machen:

    a    b    !a&&!b
    1    1      0
    1    0      0
    0    1      0
    0    0      1
    

    Das Ergebnis entspricht Dieners Formulierung: Der Ausdruck wird Null (Abbruch der Schleife), wenn a==1 oder b==1 oder a==1 && b==1 ist.



  • Big Brother schrieb:

    Im Zweifellsfall kann man sich schnell eine kleine Tabelle machen:

    naja, a soll eigentlich 4 sein. im zweifelsfall hilft de morgan: ¬ (p ∨ q) → ¬ p ∧ ¬ q, d.h. aus ¬ (a = 4 ∨ b = 1) wird (weils wegen 'while' umgedreht werden muss) a ≠ 4 ∧ b ≠ 1 wurde aber schon erwähnt hier.
    btw, tolles forum, kann ja unicode.
    🙂



  • ;fricky schrieb:

    naja, a soll eigentlich 4 sein.

    Stimmt. Wenn a oder b zwischendurch auch noch andere Werte annehmen können, kann es peinlich werden und die Bedingung tuts auch bei anderen Werten ungleich Null. Sicher ist also nur die Bedingung while(a!=4&&b!), die hier schon öfter gepostet wurde.
    Die Tabelle für die Bedingung sieht dann so aus:

    a    b    a!=4&&b!=1
    4    1      0
    4    0      0
    0    1      0
    0    0      1
    

    Ein Tabellchen immer gutti ist, hilft auch fürs Verständnis der De Morgan'schen Gesetze.



  • Big Brother schrieb:

    Die Tabelle für die Bedingung sieht dann so aus:

    a    b    a!=4&&b!=1
    4    1      0
    4    0      0
    0    1      0
    0    0      1
    

    Ein Tabellchen immer gutti ist, hilft auch fürs Verständnis der De Morgan'schen Gesetze.

    machstu so:

    a    b    schleife verlassen    while()
    ---------------------------------------
    4    1         ja                 0
    4    X         ja                 0
    X    1         ja                 0
    X    X        nein                1
    

    ach egal, die for(;;)- oder goto-version gefällt mir immer besser *fg*
    🙂


Anmelden zum Antworten