Uitwerking opgaven Programmeermethoden NA werkcollege 5 Dinsdag 10 oktober 2017 1. def celsius(fahrenheit): '''Gegeven een temperatuur in graden Fahrenheit, bereken de temperatuur in graden Celsius.''' return 5 / 9. * (fahrenheit - 32.) # Druk een kleine temperatuurschaal af in graden F en C. print "Graden F: ", for i in range(0, 140, 20): print "{:5.1f}".format(i), print print "Graden C: ", for i in range(0, 140, 20): print "{:5.1f}".format(celsius(i)), print 2. In plaats van machtsverheffing vermenigvuldigen we 'zelf' steeds de noemer met 2. Hierdoor berekenen we de macht niet iedere iteratie van de loop opnieuw. # A(n) = 1/2 + 2/4 + 3/8 + 4/16 + ... + n/2^n def breuken_som(n): som = 0. # om de uiteindelijke som in te verzamelen noemer = 1 # noemer nu 1, wordt 2 bij eerste iteratie for i in range(1, n+1): noemer *= 2 # Vergeet niet de conversie naar float(), anders wordt het # resultaat van de deling een (afgeronde) integer. som += i / float(noemer) return som # Vraag invoer van gebruiker en test de functie. print "Geef aantal termen: ", n = int(raw_input()) print "De som is:", breuken_som(n) 3. a. 3 96 19 97 6 16 b. Vergeet niet de termen te vereenvoudigen. def G(a, b): return (a - 2) * (a + b + 2) + 1 c. Merk nu op dat in functie g de variabele x niet meer lokaal is maar globaal. Bij de eerste keer wordt de globale variabele x met waarde 6 dus overgeschreven met 3. Wel wordt g uitgevoerd met dezelfde argumenten. De returnwaarde blijft gelijk, maar de uitvoer van print verandert, omdat de expressies van links naar rechts worden geevalueerd: 3 96 19 97 3 16 De tweede keer echter wordt bij het aanroepen van g met g(x, y) de *nieuwe* waarde van de globale x gebruikt. De variabele a krijgt de waarde 3 en b 16. Dit resulteert in: 3 21 19 22 3 16 x wordt overschreven met 3, maar was al 3. Dus alle volgende aanroepen zullen hetzelfde opleveren. 4. a. S 3 3 2 S 2 6 1 S 1 9 0 S 3 3 2 S 2 6 1 S 1 9 0 1 18 3 18 4 en 2 b. def dagobert(a, b): return (a + b) * (a - 1) (donald(x, y) levert x * y op, bovenstaande is vereenvoudigd vanuit (b + 1) * (a - 1) + (a - 1) * (a - 1) ). c. In de eerste run wordt de globale variabele x nu op 1 gezet en de uitvoer "4 en 2" van het print-statement verandert in "1 en 2". Bij elke volgende aanroep van katrien zal voor de formele parameter a nu steeds 1 worden ingevuld. Hierdoor zal de loop in de functie donald niet meer draaien (y is nu immers 0) waardoor iets = 0 wordt geretourneerd. De uitvoer van de tweede en latere aanroep is nu: 1 0 3 0 1 en 2