Programmeermethoden
Werkcollege 5: Op papier I en Tweede opgave II

Het vijfde werkcollege van het vak Programmeermethoden vindt plaats in zaal 302/304, zaal 303, zaal 306/308 en zalen 307 en 309 (de PC-zalen), op donderdag 5 oktober 2017, van 13:30 tot 15:15 uur voor de Informatica-studenten en op maandag(!) 9 oktober 2017, van 15:30 tot 17:15 uur voor de Wiskunde-studenten. Anderen mogen kiezen. Het wordt verzorgd door de vaste staf.

Spreek/Vragenuur in zalen 302 ... 309: woensdag 4 oktober 2017, van circa 13:30 tot 15:15 uur; en donderdag 5 oktober 2017, van circa 15:15 tot 17:00 uur.

Voorbereiding

Als voorkennis wordt bekend verondersteld:

Het eigenlijke werkcollege

Maak van deze A4: En de antwoorden zijn hier te vinden.

Doe nu achtereenvolgens deze opdrachten, die van alles met de tweede programmeeropgave te maken hebben:

  1. Schrijf een programma dat een gegeven (invoer)file, zeg invoer.txt, onveranderd kopieert naar een uitvoerfile, zeg uitvoer.txt. Maak zelf een geschikte invoerfile als testfile.
    Hint: dictaat, gedeelte "aantekeningen bij de hoorcolleges", Hoofdstuk 3.7.
  2. Laat de gebruiker voorlopig nog geen namen van in- en uitvoerfile kiezen. Bij het testen is het namelijk handig niet steeds die namen te hoeven invoeren. En noem je testfiles bijvoorbeeld x, dat scheelt typewerk.
  3. Tel het aantal karakters in de file. Tel hierbij de regelovergangen (LineFeed: '\n') ook apart.
  4. Laat alle cijfers uit de file op het beeldscherm afdrukken. (Iets dergelijks is bij de programmeeropgave ook nodig.)
  5. Print op het beeldscherm de kwadraten van de getallen die in de file voorkomen, één per regel. Pas daartoe het programma subtiel aan!
    Bouw cijfers karakter voor karakter op tot getallen. Tip: als je getal 123 is, en je leest nu een 4 (als karakter!), hoe maak je dan het getal 1234? Gebruik dus een integer die het "huidige" getal bevat, en die meestal gewoon 0 is.
    De ruwe programastructuur is (het kan ook anders ...):
    lees karakter in
    while not einde file
       if karakter is een cijfer
          update een en ander
       else
          print (kwadraat van) getal
          update van alles
       print huidig karakter
       onthoud vorig karakter (altijd handig)
       lees karakter in
  6. Dat afdrukken gebeurt toch wel met een functie verwerkgetal (...)?
  7. Maak geregeld (elk kwartier) een backup van je C++-file, zo nu en dan onder een andere naam!
  8. Zorg ervoor dat je het bovenstaande 3 oktober af hebt!
    ======================================================
  9. Tot nu toe was dit om er een beetje in te komen. Nu de opgave, waarvoor je het bovenstaande grotendeels kunt gebruiken. Verander steeds weinig aan je programma. In het bijzonder, voeg niet te veel get's (en put's) meer toe! Voorlopig nog niet doen: filenamen kiezen.
    Hint: alleen een paar eenvoudige "eigenschappen" (zoals: wat was het laatst gelezen karakter, en hoe vaak kwam dat voor?) zijn nodig.
  10. Doe eerst het coderen, zonder de backslashes.
  11. Voeg het backslash-gebeuren toe.
  12. Idem, decoderen. Zorg eerst dat het werkt voor een file zonder backslashes.
  13. En nu met backslashes erbij.
  14. Doe het Lychrel-gebeuren. Dit heeft eigenlijk niets te maken met het netjes afdrukken, en kan er eenvoudig bij worden gemaakt.
    Tip: schrijf een functie die het omgekeerde van het getal x teruggeeft, dus 196 wordt 691. Let op "overflow".
  15. Worden regelovergangen goed afgehandeld? En het eerste karakter van de file?
  16. Zorg er voor dat namen goed werken. Binnen de grote while-loop van het verwerken staan nu zo'n 30 tot 40 regels.
  17. Maak de statistiekjes in orde.
  18. Zorg ervoor dat je het bovenstaande een week(je) voor de deadline af hebt!
    ======================================================
  19. Gebruik alle testfiles om te controleren of het programma correct werkt.
  20. Laat de gebruiker de namen van in- en uitvoerfile kiezen.
  21. 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?
  22. Zie bij het zesde werkcollege hoe het verslag eruit moet zien.

Testfiles

Tip: gebruik eventueel het UNIX-commando diff om je eigen uitvoerfiles te vergelijken met de correcte: diff jouwfile goedefile moet "niks" opleveren (mits de onze goed is :-). Zie verder bij de opgave.

Huiswerk

De antwoorden op de opgaven worden tevens via WWW verspreid, evenals de uitwerkingen van oude tentamens. Als er vragen over de opgaven zijn, stel deze dan (ook) op het college.