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 :wink:
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:

Code: Alles auswählen

If 0 Or 0 Or 1
  Debug "3 fach OR ok"
EndIf

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:

Code: Alles auswählen

If 0 Or 0 Or 1
  Debug "3 fach OR ok"
EndIf
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
:oops: :oops: :oops: