Bug oder nur eine Frage des verständnisses

Für allgemeine Fragen zur Programmierung mit PureBasic.
Torakas
Beiträge: 63
Registriert: 13.09.2004 09:56

Bug oder nur eine Frage des verständnisses

Beitrag von Torakas »

Hi Leute,

ich hab heute mal eine Abfrage aufgebaut mit And und Or nur verstehe ich nicht warum das Purebasic so nimmt. Mal ein beispiel:

Code: Alles auswählen

if 0 and 0 or 1 and 1
  debug "hallo"
endif
Normalerweise muesste er in die Abfrage springen, tut er aber nicht. Erst wenn ich

Code: Alles auswählen

if (0 and 0) or (1 and 1)
  debug "hallo"
endif
schreibe dann geht es.. Das ist doch nicht richtig... Naja, wenn man es weiss dann geht es, aber normalerweise sollte der Compiler das auch selber richtig erkennen... immerhin ist es ja eindeutig...

Was sagt ihr...

Gruß,
Torakas
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 »

Code: Alles auswählen

If 0 | 0 Or 1 | 1
  Debug "hallo"
EndIf 
so geht's
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
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

Eindeutig ist es nicht

Du könntest ja auch meinen:

Code: Alles auswählen

if ((0 and 0) or 1) and 1
  debug "hallo"
endif 
oder...

Code: Alles auswählen

if 0 and (0 or 1) and 1
  debug "hallo"
endif 
oder...

Code: Alles auswählen

if 0 and (0 or ( 1 and 1))
  debug "hallo"
endif 
oder...

Code: Alles auswählen

if 0 and (0 or (1 and 1))
  debug "hallo"
endif 
oder...

Code: Alles auswählen

if 0 and ((0 or 1) and 1)
  debug "hallo"
endif 
oder...oder... oder....

Wobei ich jetzt mal davon ausgehe, dass du 1 und 0 eingesetzt hast statt irgendwelcher variablen, die diese werte haben können ;)
Sonst wär´s wohl relativ nutzlos, so eine abfrage zu machen, du kennst die lösung ja.
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Das Problem was du ansprichst, sind die Vorrangregeln.

Denk mal an die Punkt-vor-Strich-Rechnung. So ähnlich ist es hier. Nur heißt es hier OR-vor-AND-Rechnung. Eigendlich müssten AND und Or gleichwertig sein, also es müsste eine Fehlermeldung wegen Uneindeutigkeit rausspringen.


Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Exabot
Beiträge: 63
Registriert: 10.12.2004 09:50

Beitrag von Exabot »

@Laurin

zu einer Zeit als man Eros noch für den Gott der Liebe hielt
und nicht für den Chef einer Supermarktkette,
als Pisa noch eine Stadt in Italien und nicht der Name einer Studie war
habe ich gelernt, dass bei gleichwertigen Rechenoperatoren strikt von
links nach rechts ausgewertet wird. :twisted:
Gruß
Spider
Torakas
Beiträge: 63
Registriert: 13.09.2004 09:56

Beitrag von Torakas »

Danke @ Spider

wenn man es von links nach rechts lesen würde dann kommt erstmal das And und somit ist die naechste Variable damit gemeint das sie zuammenhaengen... Naja, ich werde mir einfach die Klammern hier angewöhnen wie in C, dann da sind sie immer...

Gruß,
Torakas
Exabot
Beiträge: 63
Registriert: 10.12.2004 09:50

Beitrag von Exabot »

Hallo Torakas,
mir ging es eigentlich nur um die Aussage:
Eigendlich müssten AND und Or gleichwertig sein, also es müsste eine Fehlermeldung wegen Uneindeutigkeit rausspringen.
Wenn meine Deine Abfrage durchgeht (von links nach rechts),
komme ich zu folgendem Ergebnis:
0 and 0 ( logisch falsch weil: falsch and falsch = falsch)
diese ergebnis geort mit 1 = 0 or 1 (logisch wahr, weil: falsch or wahr = wahr.) PB liefert hier aber falsch!
Ergebnis:
Denkfehler meinerseits, man möge mich korrigieren! :oops:
Ansonsten BUG in PB :freak:

mfg Spider
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Bin zum selben Ergebnis gekommen und plädiere für Bug.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wenn ich

0 and (0 or 1) and 1

klammere, bekomme ich auch keine ausgabe,
was auch richtig so ist:
0 or 1 = 1
0 and 1 = 0
0 and 1 = 0

wenn also laurin recht hat mit OR vor AND, dann ist es kein bug.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Bug hin oder her - ich habe es mal an Fred zur Überprüfung gemeldet. :wink:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten