-
Notifications
You must be signed in to change notification settings - Fork 0
schaken_met_graan
Hier vind je verschillende uitwerkingen van opdracht 1.2.22 van EMS10.
Daarin wordt je gevraagd om een programma in Python te schrijven dat voor elk veld van het schaakbord (een schaakbord heeft 64 velden) het nummer van het veld en het aantal graankorrels op dat veld afdrukt. Gegeven is dat op het eerste veld één graankorrel ligt, op het tweede veld liggen twee graankorrels, op het derde veld vier, op het vierde acht enzovoorts. Op ieder veld ligt dus steeds het dubbele aantal graankorrels van het vorige veld. Aan het eind van het programma moet ook het totaal aantal graankorrels afgedrukt worden.
Als je goed hebt opgelet bij de wiskundeles, dan weet je dat je het aantal graankorrels op elk veld kan berekenen met de formule:

Het totaal aantal graankorrels kun je berekenen met de volgende formule:

Het volgende Python-programma maakt gebruik van deze formules:
for veld in range(1, 65):
print('veld', veld, ':', 2 ** (veld - 1))
print('totaal :', 2 ** 64 - 1)Deze oplossing werkt prima, maar voldoet helaas niet aan de opdracht want daarin staat: "Gebruik in het programma alleen de rekenkundige operaties optellen en vermenigvuldigen.".
Als je geen gebruik mag maken van de rekenkundige operatie machtsverheffen, dan moet je het aantal graankorrels per veld en het totaal aantal graankorrels bijhouden in variabelen.
In het onderstaande programma worden daarvoor de variabelen genaamd graankorrels en totaal gebruikt.
graankorrels = 1
totaal = 0
for veld in range(1, 65):
print('veld', veld, ':', graankorrels)
totaal = totaal + graankorrels
graankorrels = graankorrels * 2
print('totaal :', totaal)Hoewel oplossing 2 de meest eenvoudige (en snelste) oplossing is, kun je, indien gewenst, toch de formules gebruiken. Maar dan moet je, om aan de voorwaarde te voldoen dat je alleen de rekenkundige operaties optellen en vermenigvuldigen mag gebruiken, zelf een functie schrijven om de machten van twee te berekenen.
def power_of_two(n):
power = 1
for i in range(n):
power = power * 2
return power
for veld in range(1, 65):
print('veld', veld, ':', power_of_two(veld - 1))
print('totaal :', power_of_two(64) - 1)Hierbij is gebruik gemaakt van het return-statement waarmee je een waarde kan teruggeven vanuit een functie.
Het boek noemt functies met een return-waarde fruitful functions.
Dit wordt in les 2 van week 2 behandeld.