Seite 1 von 1
Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebnis +1
Verfasst: 27.01.2018 14:06
von Kurzer
Hallo,
ich möchte eine Division durchführen und wenn der Rest der Division <> 0 ist, soll auf das Ergebnis 1 addiert werden. Das möglichst als Einzeiler.
Derzeit löse ich das so:
Ergebnis = a / b + Bool(a % b > 0)
Gibt es eine mathematisch elegantere Lösung, so dass man kein Bool() nutzen muss oder ist das schon die eleganteste Methode?
Code: Alles auswählen
#Aepfel = 70
#AepfelProKiste = 12
; Ergebnis = a / b + Bool(a % b > 0)
Debug "Es passen " + Str(#AepfelProKiste) + " Äpfel in eine Kiste."
Debug "Für die Unterbringung von " + Str(#Aepfel) + " Äpfel benötigt man" + Str(#Aepfel / #AepfelProKiste + Bool(#Aepfel % #AepfelProKiste > 0)) + " Kisten"
Debug "weil in " + Str(#Aepfel / #AepfelProKiste) + " Kisten nur " + Str((#Aepfel / #AepfelProKiste) * #AepfelProKiste) + " Äpfel passen."
Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni
Verfasst: 27.01.2018 14:45
von _JON_
Wo ist das Problem mit Bool()?
Wenn es unbedingt ein 1-Zeiler sein soll:
Ergebnis = a / b : If (a % b) : Ergebnis + 1 : EndIf

Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni
Verfasst: 27.01.2018 19:06
von STARGÅTE
Ergebnis = a / b + Sign(Mod(a, b))
Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni
Verfasst: 27.01.2018 20:57
von mk-soft
Für Ganzzahlen
Code: Alles auswählen
Define a.i, b.i, c.i
a = 70
b = 12
c = a / b + Bool(a % b)
Debug c
a = 10
b = 3
c = a / b + Bool(a % b)
Debug c
Bool ist schon ok...
Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni
Verfasst: 27.01.2018 21:00
von Kurzer
Ah, Sign() ja genau das scheint mir das passendere zu sein. Danke Stargate.
@_Jon_: Ich habe mit Bool() solange kein Problem, solange #True in PureBasic als 1 definiert ist. Da ich nicht weiß, ob Fred das zusichert, wollte ich eine Version finden, die diesbezüglich "zukunftssicherer" ist (auch wenn es nicht sehr wahrscheinlich ist, dass die Konstante #True mal einen anderen Wert bekommen wird).
Also, vielen Dank euch beiden.
Edit: mk-soft, auch dir Danke für den Beitrag. Ich nutze aus o.g. Grund jetzt die Sign() Variante.
Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni
Verfasst: 27.01.2018 21:59
von Josh
Kurzer hat geschrieben:Ich habe mit Bool() solange kein Problem, solange #True in PureBasic als 1 definiert ist. Da ich nicht weiß, ob Fred das zusichert, wollte ich eine Version finden, die diesbezüglich "zukunftssicherer" ist .
#True wird nie einen anderen Wert bekommen !!!
1) Weil es keinen Grund dafür gibt
2) Weil sonst 99,99% der Pb-Programme nicht mehr funktionieren würden.
Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni
Verfasst: 28.01.2018 11:33
von CSHW89
Auch wenn es quasi schon gelöst ist, ist das mathematisch gesehen nicht einfach ein Aufrunden auf die nächst größere Zahl?
Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni
Verfasst: 28.01.2018 11:47
von Kurzer
CSHW89 hat geschrieben:Auch wenn es quasi schon gelöst ist, ist das mathematisch gesehen nicht einfach ein Aufrunden auf die nächst größere Zahl?
Haha, in der Tat.

Jetzt weiß ich woher der Spruch "den Wald vor lauter Bäumen nicht sehen" kommt.
Manches kann so einfach sein.
Vielen Dank, CSHW89.
PS: Round verarbeitet auch Doubles, das "1. *" ist daher nicht nötig (produziert bei mir auch einen Syntax error).