Opgave 1. Schrijf een programma dat het algoritme
uit de slide Talstelsels (3) implementeert,
dat wil zeggen, waarmee een getal uit een willekeurig talstelsel
omgezet kan worden naar een tientallige representatie.
Je kunt de index()
-functie gebruiken om de decimale waarde van een karakters op te zoeken in een string (zie String indexing (2)).
Om de string number
van achter naar voren te doorlopen, heb je een Python functie nodig die strings kan omkeren. Probeer die zelf te vinden, met behulp van internet.
In [17]:
number = "3DB"
base = 16
result = 0
digits = "0123456789ABCDEF"
power = 0
for digit in reversed(number):
result += digits.index(digit) * base**power
power += 1
print("Resultaat: {}".format(tgt_number))
In [1]:
# Van collega Peter kreeg ik een mooie recursieve oplossing
# die ik jullie toch niet wil onthouden.
# In periode 3 gaan we recursieve definities bekijken,
# maar hier vast een voorproefje.
# Kun je achterhalen waarom dit werkt?
# To understand recursion you gotta understand recursion
def base2dec(number, base):
digits = "0123456789ABCDEF"
if number < base:
return digits[number]
else:
return base2dec(number // base, base) + digits[number % base]
print(base2dec(3021, 16))
# To understand recursion you gotta understand recursion
def dec2base(number, base):
digits = "0123456789ABCDEF"
if len(number) > 0:
digit = number.pop(0)
position = digits.index(digit)
power = len(number)
result = position * base**power
return result + dec2base(number, base)
else:
return 0
print(dec2base("BCD", 16))
Opgave 2. Nu je de programma's hebt om de conversie van een willekeurig talstelsel
naar 10-tallig uit te voeren en tevens de conversie van 10-tallig naar een
willekeurig talstelsel, kun je ze samen gebruiken om van het ene
willekeurige talstelsel, zeg $n$, naar het andere willekeurige talstelsel $m$ te converteren:
$x_n \rightarrow y_{10} \rightarrow z_m$
Schrijf een programma dat een getal in een opgegeven talstelsel kan
converteren naar een ander opgegeven talstelsel. Je kunt de onderstaande code
gebruiken om je programma te beginnen:
org_base = 8
org_number = "4607"
tgt_base = 16
## converteer org_number (basis org_base) naar dec_number (10-tallig),
## converteer dec_number (10-tallig) naar tgt_number (basis tgt_base),
## druk tgt_number af
In [16]:
org_base = 8
org_number = "4607"
tgt_base = 16
digits = "0123456789ABCDEF"
## converteer org_number (basis org_base) naar dec_number (10-tallig)
dec_number = 0
power = 0
for digit in reversed(org_number):
dec_number += digits.index(digit) * org_base**power
power += 1
## converteer dec_number (10-tallig) naar tgt_number (basis tgt_base)
tgt_number = ""
while dec_number > 0:
remainder = dec_number % tgt_base
tgt_number = str(remainder) + tgt_number
dec_number = dec_number // tgt_base
## druk tgt_number af
print("Resultaat: {}".format(tgt_number))
Opgave 3. Pas het programma uit opgave 2 aan zodat de gebruiker de beide bases
en het te converteren getal mag opgeven, zoals beschreven
in de slide Python User Interaction (1)
In [15]:
org_base = int(input("Geef het talstelsel (2..16) voor het originele getal: "))
org_number = input("Geef het originele getal: ")
tgt_base = int(input("Geef het gewenste talstelsel: "))
digits = "0123456789ABCDEF"
## converteer org_number (basis org_base) naar dec_number (10-tallig)
dec_number = 0
power = 0
for digit in reversed(org_number):
dec_number += digits.index(digit) * org_base**power
power += 1
## converteer dec_number (10-tallig) naar tgt_number (basis tgt_base)
tgt_number = ""
while dec_number > 0:
remainder = dec_number % tgt_base
tgt_number = str(remainder) + tgt_number
dec_number = dec_number // tgt_base
## druk tgt_number af
print("Resultaat: {}".format(tgt_number))
In [ ]: