Inleiding programmeren in C++ voor LS&Ters 2004
Tweede programmeeropgave — Het Menu

De tweede programmeeropgave van het vak Inleiding programmeren in C++ voor LS&Ters in het voorjaar van 2004 heet Het Menu. Zie ook de (werk)colleges en de hints!

Het is de bedoeling om een C++-programma te maken dat aan de gebruiker een zogeheten menu presenteert. Dat betekent dat de gebruiker van het programma kan kiezen uit een aantal mogelijkheden, de opties. Het (hoofd)menu heeft drie opties: Stoppen, Experiment en Ontspanning. De opties worden gekozen door de eerste letter van de betreffende optie in te toetsen, bijvoorbeeld een s of S om te stoppen, gevolgd door de Enter-toets. Uiteraard wordt een en ander duidelijk en ondubbelzinnig aan de gebruiker meegedeeld. De optie Experiment leidt tot een nieuw menu. Dit menu heeft op zich weer een aantal opties: allereerst de optie Terug naar het hoofdmenu, en verder de opties Elf en Sorteren. De optie Ontspanning leidt op zijn beurt tot het spelmenu, waarin de opties Terug naar het hoofdmenu, Mastermind en Klok aanwezig zijn.
De door de gebruiker ingetoetste symbolen moeten gecontroleerd worden, dat wil zeggen dat er binnen redelijke grenzen geen foute invoer geaccepteerd wordt. Zo zal het intoetsen van bijvoorbeeld q of & in het hoofdmenu een waarschuwing opleveren, of genegeerd worden. Er mag wel worden aangenomen dat de gebruiker op de juiste momenten de Enter-toets bedient.
Bonus: liefhebbers mogen er voor zorgen dat het goed blijft gaan als de gebruiker bijvoorbeeld letters in plaats van de gevraagde cijfers ingeeft bij de optie Elf.

De optie Elf
De gebruiker mag drie positieve gehele getallen invoeren, waarvan de laatste de som van de twee eerste zou moeten zijn. De getallen zijn hooguit zeg 1000000. Dit wordt gecontroleerd met de zogeheten elf-proef. Daartoe berekenen we van ieder voorkomend getal g de alternerende som Elf(g) van de cijfers, voor bijvoorbeeld 42045 levert dat 5-4+0-2+4=3 op. Als de som, zeg a+b=c, klopt, moet gelden dat Elf(c)-Elf(a)-Elf(b) door 11 deelbaar is. Het programma moet dit controleren en een geschikte mededeling geven. Druk ook de tussenresultaten op het scherm af.

De optie Sorteren
Aan de gebruiker wordt een geheel getal n gevraagd, kleiner dan zeg 400. Vervolgens wordt een willekeurig rijtje (array) met n getallen uit de verzameling {0,1,2,3,4,5,6,7,8,9} gegenereerd: dit moet oplopend gesorteerd worden. Dit gaat als volgt: maak een array aantal[10] waarin je voor iedere i uit {0,1,2,3,4,5,6,7,8,9} telt hoevaak i voorkomt, en vervolgens vul je het dan gesorteerde array: bijvoorbeeld eerst 30 nullen, dan 17 enen, etcetera.
Voor het genereren van het rijtje is een eigengemaakte randomgenerator nodig; kijk hiervoor in het dictaat, Hoofdstuk 3.5.3.

De optie Mastermind
De gebruiker moet een geordende serie van x (standaard 4) getallen uit een bereik van 1...y (standaard 6) raden, die de computer "in gedachten" heeft. De gebruiker kiest x en y (beide hooguit 20). Een zelfde getal kan in een serie meerdere keren voorkomen. De gebruiker raadt een maximaal aantal keren een rij van x cijfers; als de serie geraden is wordt de speler gefeliciteerd. Voor elke rij berekent de computer hoeveel cijfers precies goed staan, en hoeveel wel goed zijn maar op de verkeerde plaats staan. Deze twee aantallen worden aan de speler getoond.
Gebruik de randomgenerator (zie optie hierboven) om de beginopstelling te fabriceren. Bonus: genereer een geschikte gok als hulp voor de gebruiker.

De optie Klok
Afgedrukt wordt de huidige tijd, en wel als uur-minuut-seconde-dag-maand-jaar, waarbij dag zondag/maandag/... plus het dagnummer ("vrijdag 15") is. Gebruik time.h of ctime, zie Ammeraal Hoofdstuk 11.9. Daarna wordt de boodschap van de dag afgedrukt. Deze staat in een aparte mee te leveren file, geheten dag.txt , waarin twee boodschappen staan: een voor het weekend, en voor een weekdag. Bedenk zelf een geschikt formaat, bijvoorbeeld één regel per boodschap, en leg dit in het commentaar ook duidelijk uit.

Opmerkingen
Gebruik geschikte functies. Om het gebruik van functies goed te oefenen mogen bij deze opgave bij elke functie tussen begin-{ en eind-} hooguit circa 20 niet al te volle regels staan! Elke functie dient van commentaar voorzien te zijn. Let op goed parametergebruik: alle parameters in de heading doorgeven, en de variabele-declaraties bij het begin van main en andere functies. De enige te gebruiken headerfiles zijn: iostream, fstream en ctime. Zeer ruwe indicatie voor de lengte van het C++-programma: 400 regels. Denk aan het infoblokje.
Uiterste inleverdatum: maandag 1 maart 2004, 17.00 uur. Wijze van inleveren:

  1. Stuur het programma (alleen de .cpp file) per email aan kosters@liacs.nl. Stuur geen executable's per email!
  2. Verder ook een listing/afdruk op papier, af te geven op het (werk)college. Gaarne een envelop om het geheel heen doen.
Overal datum en namen van de maker(s) vermelden.
Te gebruiken compiler: als het maar C++ is; het programma moet in principe onder Visual C++ draaien. Normering: layout 1; commentaar 2; modulariteit 3; werking 4. Eventuele aanvullingen en verbeteringen: lees deze WWW-bladzijde.


Vragen en/of opmerkingen kunnen worden gestuurd naar: kosters@liacs.nl.

30 januari 2004 - http://www.liacs.nl/home/kosters/lst/lst04op2.html