LIACS >Kristian Rietveld >Courses >Programmeermethoden NA, Najaar 2016
headerimg

Banner image by Sebastian Niedlich on Flickr, CC BY-NC-SA 2.0

Programmeermethoden NA
Werkcollege 5: Op papier I en Tweede opgave II

Het vijfde werkcollege van het vak Programmeermethoden NA vindt plaats in zaal 302/304, zaal 303, zaal 306/308 en zalen 307 en 309 (de PC-zalen), op dinsdag 4 oktober 2016, van 11:15 tot 13:00 uur.

Spreek/Vragenuur in zalen 302 ... 309: dinsdag 4 en donderdag 6 oktober 2016, van circa 15:30 tot 17:00 uur.

Voorbereiding

Als voorkennis wordt bekend verondersteld:
  • Inhoud colleges tot en met deze week.
  • Kennis betreffende het omgaan met files. Zie onder meer het collegedictaat Python, Hoofdstuk 8.

Het eigenlijke werkcollege

Ter voorbereiding op het schriftelijke tentamen, maak de opgaven die hier kunnen worden gedownload. De uitwerking wordt na het werkcollege online geplaatst.
Update: uitwerking nu beschikbaar.

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: College dictaat Python, Hoofdstuk 8.
  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 Python-file, zo nu en dan onder een andere naam! In geval van problemen kun je dan terugzoeken.
  8. 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 read(1)'s (en write()'s) meer toe! Voorlopig nog niet doen: filenamen kiezen.
    Maak het eerst het coderen. Neem eerst aan dat er geen cijfers en backslashes in de originele file staan. Tip: maak steeds zelf geschikte testfiles om je programma te testen. Begin met een eenvoudig geval en maak de invoerfile dan steeds ingewikkelder.
  9. Zorg ervoor dat je het bovenstaande 7 oktober af hebt!

  10. =======================================
  11. Al verder werken? Zie het zesde werkcollege.