Programmeermethoden — Werkcollege 8 — Derde opgave
Het achtste werkcollege van het vak
Programmeermethoden
vindt plaats in zaal 302/304,
zaal 306/308 en zalen 307 en 309 (de PC-zalen;
307 en 309 zijn speciaal bestemd voor Wiskunde-studenten).
Voor studenten Wiskunde of Informatica is dit
werkcollege op
dinsdag 17 november 2009, van 13.45 tot 15.30 uur,
en voor studenten Natuurkunde of Sterrenkunde,
en voor hen die een dubbele propedeuse WN of WA doen op
donderdag 19 november 2009, van 11.15 tot 13.00 uur.
Het wordt verzorgd door
Ramon van Dam,
Sjoerd Henstra,
Ben Kwint
en
Jonathan Vis,
onder leiding van
Mattias Holm, MSc
en
drs. Tijn Witsenburg.
Het eigenlijke werkcollege
De
derde programmeeropgave
bestaat uit de menu-opties (in feite
Machtig, Galgje en Woordenboek)
en uit het eigenlijke menu-programma. Verder wordt
al snel duidelijk dat er een nette functie moet komen
om getallen foutloos in te lezen. Het schrijven van het programma
kan dan ook netjes in een zestal taken verdeeld worden.
Zo kan in eerste instantie een menu gemaakt worden waarbij de
keuze Machtig leidt tot een regeltje op het scherm ("hier moet
nog ge-Machtig-d worden"). In het programma is dat een functie-aanroep
Machtig ( ), 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
in het menu-programma gezet worden.
Als de opgave door twee personen gemaakt wordt kan hier
verstandig worden samengewerkt.
In de nu volgende opgaven wordt stap voor stap toegewerkt naar
het beoogde eindresultaat. De volgorde ligt helemaal niet vast:
zo kun je bijvoorbeeld eerst ook de optie Machtig maken.
-
Maak een menu-programma dat aan de gebruiker drie opties
presenteert: O(ntspanning),
(M)achtig en S(toppen). Bij O en M komt alleen een tekstje op
het scherm, bij S stopt het
programma. Gebruik een switch.
Alsjeblieft geen recursie, maar doe het met while-loops!
Maak de keuze-opties locale variabelen.
-
Idem, maar nu leidt O tot een nieuw menu, met opties W(oorden),
G(algje)
en T(erug), waarbij T terug voert naar het hoofdmenu. Verder
leveren W en G
weer alleen een tekstje, terwijl je in hetzelfde
submenu blijft.
Zorg dat er per (sub)menu één functie is.
-
Schrijf een functie die de optie inleest met cin.get ( ).
-
Schrijf een functie leesgetal
die een getal karakter voor karakter inleest, wederom met
cin.get ( ).
Denk aan de parameters in de heading.
Richt het zo in dat alles tot en met de eerstvolgende Enter wordt
weggelezen, en dat daarvan een zinnig getal wordt gemaakt.
Je kunt het bijvoorbeeld zo maken dat
abc12def34gh[Enter] wordt geinterpreteerd
als 1234.
-
Idem, maar nu moet het ingevoerde getal niet groter zijn dan
een als value-parameter meegegeven bovengrens.
Je kunt het bijvoorbeeld zo maken dat
abc12def34gh[Enter] wordt geinterpreteerd
als 123, als het getal kleiner moet zijn dan 1000.
-
Maak een random-generator.
Gebruik de in het dictaat in Hoofdstuk 3.9.3
van het dictaat,
gedeelte "aantekeningen bij de hoorcolleges",
gesuggereerde methode.
Gebruik een static variabele.
-
Maak de optie Galgje.
Schrijf een functie
resultaat (gok,goed,...)
die bij gegeven goede woord goed en een gok(letter)
de juiste resultaten oplevert.
Gebruik ook een array reedsgeraden met de
reeds geraden letters op hun juiste plaats.
-
Voor de optie Machtig: maak een class grootgetal
met de juiste "member-variabelen" en "member-functies"
(methoden) — zie de opgave.
Bouw eerst dubbel-verbonden pointer-lijstjes,
vergelijk het pointerpracticum
van vorige week.
-
Schrijf de betreffende functies, allereerst drukaf,
en het door de gebruiker laten kiezen van een GROOT getal.
Test dit goed!
-
De functie maal is het lastigst.
Er zijn verschillende mogelijkheden; zo kun je bijvoorbeeld gebruik maken
van een zelfgemaakte functie optellen
(die twee GROTE getallen naar een van de twee,
of juist naar een derde, optelt) en/of
van een zelfgemaakte functie kopie (die een GROOT getal kopieert).
Maak eerst met de hand een vermenigvuldiging als 1234 x 5678. Hier
gebruik je in feite vakje10 om de losse cijfers te bevatten.
Je kunt nu één voor één
de "cijfers" (in het 10000-tallig stelsel) van het tweede getal
met die van het eerste vermenigvuldigen, en de resultaten steeds
toevoegen aan het resultaat. Denk eraan geregeld nieuwe vakjes
toe te voegen, en denk hierbij aan de overdracht ("carry",
als een "cijfer" boven 9999 komt).
Verder, let op het juiste vakje waar het resultaat van een
vermenigvuldiging van twee "cijfers" terecht moet komen.
-
Maak de optie Machtig af. Denk ook aan het opruimen!
Gebruik een (tijdelijke) globale variabele om te controleren
of aan het eind evenveel new's als
delete's zijn gedaan.
-
Maak de optie Woordenboek.
Tip: maak een string mijnstring
leeg met mijnstring.erase (0);.
Soms werkt ook mijnstring = ""; wel.
Maak nu de derde programmeeropgave af.
Denk aan de eisen voor het verslag, zie elders.
Vragen en/of opmerkingen kunnen worden gestuurd
naar: kosters@liacs.nl.
20 oktober 2009 — http://www.liacs.nl/home/kosters/pm/pmwc11.html