Programmeermethoden 2010
Eerste programmeeropgave: Toelating

De eerste programmeeropgave van het vak Programmeermethoden in het najaar van 2010 heet Toelating; zie ook het eerste, tweede en derde werkcollege.
Spreek/Vragenuur in zalen 302 ... 309: dinsdag 7, woensdag 8, donderdag 9, dinsdag 14, woensdag 15, donderdag 16, dinsdag 21, woensdag 22, donderdag 23 en vrijdag 24 september 2010, van circa 15.30 tot 17.00 uur.

Het is de bedoeling om een C++-programma te schrijven dat de toelating tot een exacte studie aan de universiteit toetst. Allereerst moet het programma iemands geboortedag en leeftijd bepalen. Daarna worden enkele vragen gesteld om te kijken of de kandidaat aan de eisen voldoet.

De opgave

Om te beginnen moet de bezoeker 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, zowel in aantal jaren als in maanden (bijvoorbeeld: 10 jaar en 3 maanden; 123 maanden); beide worden op het beeldscherm getoond. De leeftijd in maanden wordt analoog aan die in jaren bepaald (als je op de 31ste geboren bent, wordt je iedere maand een maand ouder, maar je bent niet zo vaak maandig — dat ben je namelijk alleen op iedere 31ste). Aangenomen mag worden dat het programma op de peildatum 24 september 2010 draait (gebruik const; liefhebbers mogen met ctime de echte huidige dag opvragen en gebruiken). Let op: het programma moet in principe ook op andere peildata vanaf heden tot 2100 correct werken!

Potentiële studenten jonger dan 10 jaar (de 10-de verjaardag nog niet gevierd) of ouder dan 100 jaar (dus 101-ste verjaardag reeds gevierd) worden meteen geweigerd. Als uit het geboortejaar meteen al duidelijk is dat het met de leeftijd niets gaat worden, hoeven de vragen naar maand en dag niet gesteld te worden. Maar soms biedt pas de dag uitsluitsel!

Nu moet de kandidaat, als verificatie, zijn/haar geboortedag (zondag, maandag, ..., zaterdag) weten. Als deze fout is, wordt men al helemaal niet toegelaten, en stopt het programma. Het antwoord moet met één letter worden gegeven, bijvoorbeeld w voor woensdag. Bedenk zelf iets voor het d- en z-probleem. Het is niet de bedoeling ctime te gebruiken om deze dag uit te rekenen. Het programma moet een berekening bevatten om deze dag te bepalen! Gebruik (bijvoorbeeld) dat 1 januari 1901 op een dinsdag viel. Gebruik niet het Doomsday algoritme (zie ook hier). Voor de periode 1901–2099 geldt dat een jaar een schrikkeljaar is precies dan als het door 4 deelbaar is.

De toelating bestaat uit een drietal vragen. Allereerst moet de kandidaat uitrekenen wat zijn/haar geboortedag vermenigvuldigd met zijn/haar geboortemaand is. Is het antwoord fout, dan stopt het programma.

Daarna moet de kandidaat een meerkeuzevraag (A/B/C/D) goed beantwoorden. Is het antwoord fout, dan stopt het programma. Gebruikers tot en met 18 jaar krijgen een andere vraag dan de oudere gebruikers. Verder is de vraag dus steeds hetzelfde. De twee vragen gaan over computers. Hoofdletters en kleine letters moeten natuurlijk goed afgehandeld worden.

Als laatste moet de kandidaat twee willekeurige gegeven getallen vermenigvuldigen. Deze getallen bestaan uit (maximaal) drie cijfers voor en (maximaal) drie cijfers na de komma. Gebruik hierbij bijvoorbeeld x = rand ( ) % 1000; om een "willekeurig" getal tussen 0 en 999 in de variabele x te krijgen. Converteer zelf op de juiste manier tussen int en double. Het (geheeltallige) antwoord mag er maximaal een constante MAXFOUT naast zitten. Op sommige systemen moet #include <cstdlib> bovenaan het programma staan. En de randomgenerator kun je met srand (123); of srand (jaar); "seed"-en.

Opmerkingen

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 (gebruik return 1;). Evenzo voor een niet bestaande dag, bijvoorbeeld 31 april of 42 december. We nemen aan dat de gebruiker zo vriendelijk is verder geen fouten te maken bij het invoeren van gegevens: hij/zij voert niet al te gekke getallen of letters in, etcetera. Vanzelfsprekend worden hem/haar wel duidelijke vragen gepresenteerd.

Elk programma moet bij het "runnen" aan het begin op het beeldscherm laten zien wie de makers zijn, wat hun jaar van aankomst, studierichting en studentnummer 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 geen al te complexe kaders eromheen; gebruik liefst alleen de eerste 128 gewone karakters.
Bovenaan het programma (in de C++-code dus) staat uiteraard commentaar, waarin een aantal van deze elementen ook weer terugkomen, maar dan meer gericht op programmeurs, bijvoorbeeld de naam van de gebruikte compiler.

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 (en nakijkers), bijvoorbeeld kort wat het programma doet, en welke compiler gebruikt is: gebruikers van het programma vinden dat laatste niet interessant. Het infoblokje moet tijdens het "runnen" van het programma op het scherm komen, en is bestemd voor gebruikers van het programma. Lees ook eens over richtlijnen bij het maken van programmeeropgaven, en bestudeer de huisregels. Er hoeft geen gebruik van functies, arrays en het while- en for-statement gemaakt te worden. Alleen de headerfile iostream mag en moet gebruikt worden — en eventueel ctime en string voor liefhebbers; en misschien cstdlib. Ruwe indicatie voor de lengte van het C++-programma: 200 regels (300 mag ook wel).

Uiterste inleverdatum: vrijdag 24 september 2010, 17.00 uur.
BinnenhofHaagse studenten: maandagochtend 27 september 2010, 11.00 uur.
 

Manier van inleveren (één exemplaar per koppel, dat — ter herinnering — uit maximaal twee personen bestaat):

  1. Digitaal de C++-code inleveren: stuur een email naar pm@liacs.nl.
    Stuur geen executable's, lever alleen de C++-file digitaal in! Noem deze bij voorkeur zoiets als obamabiden1.cc, dit voor de eerste opdracht van het duo Obama-Biden. De laatst voor de deadline ingeleverde versie wordt nagekeken.
  2. En ook een papieren versie van het verslag (inclusief de C++-code) deponeren in de speciaal daarvoor bestemde doos "Programmeermethoden" in de postkamer van Informatica, kamer 156 van het Snellius-gebouw.
    BinnenhofHaagse studenten: doos in zaal "Paleistuin" (zaal 13.25).
     

    Overal duidelijk datum en namen van de (maximaal twee) makers vermelden, in het bijzonder als commentaar in de eerste regels van de C++-code. Lees bij het derde werkcollege hoe het verslag eruit moet zien. Zijn spaties/tabs goed verwerkt?

Te gebruiken compiler: als hij maar C++ vertaalt; het programma moet in principe zowel op een Linux-machine (met g++) als onder Visual C++ of Dev-C++ draaien. Test dus in principe op beide systemen! Normering: (consequente) layout 2; commentaar 2; infoblokje 2; werking 4. Eventuele aanvullingen en verbeteringen: lees deze WWW-bladzijde: www.liacs.nl/home/kosters/pm/op1pm.php.