STRUCTUUR VAN COMPUTERPROGRAMMA’S I
Tussentijdse evaluatie - 4 november 2010Eerste bachelor computerwetenschappen + eerste bachelor wiskunde + schakelprogramma's
Dit examen is gesloten boek. Neem voor elke vraag een volledig nieuw blad en schrijf op elk blad
je naam, richting en het nummer van de vraag.
Veel succes!
Vraag 1 theorie: procedurele abstractie
a) Waarom is het mechanisme van proceduredefinitie en procedureoproep een abstractiemechanisme (en niet ‘maar’ een combinatiemechanisme)? b) Wat is het nut van parameters in een functie of proceduredefinitie? c) Wat is het verschil tussen formele en actuele parameters?
Vraag 2 recursie/iteratie
a) De produkten in een supermarkt worden gescand en in een lijst doorgegeven aan het kassasysteem. Een lijst van gescande produkten ziet er als volgt uit: ((brood 2 1.9) (zalm 1 5.5) (spa 3 0.7))
waarbij het eerste element in elke deellijst de naam van een produkt is, het tweede element is het aantal dat van dat produkt wordt gekocht en het laatste is de eenheidsprijs van het gekochte produkt. Schrijf nu een functie (maak-rekening lijst) die een dergelijke lijst als invoer neemt en als resultaat de totale prijs teruggeeft. Bijvoorbeeld:
(maak-rekening ‘((brood 2 1.9) (zalm 1 5.5) (spa 3 0.7))) => 11.4
b) Levert je oplossing voor a) een recursief of iteratief proces? Leg in je eigen woorden uit waarom je dit antwoord geeft (argumenteer bondig). Schrijf de andere versie voor a.
Vraag 3 hogere orde
a) Schrijf een procedure (bereken f l) die als eerste parameter een functie van twee argumenten neemt, en als tweede parameter een lijst l, en als resultaat een nieuwe lijst genereert door telkens de functie f op 2 opeenvolgende elementen van de oorspronkelijke lijst l toe te passen. Schematisch:
(e1 e2 e3 ... en-‐1 en) => (f(e1,e2) f(e2,e3) ... f(en-‐1,en))
b) Gebruik bereken om een functie gemiddelde-snelheden te definiëren, die als input een lijst van snelheden krijgt, en resulteert in een lijst van de gemiddelden van telkens twee opeenvolgende snelheden uit de inputlijst. Bijvoorbeeld:
(gemiddelde-snelheden '(70 90 110 60 50 70)) => (80 100 85 55 60)
c) Maak gebruik van de procedure bereken om een procedure snelheids-verschillen te definieren die een lijst van opeenvolgende maximaal toegelaten snelheden langs een route als invoer neemt en als resultaat een lijst van snelheidstoenames (of afnames) teruggeeft door telkens het verschil te maken tussen de volgende en de vorige snelheid. Bijvoorbeeld: (snelheids-verschillen '(70 90 110 60 50 70))
Vraag 4 Omgevingsmodel
a) Peter moet in zijn toepassing regelmatig een getal delen door een constante. Hij besluit om als volgt te werk te gaan:
(define n 3) (define (deel x) (/ x n))
Hij test deze code even uit: >>>(deel 15) 5
Vervolgens schrijft hij de volgende definitie om het gemiddelde van 2 getallen te berekenen: (define (gemiddelde x y)
(let ((n 2))
(deel (+ x y))))
Als hij dan zijn code test, krijgt hij 5 in plaats van de verwachte 7.5: >>>(gemiddelde 5 10)
5
Beschrijf in detail welke omgevingen er in welke volgorde gecreëerd worden om dit resultaat te bekomen. Beschrijf in enkele zinnen wat er verkeerd loopt.
b) Peter denkt het probleem gevonden te hebben en herschrijft zijn procedure gemiddelde als volgt:
(define (gemiddelde x y) (define (deel x) (/ x n)) (let ((n 2))
(deel (+ x y))))
Opnieuw test Peter zijn procedure gemiddelde uit: >>>(gemiddelde 5 10)
Wat is het resultaat van deze procedureoproep? Beschrijf opnieuw aan de hand van omgevingen hoe dit resultaat bekomen wordt en leg uit waarom.