Inleiding programmeren in C++ voor LS&Ters 2004
Eerste programmeeropgave - Treinkaartjes

De eerste programmeeropgave van het vak Inleiding programmeren in C++ voor LS&Ters in het voorjaar van 2004 heet Treinkaartjes. Zie ook de werkcolleges!
Er moet een C++-programma geschreven worden dat de prijs van een door de gebruiker gewenst treinkaartje uitrekent. Jongeren (tot en met 17 jaar) krijgen korting.

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.

Allereerst moet de gebruiker zijn/haar geboortejaar als geheel getal invoeren, en daarna de geboortemaand, ook als geheel getal, Vervolgens voert hij/zij de geboortedag in, wederom als geheel getal. Het programma berekent dan de leeftijd van de gebruiker en drukt deze af op het beeldscherm. Aangenomen mag worden dat het programma op 2 februari 2004 draait (gebruik const; liefhebbers mogen met ctime de echte huidige dag opvragen en gebruiken). Vervolgens wordt aan jongeren twee maal een controlevraag gesteld. De eerste vraag is een meerkeuzevraag (A/B/C/D; gebruik een char), de tweede vraagt om een reëel getal (een double; bijvoorbeeld: "Wat is π?"). De meerkeuzevraag moet exact goed beantwoord worden, het reële getal mag er maximaal "epsilon" (een const, bijvoorbeeld 0.4) naast zitten. Is minstens een der vragen fout beantwoord, dan wordt het kaartje € 5 duurder, en wordt er uiteraard geen korting gegeven; zijn beide vragen goed, dan ben je een "echte" jongere.
Dan wordt de afstand in kilometers d naar het reisdoel gevraagd — een geheel getal. De kosten van het treinkaartje in euro's zijn d2 / 314,159, met een minimum van € 2,50. Vervolgens krijgen echte jongeren 15% korting, en wordt het resultaat met 2 decimalen na de komma (de eurocenten) afgedrukt; hierbij wordt op de gebruikelijke wijze afgerond. (Tip: werk in gehele centen, en gebruik % 100 en / 100.) Tot slot wordt ook nog het op veelvouden van 5 cent afgeronde bedrag afgedrukt. (Tip: gebruik % 5.) Er mag geen gebruik gemaakt worden van setprecision en dergelijke uit iomanip. Bij afstanden kleiner dan of gelijk aan 0, en afstanden groter dan 400 kilometer krijgt de gebruiker nog één keer de kans een goede afstand in te vullen; gaat het dan weer fout, dan stopt het programma met een adequate melding.

Als de gebruiker een niet bestaande maand invoert, bijvoorbeeld -8, of een jaartal als 4242 (in de toekomst dus), stopt het programma met de mededeling dat dit niet kan. Evenzo voor een niet bestaande dag, bijvoorbeeld 31 april of 42 december. Denk ook aan schrikkeljaren (1900 was geen schrikkeljaar)! De maximum leeftijd is 150 jaar. We nemen aan dat de gebruiker zo vriendelijk is verder geen fouten te maken bij het invoeren van gegevens: hij/zij voert getallen of letters in als het moet, etcetera. Vanzelfsprekend worden hem/haar wel duidelijke vragen gepresenteerd.

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 het while-statement gemaakt te worden. Alleen de headerfile iostream mag gebruikt worden. Ruwe indicatie voor de lengte van het C++-programma: 200 regels. De opgave mag individueel of met twee personen gemaakt worden, maar niet in drie- of meertallen.

Uiterste inleverdatum: maandag 2 februari 2003, 11.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 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++ 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.

14 januari 2004 - http://www.liacs.nl/home/kosters/lst/lst04op1.html