Faculteit Economie en Bedrijfskunde
Op dit voorblad vindt u belangrijke informatie omtrent het tentamen. Voordat u met het tentamen begint: lees dit voorblad!
Tentamen: V&O IV: Programmeren Tentamendatum & -tijd: vrijdag 13 juni 2008, 9.00 uur – 12.00 uur. Duur van het tentamen: 3 uren. U dient zich te legitimeren met uw UvA legitimatiebewijs met foto of uw UvA collegekaart samen met paspoort of rijbewijs of een ander geldig legitimatiebewijs (voor studenten) met foto.
Vermeld uw naam en studentnummer op elk apart blad. Waarschuwing tegen fraude: Fraudeer niet! Bij fraude staat u als maximale straf de uitsluiting van alle tentamens voor een jaar te wachten. Uw mobiele telefoon dient uitgeschakeld en opgeborgen in uw tas te zijn. Uw tas dient gesloten links van uw tafel op de vloer te zijn geplaatst. Tijdens het tentamen is toiletbezoek niet toegestaan (tenzij het bij wijze van uitzondering door de hoofdsurveillant uitdrukkelijk wordt toegestaan). Toegestane hulpmiddelen: potlood, pen, gum, liniaal. NIET TOEGESTAAN: rekenmachine! Specifieke toelichtingen voor dit tentamen: Het tentamen bevat 7 opgaven (6 pagina’s inclusief deze en bijlage). Er kan in totaal 100 punten behaald worden. Het cijfer wordt bepaald door het behaalde punten door 10 te delen. Licht je antwoorden zoveel mogelijk toe. Tenzij anders is vermeld, mag u altijd gebruik maken van de voorgedefinieerde functies en procedures uit Math. De uitslag worden uiterlijk 18 werkdagen na de tentamendatum bekend gemaakt. Mocht het hertentamen binnen 6 weken van dit tentamen staan geprogrammeerd dan is de nakijktermijn 12 dagen. Tentamen inzage: Uiteraard! Gaarne een afspraak maken via e-mail:
[email protected]
Succes!
V&O IV: Programmeren
Tentamen
13 juni 2008 9.00 – 12.00 uur
Opgave 1 (20 punten) Bekijk het volgende Pascal-programma: program Opgave_1; {$APPTYPE CONSOLE} uses SysUtils; var a,b,c,i : integer; procedure A1(var a,b,c : integer); begin i:=1; while i<3 do begin a:=a+b; i:=i+1; end; b:=b-c; c:=a-b; writeln(a:5,b:5,c:5); end; (* A1 *) procedure B1(var a,b,z : integer); begin c:=a+2; a:=c-a; b:=b-2*c; writeln(a:5,b:5,c:5); end; (* B1 *) begin (* hoofdprogramma *) a:=1; b:=10; c:=0; i:=0; while i<3 do begin i:=i+1; A1(a,b,c); writeln(a:5,b:5,c:5); B1(b,a,c); writeln(a:5,b:5,c:5); end; readln; end.
1a) 1b)
Wat wordt er afgedrukt? Geef hierbij uiteraard uitleg. Hetzelfde als vraag 1a) (dus geef de uitvoer) maar nu alle var’s weggelaten in de proceduredeclaraties, d.w.z. procedure A1(a,b,c : integer); procedure B1(a,b,z : integer);
Pag. 2 van 6
V&O IV: Programmeren
Tentamen
13 juni 2008 9.00 – 12.00 uur
Opgave 2 (20 punten) De jaarafsluiting 2008 van de VSAE is een groot succes: maar liefst 188 studenten hebben zich opgegeven voor een weekend om mee te gaan naar Camping de Wijk in Noorwulp! VSAE heeft bij elke aanmelding de belangrijkste gegevens genoteerd in een text-bestand, d.w.z.: Voornaam Achternaam Studentennummer Betaald (€15,-) of nog niet betaald. De deelnemers staan nu in de volgorde van aanmelding. Het is handig om de lijst te hebben in alfabetische volgorde van achternaam. Schrijf een programma die dit bewerkstelligt. U heeft de beschikking over de volgende procedures (met bijbehorende typedeclaraties) die de gegevens inleest en die de gegevens wegschrijft (die hoeft u dus niet te maken): Const N = 188; type T_Student = record voornaam : string; achternaam : string; studentnummer : integer; betaald : boolean; end; T_Lijst = array [1..N] of T_Student; procedure Inlezen (var Studentenlijst:T_lijst; bestandsnaam:string); (* deze procedure leest alle studentengegevens in van een bestand met de naam die in de variabele “bestandsnaam” is gegeven en plaatst ze in de variabele “Studentlijst”. *) procedure Wegschrijven (var Studentenlijst:T_lijst; bestandsnaam:string); (* schrijft de gegevens van “studentenlijst” weg naar een bestand die in de variabele “bestandsnaam” is gegeven. De volgorde waarin dit gebeurt, is als volgt: studentlijst[1], studentenlijst[2],… studentenlijst[i], studentenlijst[i+1],… studentenlijst[188]. *) Het bestand waarin de aanmeldingen staan, heet: “Jaarafsluiting_deelnemers.txt”. Verder zij opgemerkt dat bij een naam met een tussenvoegsel, deze achter de achternaam staat, dus bijvoorbeeld: “Boer, de”.
Pag. 3 van 6
V&O IV: Programmeren
Tentamen
13 juni 2008 9.00 – 12.00 uur
Opgave 3 (10 punten) Maak de volgende procedure uit opgave 2: procedure Inlezen (var Studentenlijst:T_lijst; bestandsnaam:string); (* deze procedure leest alle studentengegevens in van een bestand met de naam die in de variabele “bestandsnaam” is gegeven en plaatst ze in de variabele “Studentlijst”. *) De eerste regels van het bestand zien er als volgt uit: Edwin Sar, van de 123456 niet betaald Khalid Boulahrouz 234567 betaald
Opgave 4 (10 punten) Schrijf voor n 1 de Pascal-functie: function SommeerTermen(x:extended;n:integer):extended; die de sommatie uitrekent van de eerste n termen van de onderstaande in wiskunde getoonde berekening (voor n 1 wordt de eerste term uitgerekend, etc.): n i 1 2 3 4 5 n (1)i 2i xi 2 2 x3 4 x 4 8 x5 16 x6 32 x7 (1)n 2n xn2 i 1
Opgave 5 (10 punten) Gegeven is een rij positieve gehele getallen die wordt afgesloten met een 0. Maak een algoritme dat bepaalt hoe vaak elk van de getallen 11 tot en met 20 voorkomt in de rij. U kunt gebruik maken van het commando “readln(a)” om een volgend getal in te lezen van de rij.
Opgave 6 (20 punten): Maak een procedure MatrixVermenigvuldiging(A:Nmarray;B:Mnarray;var X:NNarray)`
die het product berekent van de matrix A (afmetingen n x m ) met matrix B ( m x n ): X AB De definitie van de types die in de formele paramterlijst zijn gebruikt, zijn: type NMarray = array[1..N;1..M] of real; MNaray = array[1..M;1..N] of real; NNarray = array[1..N;1..N] of real; waarbij N en M als constanten zijn gedefinieerd. Pag. 4 van 6
V&O IV: Programmeren
Tentamen
13 juni 2008 9.00 – 12.00 uur
Opgave 7 (10 punten) Zoek de Fout(en)! In onderstaand programma staan 10 fouten waardoor het programma niet werkt. Geef duidelijk aan welke fouten dit zijn. Opmerking: de code van dit programma is ook als bijlage toegevoegd: lever die bijlage in met uw correcties daarbij aangegeven (vergeet niet uw naam en studentnummer erop te zetten!). program Opgave_7; uses SysUtils; var gem,min,max : real; procedure BerekenMinMaxGem (filenaam:string; var minimum, maximum, gemiddelde : real) var x, som : real; f : text; begin assign (f,‘filenaam’); reset(f); readln(f,x); if (x>=0) do begin minimum:=x; maximum:=x end; som:=x; n:=1; while not eof do begin n:=n+1; readln(f,x); som:=som+x; if x<minimum then minimum:=x if x>maximum then maximum:=x; gemiddelde := som/n; close(f); end; (* BerekenMinMaxGem *) begin (* hoofdprogramma *) BerekenMinMaxGem('invoer.txt',min, max, gemiddelde); writeln('Minimum : ,min:10:3); writeln('Maximum :',max:10:3); writeln('Gemiddelde :',gem:10:3); readln; end.
Pag. 5 van 6
V&O IV: Programmeren
Bijlage Opgave 7 (invullen en inleveren)
13 juni 2008 9.00 – 12.00 uur
Naam:
Studentnummer:
program Opgave_7; uses SysUtils; var gem,min,max : real; procedure BerekenMinMaxGem (filenaam:string; var minimum, maximum, gemiddelde : real) var x, som : real; f : text; begin assign (f,‘filenaam’); reset(f); readln(f,x); if (x>=0) do begin minimum:=x; maximum:=x end; som:=x; n:=1; while not eof do begin n:=n+1; readln(f,x); som:=som+x; if x<minimum then minimum:=x if x>maximum then maximum:=x; gemiddelde := som/n; close(f); end; (* BerekenMinMaxGem *) begin (* hoofdprogramma *) BerekenMinMaxGem('invoer.txt',min, max, gemiddelde); writeln('Minimum : ,min:10:3); writeln('Maximum :',max:10:3); writeln('Gemiddelde :',gem:10:3); readln; end.
Pag. 6 van 6