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

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

Programmeermethoden NA
Werkcollege 4: Functies en Tweede opgave I

Het vierde werkcollege van het vak Programmeermethoden NA vindt plaats in de computerzalen van het Snellius-gebouw, op dinsdag 26 september 2017, van 11:00 tot 12:45 uur.

Voorbereiding

Als voorkennis wordt bekend verondersteld:
  • Inhoud colleges tot en met deze week.
  • Elementaire kennis over functies. En over de controlestructuren.

Het eigenlijke werkcollege

Maak allereerst een kaal Python-programma, zoiets als:

def main():
    pass

if __name__ == '__main__':
    main()
Doe achtereenvolgens deze opdrachten (plaats de zelfgeschreven functies in dit programma, en test ze (dus roep ze aan vanuit de main-functie)):

  1. Schrijf een functie telop(x, y) die de waardes van x en y optelt en deze som retourneert.
    Dit is dus een uiterst simpele functie die met behulp van een return-value informatie doorgeeft.
    Roep de functie aan met telop(11,12), en telop(u, v) (met geschikte variabelen u en v), en gebruik zowel print telop(...) als u = telop(...).
  2. Schrijf een functie plus_en_maal(x, y) die de waardes van x en y optelt en vermenigvuldigt en beide waarden retourneert (met behulp van een tuple). Roep de functie aan met som, product = plus_en_maal(3, 45).
  3. Schrijf een functie telop_breuken(x1, x2, y1, y2) die de waardes van de "breuken" x1/x2 en y1/y2 optelt in de breuk z1/z2. Vereenvoudigen hoeft niet.
  4. Schrijf een functie die x tot de macht y berekent. Neem aan dat x van type float is en y van type int. Gebruik geen functies uit math en niet de ingebouwde operator voor machtsverheffing. Gebruik gewoon een for-loop. Werkt het ook voor negatieve exponenten?
  5. Schrijf een functie die bij gegeven geheel getal n de cijfers van n op aparte regels zet, het laatste cijfer eerst. Dus getal 725 levert drie regels, respectievelijk met 5, 2 en 7. En laat de functie meteen het aantal cijfers van het getal uitrekenen (3 in het voorbeeld).

  6. Ter voorbereiding op de tweede programmeeropgave ...
  7. 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 9.
  8. 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.
  9. Tel het aantal karakters in de file. Tel hierbij de regelovergangen (LineFeed: '\n') ook apart.
  10. Laat alle cijfers uit de file op het beeldscherm afdrukken. (Iets dergelijks is bij de programmeeropgave ook nodig.)
  11. 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 ...):
    open file
    for regel in file:
        for karakter in regel:
            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)
    
  12. Dat afdrukken gebeurt toch wel met een functie verwerkgetal(...)?
  13. 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.
  14. Begin nu aan de tweede programmeeropgave; zie daartoe het vijfde werkcollege.

  15. Voor verder oefenen ...
  16. Schrijf een functie upcase(zin), waarbij zin van het type str is, die een nieuwe string retourneert waarbij alle kleine letters zijn omgezet in hoofdletters. Schrijf zelf een test om te bepalen of een karakter een kleine letter is. Voor het omzetten naar hoofdletters, denk aan de ASCII tabel.
  17. Schrijf een functie die de alfabetisch eerste van twee gegeven kleine letters retourneert.
  18. Schrijf een functie die aan de gebruiker een getal vraagt, zeg n, en vervolgens n regels afdrukt op het scherm, waarbij op de i-de regel de eerste i i-vouden staan. Een voorbeeld voor n gelijk aan 4:
        1
        2 4
        3 6 9
        4 8 12 16
  19. Schrijf een functie, die bij gegeven positief geheel getal m, maximaal n stappen uit het 3x+1-algoritme doorrekent. De tussenresultaten moeten, als de gebruiker dat wil, op het scherm gezet worden.
  20. Schrijf een functie die een getal in factoren ontbindt. Bijvoorbeeld: 84=2^2 x 3^1 x 7^1.