oefening JavaScript - antwoorden De antwoorden op deze opgaven zijn meestal wat aan de brede kant voor een Word document. Het is daarom handig om ze in Notepad++ te kopiëren en ze dan te bekijken. opgave 1: Hoger Lager 1 alert("we gaan het spel hoger-lager spelen."); alert("ik kies een getal tussen de 1 en 100.\nJa, de grenzen doen ook mee!"); alert("jij moet raden welk getal ik gekozen heb."); alert("als je het fout hebt, dan zeg ik of mijn getal hoger of lager is dan wat je geraden hebt."); var gekozengetal = Math.floor(Math.random() * 100) + 1; var usergetal = Number(prompt("Welk getal heb ik gekozen?")); var aantalpogingen = 1; // Zolang het getal niet geraden is, moet de gebruiker doorgaan // met raden. while (gekozengetal!= usergetal) if (usergetal < gekozengetal) // Te laag getal geraden. alert("mijn getal is hoger dan " + usergetal + "."); // Te hoog getal geraden. alert("mijn getal is lager dan " + usergetal + "."); aantalpogingen++; usergetal = prompt("welk getal heb ik gekozen?"); alert("juist, het getal is inderdaad " + gekozengetal + "."); alert("je hebt " + aantalpogingen + " pogingen gedaan."); Dit programma is iets anders dan het in de module staat. Je ziet hier dat we geen gebruik maken van een extra variabele met het type Boolean, maar dat we de invoer van de gebruiker onmiddellijk vergelijken met het gegenereerde getal. Hierdoor heb je minder regels code, maar heb je wel twee keer dezelfde instructie met de prompt functie in je code. - 1 -
opgave 2: Hoger Lager 2 Het volgende programma voldoet strikt genomen aan de eisen, maar is niet de bedoeling. Je zult snappen dat het programma ook iets met de feedback moet doen, anders wordt testen bijzonder lastig. alert("we gaan het spel hoger-lager spelen."); alert("jij kiest een getal tussen de 1 en 100.\nJa, de grenzen doen ook mee!"); alert("ik moet raden welk getal jij gekozen heb."); alert("als ik het fout hebt, dan zeg jij of jouw getal hoger of lager is dan wat ik geraden hebt."); var usergetal = Number(prompt("Welk getal heb je gekozen?")); var geradengetal = Math.floor(Math.random() * 100) + 1; alert("volgens mij heb je " + geradengetal + " gekozen."); var feedback = prompt("geef me feedback over mijn poging.\ngeldige feedback is: geraden, hoger of lager."); // Zolang het getal niet geraden is, moet de computer doorgaan // met raden. while (feedback.tolowercase()!= "geraden") geradengetal = Math.floor(Math.random() * 100) + 1; alert("volgens mij heb je " + geradengetal + " gekozen."); feedback = prompt("geef me feedback over mijn poging.\ngeldige feedback is: geraden, hoger of lager."); alert("juist, het getal is inderdaad " + usergetal + "."); - 2 -
Een beter programma is het volgende. alert("we gaan het spel hoger-lager spelen."); alert("jij kiest een getal tussen de 1 en 100.\nJa, de grenzen doen ook mee!"); alert("ik moet raden welk getal jij gekozen heb."); alert("als ik het fout hebt, dan zeg jij of jouw getal hoger of lager is dan wat ik geraden hebt."); // Definieer de grenzen waartussen geraden moet worden. // In het begin zijn dat 1 en 100, maar ze veranderen natuurlijk. var ondergrens = 1; var bovengrens = 100; var usergetal = Number(prompt("Welk getal heb je gekozen?")); // We gaan afgerond midden tussen de onder- en bovengrens zitten. var geradengetal = 51; alert("volgens mij heb je " + geradengetal + " gekozen."); var feedback = prompt("geef me feedback over mijn poging.\ngeldige feedback is: geraden, hoger of lager.").tolowercase(); // Zolang het getal niet geraden is, moet de computer doorgaan // met raden. while (feedback!= "geraden") if (feedback === "hoger") // Te laag getal geraden. ondergrens = geradengetal; // Te laag, pas ondergrens aan. // Te hoog getal geraden. bovengrens = geradengetal; // Te hoog, pas bovengrens aan. geradengetal = Math.round((onderGrens + bovengrens) / 2); alert("volgens mij heb je " + geradengetal + " gekozen."); feedback = prompt("geef me feedback over mijn poging.\ngeldige feedback is: geraden, hoger of lager.").tolowercase(); alert("juist, het getal is inderdaad " + usergetal + "."); Ook hier zie je weer, dat een aantal instructies twee keer exact hetzelfde in de voorkomen. Op zich mag het hier, omdat het er maar 2 zijn, maar doorgaans probeer je het te vermijden. - 3 -
opgave 3: Steen, Papier, Schaar 1 De regels zijn Schaar knipt Papier, Papier omwikkelt Steen en Steen breekt Schaar. alert("we gaan Steen, Papier, Schaar spelen."); // we gebruiken de volgende codering: // steen = 0, papier = 1, schaar = 2 var keuzearray = ["steen", "papier", "schaar"]; alert("voer steen, papier of schaar in."); var userkeuze = prompt("maak je keuze.").tolowercase(); // Computer keuze. var compgetal = Math.floor(Math.random() * 3); var compkeuze = keuzearray[compgetal]; alert("de computer heeft " + compkeuze + " gekozen."); if (userkeuze === compkeuze) alert("gelijkspel."); // Kijk of de speler wint. We gebruiken hiervoor een // hulpvariabele om de conditie overzichtelijk te houden. usergewonnen = (userkeuze === "steen" && compkeuze === "schaar") (userkeuze === "papier" && compkeuze === "steen") (userkeuze === "schaar" && compkeuze === "papier"); if (usergewonnen) alert("jij wint, proficiat!"); alert("ik win, helaas."); Je ziet hier weer logische bewerkingen gebruikt zoals de AND (&&) en OR ( ). Natuurlijk zijn er veel meer mogelijkheden dan de bovenstaande oplossing. Je kunt de gebruiker ook 0, 1 of 2 in laten voeren en dan vergelijkingen doen op basis van getallen. Dit is echter makkelijker te lezen. - 4 -
opgave 4: Steen, Papier, Schaar 2 alert("we gaan Steen, Papier, Schaar spelen."); // we gebruiken de volgende codering: // steen = 0, papier = 1, schaar = 2 var keuzearray = ["steen", "papier", "schaar"]; // Houd de score bij. var userscore = 0; var compscore = 0; // De computer score. while (userscore < 3 && compscore < 3) alert("voer steen, papier of schaar in."); var userkeuze = prompt("maak je keuze.").tolowercase(); // Computer keuze. var compgetal = Math.floor(Math.random() * 3); var compkeuze = keuzearray[compgetal]; alert("de computer heeft " + compkeuze + " gekozen."); if (userkeuze === compkeuze) alert("gelijkspel."); // Kijk of de speler wint. We gebruiken hiervoor een // hulpvariabele om de conditie overzichtelijk te houden. var usergewonnen = (userkeuze === "steen" && compkeuze === "schaar") (userkeuze === "papier" && compkeuze === "steen") (userkeuze === "schaar" && compkeuze === "papier"); if (usergewonnen) alert("jij wint deze ronde."); userscore++; alert("ik win deze ronde."); compscore++; alert("stand: jij " + userscore + " : ik " + compscore); - 5 -
if (userscore === 3) alert("jij wint de match, proficiat!"); alert("ik win de match, helaas."); - 6 -
opgave 5: palindroom var woord = prompt("voer een woord in, dan kijk ik of het een palindroom is."); if (woord.length > 1) // We weten nog niet dat het geen palindroom is. var ispalindroom = true; // We willen de gebruikersinvoer bewaren, maar moeten het // ingevoerde woord wel kunnen bewerken, dus maak een // tijdelijke variabele. Is ook handig om naar kleine letters // om te zetten. var tempwoord = woord.tolowercase(); while ((tempwoord.length > 1) && ispalindroom) var eersteletter = tempwoord.charat(0); var laatsteletter = tempwoord.charat(tempwoord.length - 1); if (eersteletter === laatsteletter) // Het kan nog steeds een palindroom zijn. // Haal de zojuist bekeken letters weg. tempwoord = tempwoord.substr(1, tempwoord.length - 2) // Het is geen palindroom, dus we kunnen stoppen. ispalindroom = false; // Een woord van 1 letter is altijd een palindroom. document.write("het woord ", woord, " is een palindroom.<br>"); if (ispalindroom === true) document.write("het woord ", woord, " is een palindroom.<br>"); document.write("het woord ", woord, " is geen palindroom.<br>"); - 7 -
opgave 6: letters tellen var woord = prompt("voer een woord in, dan tel ik de letters."); // We willen de gebruikersinvoer bewaren, maar moeten het // ingevoerde woord wel kunnen bewerken, dus maak een // tijdelijke variabele. Is ook handig om naar kleine letters // om te zetten. var tempwoord = woord.tolowercase(); // Maak array met alle letters, zodat je erin kunt tellen. // Zet de a in 0, b in 1 enzovoorts. var letterarray = []; // Vul het array met nullen m.b.v. de push functie. var index = 0; while (index < 26) letterarray.push(0); index++; while (tempwoord.length > 0) var eersteletter = tempwoord.charcodeat(0); // Bepaal index door er de ASCII waarde van a eraf te halen. index = eersteletter - "a".charcodeat(0); letterarray[index]++; // Haal de zojuist bekeken letter weg. tempwoord = tempwoord.substr(1, tempwoord.length - 1) // Druk het resultaat af. Laat alleen letters zien die niet 0 keer // voorkomen. index = 0; while (index < letterarray.length) if (letterarray[index]!= 0) var letter = String.fromCharCode(index + "a".charcodeat(0)); document.write(letter, " komt ", letterarray[index], " keer voor in ", woord, ".<BR>"); index++; - 8 -