Inleiding programmeren in C++ voor LS&Ters 2003
Eerste programmeeropgave - Automaat

De eerste programmeeropgave van het vak Inleiding programmeren in C++ voor LS&Ters in het voorjaar van 2003 heet Automaat. Zie ook de werkcolleges.
Een automaat levert koffie, thee en soep. Er kan eventueel melk en/of suiker bij worden gedaan - niet in de soep uiteraard. Verder kan er al of niet een eigen beker gebruikt worden. Het programma moet uitrekenen wat een en ander tezamen kost.

Elk programma moet aan het begin op het beeldscherm laten zien wie de makers zijn, wat hun jaar van aankomst is, welke opgave het is, wat de gebruiker te wachten en te doen staat, de datum waarop het programma gemaakt is, enzovoorts. Dit noemen we het "infoblokje". Probeer dit er een beetje aardig uit te laten zien: maak er een kader omheen of iets dergelijks.

Schrijf een C++-programma dat aan de gebruiker vraagt welk product hij/zij wil hebben, of er (als het geen soep is) melk en/of suiker in moet, en of er een beker bij moet. Dit zijn ja/nee keuzes (bijvoorbeeld bij melk), of iets ingewikkelder mogelijkheden (voor Koffie/Thee/Soep: geef de beginletter; keur zowel kleine letters als hoofdletters goed). Vervolgens wordt het verschuldigde bedrag in eurocenten afgedrukt. Dit wordt als volgt berekend: in het programma zijn de prijzen in hele centen (bijvoorbeeld bedragen als 37 cent voor koffie) opgenomen. Voor suiker wordt een klein bedrag gerekend, evenzo voor melk. Personen die een eigen beker hebben krijgen weer een klein bedrag in mindering gebracht. De uiteindelijke som in centen wordt op de gebruikelijke wijze op een vijfvoud afgerond. Alle bedragen worden getoond, ook die voor het afronden: als bijvoorbeeld het totaal exact 63 cent kost, moeten zowel 63 als 65 cent worden afgedrukt. Zorg ervoor dat de gekozen bedragen voor de producten zo zijn dat de verschillende mogelijke afrondingen goed gedemonstreerd worden.

Koffie mag alleen geschonken worden aan personen van 16 jaar en ouder. Bij de keuze koffie wordt er dan ook om de geboortedatum gevraagd in de vorm eerst de dag, dan de maand, en tot slot het jaar - alle drie als losse getallen. In het programma zit een vaste datum, bijvoorbeeld 30-01-1987, op grond waarvan de beslissing genomen wordt. Interpreteer hierbij rare data (zoals 29-02-1957) als "te jong" (hoe meer foute gevallen worden opgevangen, des te beter).
Liefhebbers: haal met ctime de huidige datum op en gebruik die.

Tot slot krijgen werknemers maar liefst 50 procent korting: het exacte bedrag in centen wordt gehalveerd en zonodig naar boven afgerond, waarna weer naar een vijfvoud wordt toegerekend; ook deze bedragen worden weer alle afgedrukt. Om te controleren of iemand een werknemer is wordt een controlegetal gevraagd. Dit is een double, bijvoorbeeld 3.14159, waar men maximaal 0.005 naast mag zitten. Is het ingevoerde getal goed, dan wordt de korting gegeven; is het echter fout, dat krijgt de gebruiker op het eind 5 eurocent boete, en natuurlijk ook geen korting. Dit laatste gebeurt alleen als iemand claimt een werknemer te zijn, maar het controlegetal niet weet.

We nemen aan dat de gebruiker zo vriendelijk is verder geen fouten te maken bij het invoeren van gegevens. Hij/zij voert cijfers of letters in als het moet, etcetera. Maar soms zijn het wel verkeerde letters. Bij het controlegetal maximaal vijf cijfers achter de decimale punt. Vanzelfsprekend worden hem/haar wel duidelijke vragen gepresenteerd.

In het dictaat, Hoofdstuk 3.5 op pagina 10/11, staat informatie over het werken met getallen. Denk aan het gebruik van lege regels, commentaar, constanten, enzovoorts. Bovenaan het programma dient ook commentaar over het programma te staan, speciaal bestemd voor andere programmeurs, bijvoorbeeld welke compiler gebruikt is: gebruikers van het programma vinden dat niet interessant. Het infoblokje moet tijdens het "runnen" van het programma op het scherm komen, en is bestemd voor gebruikers van het programma. Er hoeft geen gebruik van functies, arrays, en while en for-statements gemaakt te worden. Alleen de headerfiles iostream en iomanip mogen/moeten gebruikt worden. Ruwe indicatie voor de lengte van het C++-programma: ruim 100 regels. De opgave mag individueel of met twee personen gemaakt worden, maar niet in drie- of meertallen.

Uiterste inleverdatum: maandag 3 februari 2003, 9.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. Een en ander afgeven op het college of 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++ 6.0 draaien. Normering: (consequente) layout 2; commentaar 2; infoblokje 2; werking 4. Eventuele aanvullingen en verbeteringen: lees deze WWW-bladzijde.


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

15 januari 2003 - http://www.liacs.nl/home/kosters/lst/lst03op1.html