Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebnis +1

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebnis +1

Beitrag 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."
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni

Beitrag 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

:bounce:
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni

Beitrag von STARGÅTE »

Ergebnis = a / b + Sign(Mod(a, b))
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
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni

Beitrag 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...
Zuletzt geändert von mk-soft am 27.01.2018 21:07, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni

Beitrag 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.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni

Beitrag 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.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni

Beitrag 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?

Code: Alles auswählen

c = Round(1. * a / b, #PB_Round_Up)
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Frage zu Division mit Rest. Wenn Rest <> 0, dann Ergebni

Beitrag 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?

Code: Alles auswählen

c = Round(1. * a / b, #PB_Round_Up)
Haha, in der Tat. :D 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).
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Antworten