Vergleichs-Ausdruck liefert keinen boolschen Wert (erledigt)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Vergleichs-Ausdruck liefert keinen boolschen Wert (erledigt)

Beitrag von PureLust »

Hallo zusammen, ...

ich wollte den boolschen Rückgabewert eines Vergleichsausdrucks (z.B. "Var < 1000") innerhalb einer Berechnung verwenden.
Jedoch liefert z.B. der Ausdruck "Var < 200" als Ergebnis IMMER "200" zurück, anstatt 0 für #False bzw. 1 für #True.

Bsp:

Code: Alles auswählen

TestValue = 800
Debug Str(TestValue)+" > 200  :  "+Str(TestValue > 200)
Debug Str(TestValue)+" = 200  :  "+Str(TestValue = 200)
Debug Str(TestValue)+" < 200  :  "+Str(TestValue < 200)
Normalerweise kenne ich das so, dass als Resultat eines solchen Ausdrucks 0 oder 1 (bzw. 0 oder -1) zurückgegeben wird.
Auch laut PB-Hilfe sollte hier True oder False zurück gegeben werden.

Habe ich da irgendwo einen Denkfehler, mache ich was falsch oder ist dies im Grunde eine PB Eigenart (bzw. ein Bug)?

Gruß, PL.
Zuletzt geändert von PureLust am 21.06.2006 15:27, insgesamt 2-mal geändert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

laut hilfe wird 'true' bzw 'false' zurückgegeben, aber nicht #True oder #False oder 1 , -1, oder 0 ect.
boolsche operatoren geben in PB, soweit ich weiss, keine weiterverwendbaren integer zurück, wie das in C der fall ist. ( :cry: leider)

sowas geht auch nicht:
equals_counter + (a=b) --------( = equals, nicht die zuweisung)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

Du kannst da ein bisschen tricksen:

Code: Alles auswählen

TestValue = 800 
Debug Str(TestValue)+" > 200  :  "+Str(0 Or TestValue > 200) 
Debug Str(TestValue)+" = 200  :  "+Str(0 Or TestValue = 200) 
Debug Str(TestValue)+" < 200  :  "+Str(0 Or TestValue < 200)
-.-"
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

@Green Snake:

super WA - vielen Dank !!! :allright:


Ich hatte es schon per "Str((TestValue < 200)=#True)" versucht, leider auch ohne Erfolg.

PureBasic scheint als Ergebnis also erst einen bolschen Wert zurückzugeben, wenn im Ausdruck ein logischer Operant verwentet wird.

Ist zwar ein bischen unlogisch und auch inkonsistent .... aber naja. :roll:

Auf jeden Fall erst mal vielen Dank für den Tip - nun komm' ich weiter. :allright:

Greetz & Thanks,
PureLust.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@PureLust
Das ist schon ausführlich diskutiert worden(z.B. hier) und lässt sich zur Zeit nur durch einen Macro in PB4 lösen.

Hier noch mal ein Beispiel:

Code: Alles auswählen

Macro Is(BooleanExpression) 
  (#False Or(BooleanExpression)) 
EndMacro 


a = 50 : Debug Is(a<60) : Debug Is(a=60) : Debug Is(a>60) 
a = 60 : Debug Is(a<60) : Debug Is(a=60) : Debug Is(a>60) 
a = 70 : Debug Is(a<60) : Debug Is(a=60) : Debug Is(a>60) 

File.s = "Test.vob" 
IsVOB.b = Is(LCase(GetExtensionPart(file)) = "vob") 
Debug IsVOB
Wird hoffentlich in einer neuen Version von Fred mal in PB integriert.
Zuletzt geändert von jear am 21.06.2006 16:59, insgesamt 1-mal geändert.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Hallo jear,

vielen Dank für den Link - ich habe mich da mal durchgeackert. ;)
Scheinbar wurde diese Geschichte ja von Fred nicht beachtet, da in der PB4-Final noch keine Lösung diesbezüglich integriert ist.

Naja ... wenn man sowas weiss, so kann man sich natürlich auch mit dem Macro bzw. dem oben stehenden Tip von Green Snake behelfen.

@André:
Es wäre vielleicht sinnvoll, dieses 'nicht gerade gebräuchliche' Verhalten auch in der Hilfe (z.B. bei "Variablen, Typen und Operatoren") zu erwähnen.
Für Programmierer mit Kenntnissen aus anderen Sprachen (die es also anders gewöhnt sind) würde dies vermutlich hilfreich sein.

ThanX an Alle die geholfen haben, :allright:
PureLust.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1754
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 »

PureLust hat geschrieben:@André:
Es wäre vielleicht sinnvoll, dieses 'nicht gerade gebräuchliche' Verhalten auch in der Hilfe (z.B. bei "Variablen, Typen und Operatoren") zu erwähnen.
Für Programmierer mit Kenntnissen aus anderen Sprachen (die es also anders gewöhnt sind) würde dies vermutlich hilfreich sein.
Hierfür bräuchte ich dann bloß eben auch einen vollständigen Textvorschlag. Eine eigene 100%ige Erklärung bekomme ich mangels Kenntnisse anderer Sprachen so nicht hin.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
ullmann
Beiträge: 205
Registriert: 28.10.2005 07:21

Beitrag von ullmann »

@Andre:
Habe einen Textvorschlag in "Verbesserungen an der Dokumentation für PureBasic v4" gepostet.

Gruß Rainer
Antworten