opdrachten algoritmiek - antwoorden Dit zijn de voorbeelduitwerkingen behorende bij de oefeningen algoritmiek. Er zijn altijd veel mogelijke manieren om hetzelfde probleem op te lossen. De voorbeelduitwerking is er daar dus maar één van. De uitwerkingen zijn in RobotBASIC. Als je voor JavaScript hebt gekozen, dan wordt ervan uitgegaan dat je vanuit RobotBASIC kunt controleren dat je JavaScript programma goed is. - 1 -
Inhoud makkelijke opgaves... - 3 - opgave 1... - 3 - opgave 2... - 3 - opgave 3... - 3 - opgave 4... - 4 - opgave 5... - 4 - opgave 6... - 4 - gemiddeld moeilijke opgaves... - 5 - opgave 1... - 5 - opgave 2... - 5 - opgave 3... - 6 - moeilijke opgaves... - 7 - opgave 1... - 7 - opgave 2... - 8 - opgave 3... - 9 - - 2 -
makkelijke opgaves opgave 1 Maak een algoritme dat twee gehele getallen door een gebruiker in laat voeren en de som van deze getallen afdrukt. input "Geef een geheel getal: ", getal1 input "Geef een geheel getal: ", getal2 print getal1 + getal2 opgave 2 Maak een algoritme dat het maximum van twee, door een gebruiker ingevoerde, gehele getallen afdrukt. input "Geef een geheel getal: ", getal1 input "Geef een geheel getal: ", getal2 if getal1 > getal2 print getal1 print getal2 opgave 3 Maak een algoritme waarmee je afdrukt of een, door een gebruiker ingevoerd, jaartal een schrikkeljaar is. input "Geef een jaartal: ", jaartal if mod(jaartal, 4) = 0 if mod(jaartal, 100) = 0 if mod(jaartal, 400) = 0 print jaartal, " is een schrikkeljaar." print jaartal, " is geen schrikkeljaar." print jaartal, " is een schrikkeljaar." print jaartal, " is geen schrikkeljaar." - 3 -
opgave 4 Maak een programma dat de getallen 1 tot en met 10 afdrukt. Elk getal druk je af op een nieuwe regel. Je moet hiervoor een lus gebruiken. teller = 1 while teller <= 10 opgave 5 Maak een algoritme waarmee je afdrukt of een, door een gebruiker ingevoerd, positief geheel getal even of oneven is. input "Geef een positief geheel getal: ", getal if mod(getal, 2) = 0 print getal, " is even." print getal, " is oneven." opgave 6 Maak een algoritme waarmee je een, door een gebruiker ingevoerd, geldbedrag in euro's (EUR) omrekent naar USD en omgekeerd. Voor de wisselkoers gebruik je dat 1 EUR is gelijk aan 1.32 USD. input "Geef een geldbedrag: ", bedrag input "Geef een munteenheid (EUR of USD): ", munteenheid if munteenheid = "EUR" print "Het bedrag in USD is ", bedrag * 1.32 print "Het bedrag in EUR is ", bedrag / 1.32-4 -
gemiddeld moeilijke opgaves opgave 1 Maak een programma dat de tafel van 5 afdrukt. Het formaat waarin afgedrukt moet worden is: x keer 5 is y. Elke vermenigvuldiging druk je af op een nieuwe regel. Je moet hiervoor een lus gebruiken. teller = 1 while teller <= 10, " keer 5 is ", teller*5 opgave 2 Maak een programma dat het resultaat afdrukt van de somformule van Gauss voor een, door een gebruiker ingevoerd, geheel getal. Bijvoorbeeld de Gauss som van 5 is 1 + 2 + 3 + 4 + 5 is 15. input "Geef een geheel getal: ", N resultaat = 0 teller = 1 while teller <= N resultaat = resultaat + teller print "Gauss(", N, ") = ", resultaat - 5 -
opgave 3 Maak een programma dat de eerste N getallen uit de Fibonacci reeks afdrukt. N is een, door een gebruiker ingevoerd, positief geheel getal groter dan 2. De eerste twee getallen uit de Fibonacci reeks zijn 0 en 1. Elk volgend getal is de som van de twee voorgaande getallen. Bijvoorbeeld de eerste 6 getallen uit de Fibonacci reeks zijn 0, 1, 1, 2, 3, 5. input "Geef een geheel getal groter dan 2: ", N F_Nmin2 = 0 F_Nmin1 = 1 print "F_0 = 0" print "F_1 = 1" teller = 2 while teller < N F_N = F_Nmin1 + F_Nmin2 print "F_", teller, " = ", F_N F_Nmin2 = F_Nmin1 F_Nmin1 = F_N - 6 -
moeilijke opgaves opgave 1 Maak een programma dat de priemfactoren van een, door een gebruiker ingevoerd, geheel getal afdrukt. Een priemgetal P is een priemfactor van een getal G wanneer G % P gelijk is aan 0. % is de modulo operator die de restwaarde van een deling berekent. input "Geef een geheel getal: ", N if N > 1 rest = N print "De priemfactoren van ", N, " zijn:" teller = 2 while teller <= rest if mod(rest, teller) = 0 rest = rest / teller if N = 1 print "De priemfactoren van 1 zijn:" print 1 print "Dit is geen geldige invoer." - 7 -
opgave 2 Maak een algoritme dat de schrikkeljaren afdrukt vanaf 1582 tot en met een, door een gebruiker ingevoerd, jaartal. Druk elk schrikkeljaar af op een nieuwe regel. input "Geef een jaartal: ", jaartal print "De schrikkeljaren vanaf 1582 tot en met ", jaartal, " zijn:" teller = 1582 while teller <= jaartal if mod(teller, 4) = 0 if mod(teller, 100) = 0 if mod(teller, 400) = 0 Het hiervoor afgebeelde algoritme is rechtdoorzee en daarom niet echt efficiënt. Een efficiënter algoritme kan er als volgt uitzien. input "Geef een jaartal: ", jaartal print "De schrikkeljaren vanaf 1582 tot en met ", jaartal, " zijn:" teller = 1582 while (teller <= jaartal) && (mod(teller, 4)!= 0) while teller <= jaartal if mod(teller, 4) = 0 if mod(teller, 100) = 0 if mod(teller, 400) = 0 teller = teller + 4-8 -
opgave 3 Maak een algoritme dat de eerste N priemgetallen afdrukt. N is een, door een gebruiker ingevoerd, positief geheel getal groter dan 2. Nog even ter herhaling, een priemgetal is een getal groter dan 1 dat alleen deelbaar is door zichzelf en 1. input "Geef een geheel getal groter dan 2: ", N print "De eerste ", N, " priemgetallen zijn:" aantalgetallenafgedrukt = 0 priemtestgetal = 2 while aantalgetallenafgedrukt < N teller = 2 aantaldelers = 0 while teller < priemtestgetal if mod(priemtestgetal, teller) = 0 aantaldelers++ if aantaldelers = 0 print priemtestgetal aantalgetallenafgedrukt++ priemtestgetal++ Net als bij de priemtest in de module algoritmiek, kan dit efficiënter door de conditie van de binnenste while-loop uit te breiden. - 9 -
input "Geef een geheel getal groter dan 2: ", N print "De eerste ", N, " priemgetallen zijn:" aantalgetallenafgedrukt = 0 priemtestgetal = 2 while aantalgetallenafgedrukt < N teller = 2 aantaldelers = 0 while (teller < priemtestgetal) && (aantaldelers = 0) if mod(priemtestgetal, teller) = 0 aantaldelers++ if aantaldelers = 0 print priemtestgetal aantalgetallenafgedrukt++ priemtestgetal++ - 10 -