Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 18.11.2007, 21:21 Titel: Mathematisches Problem: Nächstgrößere, durch 8 teilbare Zahl |
|
|
Hallo,
ich knobele gerade an einem mathematischen Problem und steh dabei auf dem Schlauch. Womöglich ist die Lösung einfach, aber ich komm nicht drauf. Ich versuche eine Funktion zu basteln, der ich als Argument irgendeine positive Ganzzahl übergebe und die dann die nächstgrößere, ohne Rest durch 8 teilbare Ganzzahl zurückliefert. Falls man bereits eine durch 8 teilbare Zahl übergibt, soll natürlich auch diese wieder zurückgegeben werden. Wie kann man das nur mit "mathematischen" Mitteln, d.h. ohne IF, FIX(...) usw. lösen oder geht das vllt. gar nicht?
An
Code: | f = x + 8-(x MOD 8) |
habe ich schon gedacht, aber diese Funktion würde bei Übergabe von z.B. 16, was ja bereits ein "richtiges" Ergebnis wäre, 24 zurückliefern. Wie geht das besser?
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 18.11.2007, 21:37 Titel: |
|
|
Auf die schnelle klappt bei mir
Code: | Print x - (x MOD 8) - (8 * ((x mod 8) <> 0)) |
Überlegung:
"x - (x mod 8)" wäre die nächstkleinere zahl.
Dazu wird 8 addiert, es sei denn, der rest von x/8 ist 0. _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 18.11.2007, 23:40 Titel: |
|
|
oder x + (7 - ((x-1) mod 8)) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 18.11.2007, 23:51 Titel: |
|
|
Übrigens ist [x] = int(x) auch eine mathematische Funktion, also sollte auch int((x-1)/8)*8 + 8 erlaubt sein. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 19.11.2007, 00:01 Titel: |
|
|
zahl = (zahl + (bit(zahl,0) or bit(zahl,1) or bit(zahl,2))*8 ) and 7
ginge auch glaub ich  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 19.11.2007, 17:34 Titel: |
|
|
etwas kompakter?
darf AND nicht verwendet werden, geht auch
Code: | x = ((x + 7) \8) *8 |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
|