Seite 1 von 2
logisches Oder
Verfasst: 21.10.2008 17:45
von DrNo
Hab da mal ne Frage zu einem "oder", in der Hilfe etwas verwirrend.
Ist es in PB möglich mehrere Ergebnisse zu ermöglichen?
Also damit meine z.B. bei einer Eingabe, ich überprüfe:
Code: Alles auswählen
eingabe = GetGadgetText(X)
If eingabe = ergebnis1 ODER ergebnis2 ODER ergebnis3 (etc)
MessageRequester("lol"," Du hast eine der mögl gefunden")
Else
End
EndIf
Verfasst: 21.10.2008 17:52
von ts-soft
Wenn Du Or statt Oder nimmst, sollte es klappen

Am besten Klammern setzen!
Verfasst: 21.10.2008 17:54
von DarkDragon
Nein so klappt das nicht.
Du musst jedes mal "eingabe = " schreiben.
Code: Alles auswählen
eingabe = GetGadgetText(X)
If eingabe = ergebnis1 Or eingabe = ergebnis2 Or eingabe = ergebnis3 (etc)
MessageRequester("lol"," Du hast eine der mögl gefunden")
Else
End
EndIf
Verfasst: 21.10.2008 17:54
von cxAlex
Eigentlich müsste das gehen.
Das ganze würde so geprüft:
(PB: ODER = OR)
Ausdruck: (ergebnis1 ODER ergebnis2) ODER ergebnis3
Wenn Ergebniss 1 oder 2 <> 0 : Klammer wahr => Ergebniss 3 egal; Ausdruck wahr.
Wenn Ergebniss 1 und 2 = 0 : Klammer falsch => Ausdruck = Ergebniss 3.
Mit UND (AND) müsste das genau so gehen, davon UND und ODER ohne Klammern zu mischen würde ich abraten, wird schnell unübersichtlich und verwirren.
Tipp: Wenn du logische Ausdrücke vereinfachen willst schau dir mal die
De Morgan'schen Regeln an.
//EDIT:
@DarkDragon:
Warum soll das nicht gehen:
Verfasst: 21.10.2008 17:57
von ts-soft
Wie DD sagte:
Code: Alles auswählen
eingabe = GetGadgetText(X)
If (eingabe = ergebnis1) Or (eingabe = ergebnis2) Or (eingabe = ergebnis3)
MessageRequester("lol"," Du hast eine der mögl gefunden")
Else
End
EndIf
Wobei in diesem Fall könnten die Klammern entfallen, ich würde die aber
immer setzen
Mit Select wird das ganze aber kürzer
Code: Alles auswählen
eingabe = GetGadgetText(X)
Select eingabe
Case ergebnis1, ergebnis2, ergebnis3
MessageRequester("lol"," Du hast eine der mögl gefunden")
Default
End
EndSelect
Verfasst: 21.10.2008 18:42
von Kaeru Gaman
cxAlex hat geschrieben://EDIT:
@DarkDragon:
Warum soll das nicht gehen:
es hat doch niemand bestritten, dass du drei elemente per Or verbinden kannst.
aber du brauchst drei Ausdrücke, keine Teilausdrücke.
dein beispiel testet lediglich Konstanten als Ausdrücke, natürlich geht das.
Code: Alles auswählen
For n= 0 To 9
Debug "Teste nun " + Str( n )
If n = 2 Or 4 Or 6
Debug "... ist eine 2, 4 oder 6"
EndIf
Next
wie du siehst: 4 und 6 sind immer #True, nämlich ungleich Null.
die werden garnicht erst mit n verglichen.
und mit strings geht da garnix: "Use of a literal string as expression is not allowed."
Verfasst: 21.10.2008 18:42
von DrNo
k...danke für eure Hilfe.
Verfasst: 21.10.2008 19:52
von cxAlex
> If n = 2 Or 4 Or 6
Warum sollte n mit den Or's verglichen werden? Das = wird vorher aufgelöst, da es eine höhere Priorität hat als OR/AND (siehe PB Hilfe).
Damit kann man sowiso nicht vergleichen ob n einer der drei werte ist. Hab ich auch nie behauptet. Nur das man damit überprüfen kann ob EINER der Werte <> Null ist, bzw. mit And ALLE Werte <> 0.
Sonst würde ich auch zu Select raten, anders wars nie gemeind, vieleicht hat das wer falsch verstanden.
Re: logisches Oder
Verfasst: 21.10.2008 19:58
von Kaeru Gaman
DrNo hat geschrieben:Ist es in PB möglich mehrere Ergebnisse zu ermöglichen?
Code: Alles auswählen
If eingabe = ergebnis1 ODER ergebnis2 ODER ergebnis3 (etc)
DarkDragon hat geschrieben:Nein so klappt das nicht.
Du musst jedes mal "eingabe = " schreiben.
cxAlex hat geschrieben:@DarkDragon:
Warum soll das nicht gehen:
... also wer versteht hier was falsch? ô_O
Verfasst: 21.10.2008 20:27
von cxAlex