Seite 1 von 1

Ersatz für Sign() Funktion

Verfasst: 14.07.2013 20:22
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?

Re: Ersatz für Sign() Funktion

Verfasst: 14.07.2013 20:27
von STARGÅTE
Wenn du PB 5.10 oder höher nutzt, kannst du Bool() nutzen:

Code: Alles auswählen

a = Bool(b=#c)

Re: Ersatz für Sign() Funktion

Verfasst: 14.07.2013 20:29
von ullmann
Super, danke.

Ich habe PB 4.61 und hatte von Bool() schon gelesen, aber noch nicht verinnerlicht.

Re: Ersatz für Sign() Funktion

Verfasst: 14.07.2013 20:51
von ullmann
Hmm,

also PB 4.61 kennt kein Bool().

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