Faculteit Wiskunde en Informatica Toets Inleiding Programmeren Vrije Universiteit 12 december 1997 tijdsduur : 1:30 uur ------------------------------------------------------------------------------- Opgave 1. a) Gegeven is het programma in de onderstaande class: class Opgave_1a { Output out; int a = 0, b = 1, c = 2, d = 3; Opgave_1a() { out = new Output(); } int methode1 (int a, int b) { int c = d - a; d = c + b; return methode2(d, c); } int methode2 (int c, int d) { int b = a + c; d = b + c; out.println(a); out.println(b); out.println(c); out.println(d); return b + d; } void start() { a = methode1(a, a); b = methode2(methode1(a, a), b); out.println(a); out.println(b); out.println(c); out.println(d); } public static void main(String argv[]) { new Opgave_1a().start(); } } Welke uitvoer geeft dit programma? VERVOLG OPGAVE 1 b) Gegeven is het volgende stukje programma: Output out = new Output(); String s1 = "abcdef", s2 = "abcdef", s3; s3 = s2; if (s1 == s2) { out.print('X'); } if (s1 == s3) { out.print('Y'); } if (s2 == s3) { out.print('Z'); } out.println(); Welke uitvoer geeft dit stukje programma? c) Gegeven is de onderstaande class class Student { String naam; int leeftijd; Student() { naam = ""; leeftijd = 0; } } Na de declaratie Student x; is er nog geen object aangemaakt dat een instantie van de class Student is. Wat er er wel aangemaakt? Geef een statement waardoor er wel een object aangemaakt wordt dat een instantie is van de class Student. Doe dit op zo'n manier dat dit object via de variabele x gebruikt kan worden. Programmeer voor de class Student de onderstaande constructor: Student (String naam, int leeftijd) welke de velden naam en de leeftijd van het student-object initialiseert op respectievelijk de formele parameters naam en leeftijd van de constructor. Z.O.Z. VOOR OPGAVE 2 EN 3 Opgave 2. a) Declareer een int-array 'rij' met 100 elementen. Gebruik een (gedeclareerde) constante. b) Gegeven is dat op een regel invoer 100 gehele getallen staan. Verder is gegeven dat de getallen onderling gescheiden zijn door puntkomma's en dat de leeswijzer naar het eerste cijfer van het eerste getal wijst. Schrijf een methode waarmee deze 100 getallen kunnen worden ingelezen en in het in onderdeel a) gedeclareerde int-array 'rij' gestopt kunnen worden. Laat zien hoe je methode moet worden aangeroepen om dit doel te bereiken. c) Schrijf een methode aantalParen die voor ieder volledig gevuld int-array, ongeacht de lengte, kan retourneren hoeveel negatief-positief paren dit int-array bevat. Er is sprake van een negatief-positief paar als het i-de getal negatief en het (i+1)-ste getal (indien bestaand) positief is. Opgave 3. a) Het kenmerk van een recursieve methode is dat deze methode zichzelf aanroept. Deze recursieve aanroep wordt de recursiestap genoemd. Wat moet er, buiten de recursiestap, nog meer aanwezig zijn in iedere recursieve methode wil deze methode correct kunnen werken? Bij het programmeren van een recursieve methode wordt er vanuit gegaan dat de recursiestap werkt. Onder deze aanname wordt de recursieve methode dan zelf ook werkend gemaakt. Leg in het kort uit wanneer en waarom de aanname dat de recursiestap werkt juist is. b) Uit de wiskunde is de driehoek van Pascal bekend. Hieronder staan de eerste zes rijen van deze driehoek. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 Voor deze opgave zullen we deze rijen beginnen te nummeren met 1, zodat van het afgedrukte gedeelte van de driehoek de bovenste rij (waar alleen de '1' in staat) de rij met nummer 1 is en de onderste rij de rij met nummer 6 is Voor een willekeurige rij met nummer i geldt dat deze rij i elementen bevat. Als we pascal(i,j) definieren als het j-de getal van de i-de rij, dan geldt dat dit getal gelijk is aan 1 als j het eerste of het laatste getal van de i-de rij aanwijst. Voor ieder getal dat tussen het eerste en laatste getal van een rij inligt, geldt dat dit getal verkregen wordt door uit de voorgaande rij het (j-1)-ste en j-de getal te sommeren. Schrijf een recursieve methode pascal om het j-de getal van de i-de rij te bepalen. De declaratie van de methode pascal moet als volgt beginnen: int pascal (int i, int j) { Bij het schrijven van de methode mag er vanuit gegaan worden dat de aanroep correct zal zijn, m.a.w. aanroepen als Pascal(1, 10) of met waarden van de actuele parameters <= 0, zullen niet voorkomen. Waardering Opgave a b c d totaal 1. 6 3 5 14 2. 2 6 6 14 3. 3 5 8 -- + 36 Het eindcijfer E volgt uit het puntentotaal T als volgt : E = T / 4 + 1