Ersatz für Sign() Funktion

Anfängerfragen zum Programmieren mit PureBasic.
ullmann
Beiträge: 205
Registriert: 28.10.2005 07:21

Ersatz für Sign() Funktion

Beitrag von ullmann »

In einem Makro wollte ich die Funktion Sign() verwenden, um auf einer einzigen Zeile folgende Zuweisung zu realisieren:

wenn b ungleich der Konstante c ist, so soll a zu 0 werden und
wenn b gleich der Konstante c ist, so soll a zu 1 werden

Code: Alles auswählen

#c=2
Define.a a,b

b=0
a=Sign(b&#c)    ; wenn b<>c ist, so soll a=0 werden

b=2
a=Sign(b&#c)    ; wenn b=c ist, so soll a=1 werden
In meinem Programm sind a und b Felder vom Typ .a, dass möchte ich nicht ändern.
Das Makro nimmt sehr viele Zuweisungen vor, deshalb ist es für die Lesbarkeit des Codes günstig, wenn jede Zuweisung auf einer Zeile erfolgt.
Die Sign() Funktion arbeitet leider nicht (was ich vorausgesetzt hatte) mit dem Typ .a zusammen (immer diese Meckerei von PureBasic :evil: ).
Das einzeilige IF THEN ELSE scheint es auch nicht zu geben.
Typwandlungsbefehle (um das Ergebnis von b&#c in Fließkomma zu wandeln und dann der Sign() Funktion unterzuschieben) habe ich in der Hilfe keine gefunden.

Bliebe die umständliche Wandlung über Zeichenketten

Code: Alles auswählen

#c=2
Define.a a,b

b=0
a=Sign(ValF(StrU(b&#c)))
Debug a

b=2
a=Sign(ValF(StrU(b&#c)))
Debug a
Das funktioniert offensichtlich.

Gibt es evtl. noch eine elegantere Lösung?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Ersatz für Sign() Funktion

Beitrag von STARGÅTE »

Wenn du PB 5.10 oder höher nutzt, kannst du Bool() nutzen:

Code: Alles auswählen

a = Bool(b=#c)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
ullmann
Beiträge: 205
Registriert: 28.10.2005 07:21

Re: Ersatz für Sign() Funktion

Beitrag von ullmann »

Super, danke.

Ich habe PB 4.61 und hatte von Bool() schon gelesen, aber noch nicht verinnerlicht.
ullmann
Beiträge: 205
Registriert: 28.10.2005 07:21

Re: Ersatz für Sign() Funktion

Beitrag von ullmann »

Hmm,

also PB 4.61 kennt kein Bool().

Da werde ich mir mal die neueste Version downloaden müssen.
Antworten