Hints Het Menu
De
tweede programmeeropgeve
van het vak
Inleiding programmeren (C++) - Life Science & Technology
heet Het Menu.
De opgave
bestaat uit de menu-opties (in feite
Ontbinden, Sorteren, Lingo en Klok)
en uit het eigenlijke menu-programma.
Het schrijven van het programma
kan dan ook netjes in een vijftal taken verdeeld worden.
Zo kan in eerste instantie een menu gemaakt worden waarbij de
keuze Klok leidt tot een regeltje op het scherm ("hier moet
de tijd nog komen"). In het programma is dat een functie-aanroep
Klok, waarbij de functie-body uit een cout << ... en wellicht een
cin >> ... bestaat. Deze functie kan dan apart uitgewerkt worden,
zelfs als een apart programma, en in een later stadium (als de
tijd goed werkt) in het menu-programma gezet worden.
Als de opgave door twee personen gemaakt wordt kan hier
verstandig worden samengewerkt.
In de nu volgende opmerkingen wordt stap voor stap toegewerkt naar
het beoogde eindresultaat. De volgorde ligt helemaal niet vast:
zo kun je bijvoorbeeld eerst ook de optie Klok maken.
-
Maak een menu-programma dat aan de gebruiker drie opties
presenteert: E(xperiment),
O(ntspanning) en S(toppen). Bij E en O komt alleen een tekstje op
het scherm, en de vraag om een Enter, bij S stopt het
programma. Gebruik eventueel een switch.
Alsjeblieft geen recursie, maar doe het met while-loops!
Maak de keuze-opties locale variabelen.
-
Idem, maar nu leidt E tot een nieuw menu, met opties S(orteren),
O(ntbinden)
en T(erug), waarbij T terug voert naar het hoofdmenu. S en O
leveren weer alleen een tekstje, terwijl je in hetzelfde
submenu blijft.
-
De optie Ontbinden - uiteraard in een functie.
Vraag aan de gebruiker om een getal.
Loop alle kandidaat-delers af, en als je een deler hebt - deel deze er
zo vaak mogelijk uit. Dus voor 63: 2 is geen deler,
3 wel, en die past er twee keer in, resteert 7;
4 is geen deler, 5 niet, 6 niet, 7 wel: past er een keer 1,
resteert 1, klaar.
Druk de juiste getallen af, voorlopig nog op
één regel. In het voorbeeld: 3-2, 7-1.
-
Sla deze getallen nu in 2 arrays op. In ons voorbeeld
zitten in het ene array 3 en 7, in het andere 2 en 1.
Druk een voor een de arrays af.
- Let op de juiste spatiering.
-
Maak een random-generator.
Gebruik de in het dictaat in Hoofdstuk 3.5.3 gesuggereerde methode.
Vul hiermee een array.
-
Maak de optie Sorteren.
Schrijf hiertoe een functie Bubblesort -
zie het dictaat, Hoofdstuk 3.8.4.
Pas de functie zo aan dat als in de binnenste for-loop
geen verwisselingen plaatsvonden, het algoritme stopt.
Bedenk een eenvoudige manier
om de resultaten te presenteren, ook als het array wat groot is.
-
Nu de optie Lingo.
Lees de te raden woorden uit een file.
Gebruik de random-generator om een "willekeurig" woord
hieruit te selecteren.
-
Schrijf een functie die gegeven twee woorden
(het juiste en de gok) het "lingo-resultaat" afdrukt.
-
Maak de optie af.
-
Druk de tijd gewoon (digitaal, in cijfers dus) af.
Het volgende stukje code geeft hopelijk aanwijzingen.
Probeer het niet allemaal te begrijpen, maar kopieer
de benodigde gedeeltes.
tm* pointer; // pointer naar struct tm
// (een struct lijkt op een class)
time_t t = time (NULL); // seconden sinds ...
pointer = localtime (&t); // omzetten naar een struct
// nu bevat pointer->tm_sec de tijd in seconden, etcetera:
cout << pointer->tm_sec << endl;
// zie verder time.h (voor uren, minuten, dag,...)
Waar zit de file time.h?
Meestal in een include-directory.
-
Maak de optie Klok af.
Rond nu de tweede programmeeropgave af.
Vragen en/of opmerkingen kunnen worden gestuurd
naar: kosters@liacs.nl.
30 januari 2003 - http://www.liacs.nl/home/kosters/lst/hints03op2.html