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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Let op de juiste spatiering.
  6. Maak een random-generator. Gebruik de in het dictaat in Hoofdstuk 3.5.3 gesuggereerde methode. Vul hiermee een array.
  7. 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.
  8. Nu de optie Lingo. Lees de te raden woorden uit een file. Gebruik de random-generator om een "willekeurig" woord hieruit te selecteren.
  9. Schrijf een functie die gegeven twee woorden (het juiste en de gok) het "lingo-resultaat" afdrukt.
  10. Maak de optie af.
  11. 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.
  12. 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