logisches Oder

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
DrNo
Beiträge: 202
Registriert: 09.05.2008 15:20
Wohnort: BW, Deutschland
Kontaktdaten:

logisches Oder

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenn Du Or statt Oder nimmst, sollte es klappen :wink:
Am besten Klammern setzen!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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
Zuletzt geändert von DarkDragon am 21.10.2008 17:54, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag 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
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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."
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
DrNo
Beiträge: 202
Registriert: 09.05.2008 15:20
Wohnort: BW, Deutschland
Kontaktdaten:

Beitrag von DrNo »

k...danke für eure Hilfe.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag 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.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: logisches Oder

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

:oops: :oops: :oops:
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Antworten