Bedingung aufstellen
-
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!
MannmannmannWas 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*
-
Ahaa, du meinst so:
do { // ..irgendwas }while(schleife verlassen != ja);
verstehe
Die Formulierung für 'schleife verlassen' hast du vergessen. :p
-
Big Brother schrieb:
Ahaa, du meinst so:
do { // ..irgendwas }while(schleife verlassen != ja);
verstehe
Die Formulierung für 'schleife verlassen' hast du vergessen.ja, es bleibt halt alles doof mit do{...}while(). und jetzt stell dir mal vor, es gibt 3 oder mehr variablen die logisch verknüpft werden sollen. dann gibts ja kaum noch 'nen ausweg aus der for(endlos)-konstruktion.
-
l'abra d'or schrieb:
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.
Gut dann mach deine while-Schleife mit while(a == 4 or b == 1)... Dann wird sie solange ausgeführt wie a = 4 und b = 1 ist... Durch a != 4 oder b != 1 wird es abgebrochen, da a = 4 oder b = 1 ist...
-
FreakY<3Cpp schrieb:
Durch a != 4 oder b != 1 wird es abgebrochen, da a = 4 oder b = 1 ist...
eben nicht, dann wird nur abgebrochen wenn a=4 UND b=1 ist, nicht aber, wenn nur eins davon zutrifft. der komplette ausdruck muss verdreht werden, einfach aus 'gleich' 'ungleich' machen reicht nicht. lies doch den thread nochmal.
-
;fricky schrieb:
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.
das sehe ich genauso denn von den De Morgan'schen Gesetzen hab ich noch nie was gehört und mal wieder was dazu gelernt, danke ;fricky für diesen post
lg lolo