Programmeermethoden
Werkcollege 5: Op papier I en Tweede opgave II
Het vijfde werkcollege van het vak
Programmeermethoden
vindt plaats in de week van
29 september tot en met 3 oktober 2025.
Doe het thuis: de universiteit is op 3 oktober gesloten in verband met Leidens ontzet.
Voorbereiding
Als voorkennis wordt bekend verondersteld:- Inhoud colleges tot en met deze week.
- Kennis betreffende het omgaan met files. Zie onder meer dictaat, gedeelte "aantekeningen bij de hoorcolleges", Hoofdstuk 3.7.
- Het vierde werkcollege.
Het eigenlijke werkcollege
Maak deze week thuis van deze A4:- Opgave 15 uit de opgavenbundel.
- Opgave 17 uit de opgavenbundel.
- Opgave 18 uit de opgavenbundel.
- En ook nog Opgave 19 uit de opgavenbundel.
Doe nu achtereenvolgens thuis deze opdrachten, die van alles met de tweede programmeeropgave te maken hebben.
- Het vierde werkcollege was om er een beetje in te komen. Nu de opgave, waarvoor je het vorige werkcollege goed kunt gebruiken. Verander steeds weinig aan je programma. In het bijzonder, voeg geen get's (en put's) meer toe! Voorlopig nog niet doen: filenamen kiezen.
- Hint: alleen een paar eenvoudige "eigenschappen" zijn nodig, zoals later "wat was het vorige karakter?", en: "wat is de getalswaarde van het getal tot nu toe (vaak 0)?".
- Maak een eenvoudige testfile met een paar regels. Gebruik voorlopig deze file voor het testen.
- Tel het aantal karakters van invoer- en uitvoerfile. Gebruik onder meer een functie die bepaalt hoeveel cijfers een getal heeft. Geen logaritmes nodig. Begin eerst met een eenvoudige vaste pincode, zoals 1111. Elk karakter moet dan één opschuiven. (Dit heet overigens Caesar's code.)
- Gebruik nu een "willekeurige" pincode. Denk aan de randgevallen (zoals een z 8 opschuiven), en zorg ervoor dat regelovergangen en tabs goed worden afgehandeld.
- Detecteer getallen in de file, zie het vierde werkcollege.
- En maak hier eventueel een nieuwe pincode van. Let goed op de juiste "timing".
- Het decoderen! Eigenlijk is dat hetzelfde als het coderen, maar dan met negatieve verschuiving. Let goed op tijdelijke negatieve getallen voor ASCII-waardes — vermijd deze liever. En let weer goed op de juiste "timing". Misschien moet op een andere plek in de C++-code dan bij het coderen een nieuwe pincode worden afgehandeld.
- Tel hoevaak het drietal karakters the voorkwam bij het decoderen.
- Zorg ervoor dat er een optie is om bij het decoderen niet naar een file te schrijven. (Anders duurt het straks te lang.)
- Probeer alle 10000 mogelijke pincodes op de juiste testfile, en kijk of je de geheime pincode kunt vinden
===== Zorg ervoor dat je het bovenstaande grotendeels rond 3 oktober af hebt!===== - Doe het Lychrel-gebeuren. Dit heeft eigenlijk niets te maken met het bovenstaande, en kan er eenvoudig bij worden gemaakt. Gebruik de technieken van de eerste punten betreffende files van het vierde werkcollege. Zorg er dus eerst voor dat de getallen uit de te coderen file één voor één op het scherm worden afgedrukt (als int).
- Schrijf een functie die de Lychrel-eigenschap controleert. Let in de buurt van het omkeren en van het optellen op "overflow", denk aan INT_MAX!
- Drieletterwoorden herkend? Let op hoofdletters en kleine letters.
- Gebruik alle testfiles om te controleren of het programma correct werkt.
- Laat de gebruiker de namen van in- en uitvoerfile kiezen.
- Maak nu de tweede programmeeropgave af. Zijn er duidelijke functies gemaakt — daar had je eerder aan moeten denken!? Heeft main hooguit een regel of tien?
- Zie bij het zesde werkcollege hoe het verslag eruit moet zien.
Huiswerk
De antwoorden op de opgaven worden tevens via WWW verspreid, evenals de uitwerkingen van oude tentamens. Als er vragen over de opgaven zijn, laat het weten.