STRUCTUUR VAN COMPUTERPROGRAMMA S I Examen eerste zit 19 januari 2012 Eerste 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 recursie/iteratie (5 punten) De punten van de examens Structuur I, Lineaire Algebra en Grondslagen I worden verzameld in een geneste lijst '((jan 10 12 17) (piet 14-15) (an 15 14 16) ) waarbij voor iedere student zijn/haar resultaat voor elk vak wordt bijgehouden. Het streepje bij piet in deze lijst betekent een afwezigheid op het examen Lineaire Algebra. a) Schrijf een procedure (bereken-gemiddelde lijst) die een dergelijke lijst als invoer neemt en als resultaat een lijst teruggeeft die bestaat uit deellijsten die de naam en het gemiddelde van de drie punten bevatten. Zo gauw een student afwezig is op één van de examens, wordt hij/zij niet opgenomen in het resultaat. Bijvoorbeeld (bereken-gemiddelde '((jan 10 12 17) (piet 14-15) (an 15 14 16))) => ((jan 13) (an 15)) 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. c) Schrijf een procedure (bereken-algemeen lijst bereken-resultaat) die een veralgemening is van de procedure bereken-gemiddelde van onderdeel a). De procedure bereken-algemeen is een veralgemening omdat er nu een variabel aantal punten kan voorkomen voor elke student (meer of minder vakken). Bovendien bepaalt de procedure bereken-resultaat hoe deze cijfers worden gecombineerd. d) Herschrijf je oplossing voor a) door de procedure bereken-algemeen te gebruiken. e) Schrijf een procedure (bereken-gewogen-gemiddelde lijst) die gebruik maakt van de hogere orde procedure uit onderdeel c). De procedure bereken-gewogen-gemiddelde geeft een lijst terug met daarin de gewogen gemiddeldes van de punten van een student. Het gewogen gemiddelde wordt berekend aan de hand van het aantal studiepunten van dat vak. Het resultaat van deze procedure op het voorbeeld uit onderdeel a) is dan((jan 12.6) (an 15.2))waarbij de punten voor Structuur I meetellen voor 9 studiepunten, deze voor Lineaire Algebra voor 3 studiepunten en deze voor het examen Grondslagen I voor 6 studiepunten.
Vraag 2 bomen (4 punten) Onderstaande figuur geeft een mijn van een ontginningsmaatschappij weer. Een mijn, of mijnschacht (deelmijn), is geopend in een bepaald jaar, beschrijft de ontgonnen ertsen en kan in een eindig aantal mijnschachten vertakken. Deze schachten hebben dezelfde structuur als de hoofdmijn en kunnen dus terug verder vertakken. (define mijn '(1987 ((goud 12)(zilver 10)) (1990 ((koper 99)) (1999 ((ijzer 57)))) (1991 ((goud 11)(zilver 23))) (1993 ((goud 1)) (1994 ((goud 34)(zilver 23)))))) De ontgonnen ertsen worden opgeslagen als een lijst van tupels. Zo vertelt de lijst '((goud 12)(zilver 10)) ons dat er 12 ton goud en 10 ton zilver ontgonnen is. Merk op dat de deelschachten altijd achter de lijst met ontgonnen ertsen staan. Let op: je oplossingen voor de vragen hieronder moeten algemeen genoeg zijn om voor 'elke mijn' te werken. Dus ook voor mijnen met meer of minder schachten en/of ontgonnen grondstoffen. Hint: Introduceer abstracties voor de boom die de mijn voorstelt! a) Schrijf een procedure (geef-ton-sinds mijn jaar) die voor een mijn berekent hoeveel ton grondstof er reeds naar boven gehaald is sinds een bepaald jaar. Bijvoorbeeld(geef-tonsinds mijn 1987) zal de som maken van alle grondstoffen en (geef-ton-sinds mijn 1991) zal 149 teruggeven. b) Schrijf een procedure (geef-kostprijs-ontginning mijn) die voor een mijn berekent hoeveel het gekost heeft om de beschreven grondstoffen naar de oppervlakte te brengen. In de ontginningsbranche gaat men er van uit dat het naar bovenhalen van 1 ton erts 1000 euro kost voor erts dat net onder de grond zit (hoogste niveau). Gaat men echter in diepere schachten ontginnen, dan stijgt de kost van het opgraven van erts met 10% per niveau dat men dieper moet graven.
Vraag 3 destructieve operaties (3 punten) Tijdens de eindejaarsperiode hebben we een circulaire slinger gebruikt als versiering. Deze slinger bestaat uit een willekeurige opeenvolging van sneeuwmannen en sterren. Nu de feesten voorbij zijn willen we onze slinger terug opbergen. Om onze slinger op te bergen hebben we een doos met twee vakjes: één voor alle sneeuwmannen en één voor alle sterren. Deze lege doos is als volgt gedefinieerd: (define doos (cons '() '())) Schrijf een destructieve procedure (berg-op! slinger doos) die de circulaire slinger opbreekt in twee niet circulaire slingers (lijsten) van één type versiering, en die twee lijsten opbergt in doos. Merk op dat in deze procedure GEEN nieuwe cons-cellen mogen aangemaakt worden!
Vraag 4 streams (4 punten) Voor de vraag over stromen, willen we 'een bericht' versturen van punt A naar punt B. Het draadloze protocol laat enkel pakketjes van lengte 6 toe. Om dit te verwezenlijken gebruiken we 2 bestaande dozen: verstuur-tekst verwacht een oneindige stroom van deelstromen, waarbij elke deelstroom juist 6 karakters bevat, en verstuurt deze. ontvang-tekst ontvangt een oneindige stroom van deelstromen (van 6 karakters lang) en geeft een oneindige stroom van deelstromen terug, waarbij de deelstromen opnieuw verstaanbare tekst voorstellen. Voor de onderstaande vragen kan je gebruikmaken van de volgende stream-operatoren: verstuur-tekst, ontvang-tekst, cons-stream, head, tail, empty-stream?, appendstreams, accumulate, flatten, filter, map-stream, flatmap en the-empty-stream. a) Schrijf eerst een stroom operator split-n die een gegeven stroom omvormt naar een stroom van deelstromen van gegeven lengte n. b) Het origineel bericht is een stroom van woorden, elk woord is een stroom van karakters. Om het bericht te kunnen versturen moet het omgezet worden naar een stroom van deelstromen van lengte 6, namelijk de originele tekst en blanco tekens om scheiding van woorden te kennen. Schrijf een operator voor deze omvorming. c) Schrijf nu een nieuwe stroomoperator split-at die een gegeven stroom omvormt naar een stroom van deelstromen. In tegenstelling tot split-n splitst split-at niet op vaste intervallen, maar wanneer een bepaald karakter voorkomt. d) Gebruik nu je split-at procedure om de uitvoer van 'ontvang-tekst', een oneindige stroom van deelstromen van 6 karakters (met blanco karakters), om te vormen naar een oneindige stroom van deelstromen (variabele lengte) die opnieuw woorden voorstellen.
Vraag 5 objecten (4 punten) a) Ontwerp een ADT ratelhek (draaihek dat slechts in één richting draait) dat je als object implementeert. Een ratelhek onthoudt het aantal personen dat gepasseerd is. Een ratelhek moet minstens deze twee boodschappen begrijpen: De boodschap read geeft het aantal personen terug dat door het ratelhek gepasseerd is. De boodschap pass! laat een persoon door het ratelhek passeren. b) Ontwerp een ADT kabine dat je als object implementeert. Een kabine heeft een appart ratelhek voor de inkom en voor de uitgang en een maximum capaciteit. Een kabine moet minstens de volgende boodschappen begrijpen: De boodschap full? gaat na of de kabine maximaal bezet is. De boodschap empty? gaat na of de kabine leeg is. De boodschap in laat een persoon de kabine binnengaan. Dit gebeurt steeds via het ratelhek aan de ingang. De boodschap out laat een persoon de kabine verlaten via het ratelhek aan de uitgang. c) Ontwerp ook een ADT perron dat je als object implementeert. Een perron onthoudt het aantal mensen dat op het perron staat en begrijpt minstens de volgende boodschappen: De boodschap empty? gaat na of het perron leeg is. De boodschap enter n laat een groepje van n personen het perron betreden. De boodschap leave n laat een groepje van n personen het perron verlaten. d) Ontwerp een ADT skilift dat je als object implementeert. Een skilift heeft een perron aan de voet van de berg en een perron op de top ervan en er is 1 kabine. Een skilift moet minstens de volgende boodschappen begrijpen: De boodschap stop laat de kabine afwisselend onderaan of bovenaan de skilift stoppen. Alle personen zullen op dat moment de kabine verlaten waarna zoveel mogelijk mensen van het perron in de kabine stappen. e) Toon door middel van een transcript hoe een skilift met een kabine van capaciteit 4 wordt aangemaakt. Simuleer het volgende scenario: Op het perron onderaan de berg staan 7 skiërs ongeduldig te wachten. Op het perron aan de top van de berg staan 3 vermoeide snowboarders te wachten om met de skilift naar beneden te gaan. Laat de kabine achtereenvolgens aan het onderste en bovenste perron stoppen tot alle personen op hun bestemming zijn. Controleer de aantallen die in de ratelhekken zijn opgeslagen.