vereinfachen von if funktionen

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

dieser Abschnitt der Hilfe wurde wieder eliminiert, da "es sich um einen Trick" handele, "dessen Support in zukünftigen PB-Versionen nicht gerantiert werden kann" (Freak)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Bitte streichen, jear, das wurde bloß erfunden. PB unterstützt das Rechnen mit logischen Ausdrücken noch nicht.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@AND51
Bitte streichen, jear, das wurde bloß erfunden.
Das steht so in der PB-Hilfe! Oder willst Du mir unterstellen, ich hätte das "erfunden"?
PB unterstützt das Rechnen mit logischen Ausdrücken noch nicht.
Das Beispiel ist kein "Rechnen" mit logischen Ausdrücken. Es ist einzig eine andere Form, eine Bedingungsabfrage zu verwirklichen.
Dies kann (zusammen mit dem Macro Is()) auch in anderen Konstrukten sehr hilfreich sein.

Code: Alles auswählen

DisableGadget(#Gad, Is(Wert > 50))
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Das Beispiel ist kein "Rechnen" mit logischen Ausdrücken.
damit bist du aber auf dem holzweg.

es ist definitiv rechnen mit logischen ausdrücken, und das wird nur durch
das workaround in verbindung mit einer logischen verknüpfung unterstützt.

dass dein beispiel funktioniert, ist geradezu ein zufallstreffer, das liegt an dem AND in dem ausdruck.

beweis:

Code: Alles auswählen

For t = 0 To 20
  s = t * (t > 10)
  Debug "t = "+Str(t)+" => s = "+Str(s)
Next
der absatz wurde in die Help aufgenommen, um das Workaround allgemein kenntlich zu machen,
nachdem allerdings mehrfache rückfragen kamen, wurde von Freak ganz klar ausgesagt, was ich oben angegeben habe,
und der betreffende absatz wurde aus der Help wieder entfernt, in der aktuellen Version sollte er nicht mehr drin sein.

wir hatten dieses thema auch schon mehr als einmal,
ich erinnere mich dass vor ca. 2 jahren wir beide, jear und ich,
uns eingesetzt hatten, boole'sche ausdrücke korrekt zu implementieren,
und es wurde mehrfach festgestellt, dass diese möglichkeit zwar ganz nett sei,
aber keine wirklich notwendigkeit dafür bestünde,
und die umsetzung daher keine hohe priorität besitzt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

jear hat geschrieben:Oder willst Du mir unterstellen, ich hätte das "erfunden
Nein, das will ich dir selbstverständlich nicht unterstellen. Ich hatte mein Posting editiert, vorher stand da: "Das hat Andre bloß erfunden." Aber ich habs entfernt, weil ich das nicht so anschuldigend gemeint habe, wie man es hätte verstehen können.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Mal einen Trick:

Wert=1

oder

Wert=0


Code: Alles auswählen

Wert = (Wert  + 1)%2
Statt

Code: Alles auswählen

if Wert
  Wert=0
else
  Wert=1
endif
>> OffTopic
Ach übrigens, ich würde mich tierisch freuen, wenn ihr mal auf meine Seite geht. Hab sie extra für euch bis heute morgen fertig gestellt.
<<

Dank euch :allright:
Kinder an die Macht http://scratch.mit.edu/
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Xaby hat geschrieben:

Code: Alles auswählen

Wert = (Wert  + 1)%2
viel zu aufwendig!

grundsätzlich:
statt %2 verwende &1 => wesentlich performanter.
also für dein konstrukt:

Code: Alles auswählen

Wert + 1 & 1
außerdem:

einfach:

Code: Alles auswählen

Wert = 1 - Wert
vollständig:

Code: Alles auswählen

low = 2
high = 5
range = high + low

toggle = low

For n=0 To 9
  toggle = range - toggle
  Debug toggle
Next
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Ich finde es trotzdem cool das man das hier machen kann

Code: Alles auswählen

 
x = 127 + 3 * (r < 7 And r > 0) - (z = 7 And r = 1)*100
Debug x
Nur das geht halt nicht wie schon Kaeru Gaman zeigte aber dnan muss halt ein "AND 1" mit rein ^^

Code: Alles auswählen

x = (z < 6)*2
Debug x
x = (z < 6 And 1)*2
Debug x
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

und es ist eben nix, für das das team seine hand in's feuer legt, dass die codes auch morgen noch funktionieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> statt %2 verwende &1 => wesentlich performanter
RICHTIG!

> Wert + 1 & 1
FALSCH!

Man beachte die höhere Priorität des Operators &. Bei dir würde 1 & 1 immer 1 ergeben und damit den Wert inkrementieren...

>> (Wert + 1) & 1
Müsste es heißen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten