Hallo zusammen
Ich habe da eine Frage zu den IF Bedingungen, ist folgendes Szenario möglich?
IF ( 1==1 && 2==2 && (3==3 || 4==4) && 5==5) {
machwas;
}
Gruss Sascha
Hallo zusammen
Ich habe da eine Frage zu den IF Bedingungen, ist folgendes Szenario möglich?
IF ( 1==1 && 2==2 && (3==3 || 4==4) && 5==5) {
machwas;
}
Gruss Sascha
neuling321:
ist folgendes Szenario möglich?IF ( 1==1 && 2==2 && (3==3 || 4==4) && 5==5) {
machwas;
}
Ja.
Möglich ja, aber sinnlos, da die immer wahr ist, da alle Teilabfragen immer wahr sind.
Gruß Tommy
neuling321:
Ich habe da eine Frage zu den IF Bedingungen, ist folgendes Szenario möglich?IF ( 1==1 && 2==2 && (3==3 || 4==4) && 5==5) {
machwas;
}
Wenn es dir nicht vom Kompiler um die Ohren gehauen wird, dann ist es "möglich".
Ob es auch Sinnvoll ist, das hängt natürlich davon ab, ob es das gewünschte tut!
neuling321:
Ich habe da eine Frage zu den IF Bedingungen, ist folgendes Szenario möglich? ...
Ja, es ist IMO nur sehr schlecht lesbar, was für Debugging ganz schlecht ist.
Gruß
Gregor
So wie "Punktrechnung vor Strichrechnung" gilt, gibt es auch bei den logischen Operatoren Prioritäten, die zu beachten sind. Boolesche Algebra
gregorss:
Ja, es ist IMO nur sehr schlecht lesbar, was für Debugging ganz schlecht ist.
Ich hasse komplizierte Bedingungen!
Und verschachtelte if sowieso!
Könnte allerdings auch an meinen arg begrenzten Fähigkeiten liegen.
Hallo
ich denke ja Du meinst es ehr so :
wobei A,B,C,D,E numerische Variable sind
IF ( A==1 && B==2 && (C==3 || D==4) && E==5) {
machwas;
}
damit man es besser lesen kann eventuell so
if (A==1 && B==2 && E==5){
if (C==3 || D==4){
// mach was
}
}
Heinz
@Tommy56
Es kann doch gut möglich sein das alle Abfragen wahr sein müssen, damit das Ereignis oder der Befehl
ausgeführt werden darf/kann. Oder wie machst Du das? Wenn alles Wahr sein muss?
Mir geht es nicht um die Gleichungen " 1==1 " sondern um die && und || Abfrage.
Ich habe in meiner Abfrage das Gefühl, das die Bedingung die in Klammern steht nicht greift.
Aber ich werde das am WE noch mal testen., vielleicht habe ich woanders im Code einen "Fehler".
IF ( 1==1 && 2==2 && (3==3 || 4==4) && 5==5) {
machwas;
}
Es ist doch so, das die Bedingung nur ausgeführt wird, wenn 1,2,5 Wahr sind, und oder 3,4 wahr sind.
So sehe ich das doch richtig oder?
Gruss sascha
Ich habe in meiner Abfrage das Gefühl, das die Bedingung die in Klammern steht nicht greift.
"Gefühle" bringen dich bei der Fehleranlayse nicht weiter. Analysiere!
Gib deine 5 Variablen am Serial Monitor aus damit du siehst welchen Inhalt sie wirklich haben. Verlasse dich nicht darauf, welchen Inhalt sie vieleicht haben könnten.
Wenn deine Variablen dann wirklich alle so sind wie du sie erwartest hast und dein If noch immer nicht klappt, zerteile deinen If in einzelne Schritte, statte jeden If wieder mit einem Serial Print aus, damit du siehst wie weit du alles richtig gemacht hast.
von
IF ( A==1 && B==2 && (C==3 || D==4) && E==5)
zu
if ( A == 1 )
{
Serial.print("A="); Serial.println(A);
if (B == 2)
{
Serial.print("B="); Serial.println(B);
if (C == 3 || D == 4)
{
Serial.print("C="); Serial.println(C);
Serial.print("D="); Serial.println(D);
if (E == 5)
{
Serial.print("E="); Serial.println(E);
}
}
}
}
Danke für den Tip, werde ich am WE testen.
Ich habe in meiner Abfrage das Gefühl, das die Bedingung die in Klammern steht nicht greift.
Siehst du!
Ich habe dir geschrieben, dass ich zu blöd für solch komplizierten Bedingungen bin.
Dir scheint es ähnlich zu gehen.
Da liegt es doch nahe, diese Bedingungskaskade zu eliminieren.
Dazu kann ich sagen: In meinen Programmen findet sich sowas nirgendwo.
Der Grund ist recht einfach:
Das Stammhirn kann ein paar Hundert Dinge gleichzeitig/unterbewusst tun.
Atmen, Herz, Dutzende von Muskeln bewegen, Gleichgewicht halten usw.
Das Großhirn, die Denkmaschine, schafft ca 3 Dinge pro Sekunde.
Und kann auch nur ca 3 Bedingungen gleichzeitig verknüpfen.
Bei 4 wirds anstrengend, bei 5 bin ich an der Grenze
Mit 6 überfordert.
IF ( A==1 && B==2 && (C ==3 || D==4) && E==5)
Das sind 10 Werte und 9 Operatoren.
Das sind in der Summe 19 Dinge, welche es zu beachten gilt.
Das bekommt ein Normalsterblicher nicht mehr vollständig in den Überblick.
Da besteht bedarf für Großhirnerweiterungen.
Z.B. sorgfältig ausgefüllte Wahrheitstabellen.
Du bist also damit
IF ( A==1 && B==2 && (C==3 || D==4) && E==5)
an deiner natürlichen Grenze abgeprallt.
Mein Rat:
Stelle nicht die Definition der Sprache, oder die Funktion des Compilers in Frage, sondern überdenke dein Konzept. Denn da liegt der Wurm.
Hallo,
mit Bezug auf #9
eventuell macht es auch Sinn alle Variablen vor dem ganzen If... Konstrukt auszugeben dann bekommt man auch den Zustand derer angezeigt die weiter innen stehen und sonst eventuell gar nicht angezeigt würden. Allerdings lässt sich der Programmablauf besser verfolgen wenn eine Kontrollausgabe innerhalb der if... steht. hat halt alles zwei Seiten.
Heinz
Also darf ich maximal eine Bedingung in der IF abfrage haben, da Du ja festgestellt hast, das ich dämlich sein muss.
Frage mich gerade warum Du hier überhaupt schreibst.
Aber wahrscheinlich kann ich das mit meinem schmalen Horizont nicht verstehen.
Den anderen ein Danke
Gruss Sascha
Merke:
In erster Linie habe ich über meine eigenen durchaus begrenzten Fähigkeiten geschrieben.
Es kann natürlich sein, dass du mir haushoch überlegen bist.
Da dich aber eine "so einfache" Bedingungskaskade schon überfordert, möchte ich das mal bezweifeln.
Natürlich darfst du die/meine Kritik an deinem Vorgehen/Konzept gerne persönlich nehmen, wenn du das möchtest.
Auch gerne den Boten töten und versuchen aus dem Forum/Thread zu drängen.
Alles gut, mach weiter so.
neuling321:
Aber wahrscheinlich kann ich das mit meinem schmalen Horizont nicht verstehen.
Warum denn so aggro?
Eine Bedingung ist mit deiner Handvoll Zeileninhalt für den Einen oder Anderen noch überschaubar.
Das wird anders, wenn Du da x VariablenNamen und mehr als eine zu vergleichende Ziffer drin hast und dann wohlmöglich noch die eine oder andere Rechenoperation.
(digitalRead(RelaisPin)==HIGH && (analogRead(LampePin)!=analogRead(5)+10)||digitalRead(16))||millis()-previousmillis>1000) - Das ist nichmal schwer und den blick ich noch auf Anhieb - aber auch nur, weil ich den kenne.
Versetz Dich in die Lage, das jemand Deinen Code nicht geschrieben hat, ihn aber verstehen will.
Wenn DU das mit 6 bedingten Vergleichen und "beschreibenden"(!) Variablen machst, vielleicht auch noch Var's deren Inhalt an anderer Stelle im Code gesetzt wird, dann wirst auch Du das nicht in einer Minute zusammen haben.
Das ein Hinweis auf "übersichtlicheren Code" so eine Reaktion auslöst, stellt mehr als eine Frage...
Das ein Hinweis auf "übersichtlicheren Code" so eine Reaktion auslöst, stellt mehr als eine Frage...
Eigentlich nicht.
Der Küchenpsychologe, in mir, sagt dazu:
Sowas passiert, wenn sich jemand vollständig mit seinen Ideen/Konzepten identifiziert.
Sich selber darüber definiert.
Dann wird natürlich jegliche Kritik, an dem Konzept, als persönlicher Angriff aufgefasst, und mit tödlicher Gewalt beantwortet.
Also alles vollkommen menschlich.
Nachtrag:
Übrigens, auch deine lustige
(digitalRead(RelaisPin)==HIGH&&(analogRead(LampePin)!=analogRead(5)+10)||digitalRead(16))||millis()-previousmillis>1000) Verknüpfung stufe ich als kaum, bis unlesbar ein.
Auch hier gilt: Das ist meine persönliche Einstufung!
Die hat mit niemandem anders was zu tun.
Bin ich doch froh das der KüchenPsychologe, auch hier ist, Mensch was würde ich sonst machen, Danke.
Wenn Du jetzt noch meine Frage oben verstanden hättest, würde ich dir glatt zu Füssen liegen. Da aber die einfach frage die ich gestellt habe, deine wie Du selber schreibst "arg begrenzten Fähigkeiten" anscheint überfordern, frage ich mich warum Du überhaupt Antwortest und Menschen mit dem überschwänglichen Getue reizt? Aber vielleicht gibt dir das inneren Seelen frieden.
Meine Freundin sagt dazu immer, das ist so ein Schwanz Ding. Kann nicht beurteilen ob das bei dir zutrifft, aber Sie hat schon oft recht damit.
Mein Sohn!
Du hast die passende Antwort schon längst von mir bekommen!
Kann sie allerdings auch gerne nochmal wiederholen.
Vielleicht ist sie ja von unkontrollierten Gefühlen und Emotionen überdeckt worden......
Siehe hier:
combie:
neuling321:
Ich habe da eine Frage zu den IF Bedingungen, ist folgendes Szenario möglich?IF ( 1==1 && 2==2 && (3==3 || 4==4) && 5==5) {
machwas;
}Wenn es dir nicht vom Kompiler um die Ohren gehauen wird, dann ist es "möglich".
Ob es auch Sinnvoll ist, das hängt natürlich davon ab, ob es das gewünschte tut!
Ob du diese Antwort akzeptierst, liegt ganz bei dir.
Nur noch kurz an den TO:
Ich beantworte Codefragen grundsätzlich nicht per PM.
Schon aus Gründen des Gedankens hinter der Arduino-Umgebung.
Es wäre vielleicht fair gewesen, auf #15 zu antworten.
Du hast in #17 ausgeteilt und DANACH mich angeschrieben.
Denk mal drüber nach.