Oefeningen

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))


Resultaat: 987

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))


Resultaat: 987

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))


Geef het talstelsel (2..16) voor het originele getal: 8
Geef het originele getal: 4607
Geef het gewenste talstelsel: 16
Resultaat: 987

In [ ]: