Seite 1 von 1
ägyptische Multiplikation
Verfasst: Dienstag 5. Juni 2007, 08:39
von singstar
Code: Alles auswählen
def multi(x,y):
prod = 0
while y > 0:
if y % 2 == 1: # Zweiter Faktor ist ungerade
prod = prod + x # Ein "gutes" Haus: Addieren!
y = y - 1 # Nun ist er wieder gerade!
else:
x = x + x # Erster Faktor wird verdoppelt
y = y / 2 # Zweiter Faktor wird halbiert
return prod
ich will aber in binär die einzelnen Teile und als Produkt
Danke
Verfasst: Dienstag 5. Juni 2007, 10:14
von BlackJack
Ausser das hier jemand Deine Hausaufgaben lösen soll, habe ich die Frage nicht ganz verstanden.
Was sind denn die einzelnen "Teile"?
Verfasst: Dienstag 5. Juni 2007, 11:38
von Sr4l
Unter Wikipedia steht sogar das Codebespie in Python
such mal nach
http://de.wikipedia.org/wiki/Russische_ ... iplikation
Verfasst: Dienstag 12. Juni 2007, 07:54
von singstar
BlackJack hat geschrieben:Ausser das hier jemand Deine Hausaufgaben lösen soll, habe ich die Frage nicht ganz verstanden.
Was sind denn die einzelnen "Teile"?
Nich Jeder der hier eine Frage stellt hat diese auch als HAUSAUFGABE AUF!!!!!!
Code: Alles auswählen
def aegypt_multi (basis, exponent):
sammel = 1
exponent = dez2bin(exponent)
for i in exponent:
if exponent == 1:
sammel = ((sammel) ** 2) * basis
else:
sammel = (sammel ** 2)
return sammel
Allerdings haben wir ein Problem mit der Methode dez2bin anscheinend xD
Code: Alles auswählen
def dez2bin(a):
if a / 2 == 0: return ' '
else:
dez2bin(a / 2) + str(a % 2)
Sieht wer vielleicht den Fehler? [/code]
Verfasst: Dienstag 12. Juni 2007, 08:36
von Zap
singstar hat geschrieben:
Code: Alles auswählen
def dez2bin(a):
if a / 2 == 0: return ' '
else:
dez2bin(a / 2) + str(a % 2)
Das ist nicht umbedingt ein Anwendungsfall der einen rekursiven Aufruf braucht. Guck dir mal dieses Beispiel an:
http://www.daniweb.com/code/snippet285.html
Verfasst: Dienstag 12. Juni 2007, 08:50
von BlackJack
Und der Fehler wäre, dass im ``else``-Zweig das ``return`` fehlt.
Der Funktionsname ist übrigens "falsch", weil hier keine Dezimaldarstellung in eine Binärdarstellung umgewandelt wird, sondern eine (ganze) Zahl in Binärdarstellung.
Verfasst: Dienstag 12. Juni 2007, 09:53
von Michael Schneider
Hi,
was ich auch mache, mir fehlt immer die erste Stelle. Ist auch plausibel, da 1/2 nunmal 0 ist und an der Rekursionsabbruchbedingung "" statt "1" zurückgegeben wird.
Aber das ist doch eine Standardaufgabe a la
EDIT: ACHTUNG, bitte nicht verwenden, da fehlerhaft für Parameter 0. Korrektur weiter unten im Thread!!
Code: Alles auswählen
>>> def num2bin(i):
... if not i: return ""
... iRest, iWert = divmod(i, 2)
... return "%s%i" % (num2bin(iRest), iWert)
...
>>> num2bin(5)
'101'
Gruß,
Michael
Verfasst: Dienstag 12. Juni 2007, 11:39
von BlackJack
Fast, aber nicht ganz:
Code: Alles auswählen
In [9]: def num2bin(i):
...: if not i: return ""
...: iRest, iWert = divmod(i, 2)
...: return "%s%i" % (num2bin(iRest), iWert)
...:
In [10]: num2bin(0)
Out[10]: ''
Verfasst: Mittwoch 13. Juni 2007, 06:29
von Michael Schneider
BlackJack hat geschrieben:Fast, aber nicht ganz:
Moin Blacky,
hast wieder einmal recht.
Wenn nur noch 0 oder 1 übrig sind, muss man natürlich die zurückgeben:
Code: Alles auswählen
def num2bin(i):
if i <= 1: return i
iRest, iWert = divmod(i, 2)
return "%s%i" % (num2bin(iRest), iWert)
for i in range(5):
print num2bin(i)
Grüße,
Michael