In deze opgave ontwikkelen we een webtoepassing waarmee kinderen kunnen leren hoofdrekenen. De kinderen krijgen een $$4 \times 4$$ rooster met natuurlijke getallen te zien, samen met een bewerking waarvan het resultaat minstens één keer in het rooster terug te vinden is. Ze kunnen punten verdienen door in het rooster te drukken op een cel die het juiste resultaat van de bewerking bevat. Na elke poging krijgen ze het juiste antwoord te zien, en verschijnt er een nieuwe bewerking.
De bewerking gebruikt telkens een binaire operator (+, −, × of ÷) die inwerkt op twee natuurlijke getallen. De kinderen kiezen zelf met welke operatoren ze willen werken, en kunnen ook aangeven wat de maximale waarde is van het resultaat van de bewerkingen. Om de interactiviteit met de kinderen te verhogen, worden ze zelfs aangesproken door een stem die hun prestaties beoordeelt.
We hebben reeds het grootste deel van deze webtoepassing ontwikkeld. De bronbestanden hebben we gebundeld in het ZIP bestand rekenen.zip1. Enkel de JavaScript functies uit het bestand rekenen.hulpfuncties.js2 moeten nog geïmplementeerd worden.
Gevraagd wordt:
Schrijf een functie randomNumber waaraan een natuurlijk getal $$n$$ moet doorgegeven worden. De functie moet een willekeurig natuurlijk getal teruggeven uit het interval $$[0, n]$$.
Schrijf een functie randomNumbers waaraan drie natuurlijke getallen $$n$$, $$a$$ en $$b$$ moeten doorgegeven worden. De functie moet een array met $$n$$ natuurlijke getallen teruggeven uit het interval $$[a, b]$$. De functie heeft ook nog een optionele vierde parameter waaraan een Booleaanse waarde kan doorgegeven worden (standaardwaarde: false). Indien aan deze parameter de waarde true wordt doorgegeven, dan moet alle getallen uit de array verschillend zijn. Indien het onmogelijk is om een array terug te geven, dan moet de functie een RangeError opwerpen met de boodschap interval [a, b] bevat geen n getallen. Hierbij moeten de cursieve fragmenten ingevuld worden met de waarden van de corresponderende argumenten.
Schrijf een functie randomElement waaraan een array moet doorgegeven worden. De functie moet een willekeurig element van de array teruggeven. Indien de gegeven array geen elementen bevat, dan moet de functie een RangeError opwerpen met de boodschap array bevat geen elementen.
Schrijf een functie divisors waaraan een natuurlijk getal $$n$$ moet doorgegeven worden. De functie moet een array teruggeven met alle delers van $$n$$ in oplopende volgorde.
Schrijf een functie multiples waaraan twee natuurlijke getallen $$n$$ en $$m$$ moeten doorgegeven worden. De functie moet een array teruggeven met alle veelvouden van $$n$$ uit het interval $$[n, m]$$ in oplopende volgorde.
Schrijf een functie randomExpression waaraan drie argumenten moeten doorgegeven worden: i) de stringvoorstelling (+, -, * of /) van een binaire JavaScript operator $$\sigma$$, ii) een natuurlijk getal $$n$$ en iii) een natuurlijk getal $$m$$. De functie moet een array teruggeven met twee natuurlijke getallen $$a$$ en $$b$$ uit het interval $$[0, m]$$, waarvoor geldt dat $$a\ \sigma\ b = n$$. Zorg ervoor dat elke mogelijk bewerking die het gegeven resultaat oplevert evenveel kans heeft om door de functie te worden teruggegeven. Indien de gegeven operator geen stringvoorstelling is van één van de vier binaire JavaScript operatoren, dan moet een RangeError opgeworpen worden met de boodschap ongeldige operator.
>>> randomNumber(10)
5
>>> randomNumbers(3, 4, 10, false)
[8, 5, 8]
>>> randomNumbers(3, 4, 10, true)
[6, 5, 9]
>>> randomElement([3, 2, 8])
8
>>> divisors(24)
[1, 2, 3, 4, 6, 8, 12, 24]
>>> divisors(15)
[1, 15]
>>> multiples(4, 25)
[4, 8, 12, 16, 20, 24]
>>> randomExpression('+', 16, 10)
[9, 7]
>>> randomExpression('-', 8, 20)
[12, 4]
>>> randomExpression('*', 15, 8)
[3, 5]
>>> randomExpression('/', 3, 15)
[12, 4]