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 Ontbinden en Sorteren.
De optie Ontspanning leidt op zijn beurt tot het spelmenu, waarin de opties
Terug naar het hoofdmenu, Lingo 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.
Liefhebbers mogen er voor zorgen dat het goed blijft
gaan als de gebruiker bijvoorbeeld
letters in plaats van de gevraagde cijfers ingeeft.
De optie Ontbinden
Aan de gebruiker wordt een geheel getal n gevraagd, kleiner dan
zeg 1000000000.
Vervolgens wordt
dit getal in priemfactoren ontbonden, en de ontbinding wordt netjes
op het beeldscherm afgedrukt.
Een voorbeeld met n gelijk aan 223092870:
1 1 1 1 1 1 1 1 1
2 *3 *5 *7 *11 *13 *17 *19 *23
En met n gelijk aan 15360:
10 1 1
2 *3 *5
Er moeten dus twee regels worden afgedrukt (bijvoorbeeld met behulp
van int arrays), waarbij streng gelet wordt op de
spatiëring.
De optie Sorteren
Aan de gebruiker wordt een geheel getal n gevraagd, kleiner dan
zeg 400.
Vervolgens wordt een willekeurig rijtje
met n getallen gegenereerd: dit
moet oplopend gesorteerd worden.
Gebruik moet worden gemaakt van Bubblesort,
zie dictaat, als volgt aangepast: het algoritme moet stoppen na een ronde
zonder verwisselingen.
Het aantal vergelijkingen en het aantal verwisselingen
benodigd voor het sorteren worden afgedrukt.
Voor het genereren van het rijtje is
een eigengemaakte randomgenerator nodig;
kijk hiervoor in het dictaat.
De optie Lingo
De gebruiker moet een woord raden,
dat de computer in gedachten heeft.
De computer kiest dit "random" uit een
array met een twintigtal woorden.
De lengte van het woord is aan de gebruiker bekend.
De gebruiker raadt maximaal vijf keer een woord,
en de computer laat zien welke letters precies goed staan.
Is het gezochte woord bijvoorbeeld harpo, en
raadt de gebruiker zeppo, dan verschijnt iets
als ---PO.
Was de gok chico, dan wordt iets als -h--O
op het beeldscherm afgedrukt: de h is wel goed, maar
staat op een verkeerde plaats.
Antwoorden van voorgaande gokken hoeven niet onthouden te
worden - het mag wel.
Bij een gok als ppppp
is het resultaat ---P-.
De woorden -die van verschillende lengte zijn, maximaal vijftien letters
per woord- zitten dus in een array met bijvoorbeeld
twintig (een const int)
woorden. Gebruik de randomgenerator om schijnbaar
willekeurige woorden uit dit array te halen.
Als het programma begint moeten de woorden uit een file gelezen worden
en in het array gestopt.
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.
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 3 maart 2003, 17.00 uur.
In te leveren: schijfje met het programma,
of het programma per email aan
kosters@liacs.nl sturen.
Stuur geen executable's per email!
Verder ook een listing/afdruk op papier
in de speciaal daarvoor bestemde doos "Inleiding Programmeren voor
LS&Ters" in
de metalen boekenkast in computerzaal 301.
Gaarne een envelop om het geheel heen doen.
Overal datum en namen van de makers 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.
3 februari 2003 - http://www.liacs.nl/home/kosters/lst/lst03op2.html