Faculteit der Exacte Wetenschappen Tentamen Inleiding Programmeren Vrije Universiteit 28 januari 2000 tijdsduur : 3 uur ------------------------------------------------------------------------------- Opgave 1. a) Is het voor een methode mogelijk om de inhoud van een als parameter meegekregen object te veranderen? Verklaar je antwoord. Wat is de uitvoer van het onderstaande stukje code? Verklaar je antwoord. Output out = new Output(); String s = "declaratie"; int i = 0; void init (String string, int i) { string = new String("test"); i = 10; } init(s, i); out.println(s); out.println(i); b) Schrijf een methode int grootsteZevenvoud (int n) die het grootste zevenvoud uitrekent dat niet groter is dan n. Gegeven is dat n >= 0. Een zevenvoud is een getal dat deelbaar is door 7. Maak geeb gebruik van de operatie % (modulo) of van een van de wiskundige methodes uit de class Math. c) Declareer een variabele "matrix" die een twee-dimensionaal array met elementen van het type double van 13 rijen en 13 kolommen bevat. Doe dit gestructureerd, d.w.z. gebruik indien nodig constanten. Schrijf een methode "gemiddeldeBovenDiagonaal" die voor een willekeurig tweedimensinaal vierkant array van doubles kan retourneren wat het gemiddelde is van de getallen die in de matrix, boven de diagonaal die van linksboven naar rechtsonder loopt, staan. d) Gegeven is het programma in de onderstaande class: class Opgave_1d { Output out; int a = -1, b = 4; Opgave_1d() { out = new Output(); } int methode1 (int c, int b) { int a = c; b = a + c; c = b * a; methode2(c); out.println(a); out.println(c); return b; } void methode2(int b) { b = b + a; a = a + b; out.println(a); out.println(b); } void start() { b = methode1(a, b); methode2(a); out.println(a); out.println(b); } public static void main(String argv[]) { new Opgave_1d().start(); } } Welke uitvoer geeft dit programma? Opgave 2. Voor een hier niet nader genoemd wetenschappelijk onderzoek worden metingen uitgevoerd waarvan de resultaten als punten in het XY-vlak getekend zullen worden. Hiervoor zijn de onderstaande classes 'Coordinaten' en 'Punt' gegeven. De class Coordinaten geeft de coordinaten aan waar het meetpunt getekend moet worden en de class Punt bevat informatie over het meetpunt (o.a. de coordinaten). class Coordinaten { int x, y; } class Punt { Coordinaten coordinaten; String datumMeting; int nummer; } a) Voeg aan de class Coordinaten een constructor met twee parameters toe die het Coordinaten-object initialiseert op de via de parameters ontvangen x- en y-coordinaat. b) Voeg aan de class Punt een constructor zonder parameters toe die het Punt-object initialiseert op een leeg punt, d.w.z. dat de coordinaten (0,0) zijn, het String-object de lege string is en het nummer 0 is. c) Maak een class Meting welke een object definieert dat een meting van maximaal 150 punten kan bevatten en een methode voegToe bevat om een punt toe te voegen aan de meting. d) Voeg aan de class Meting een methode int aantalInRange(int ondergrens, int bovengrens) toe die telt hoeveel punten van een meting een nummer hebben dat in de range ondergrens..bovengrens (inclusief onder- en bovengrens) ligt. Pak dit gestructureerd aan door eerst aan de class Punt een methode met de naam 'inRange' toe te voegen. Opgave 3. a) 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 heading van de methode pascal moet er als volgt uitzien: 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. b) Gegeven is de onderstaande class C. class C { int i; String s; C c; C (int integer, String string, C cObject) { i = integer; s = string; c = cObject; } boolean gelijk (C rechterOperand) { /* Deze methode vergelijkt het object met de parameter rechterOperand en retourneert true als - de variabelen i en s van het object dezelfde waarde hebben als de overeenkomstige variabelen van de parameter rechterOperand en - de variabele c van het object gelijk is aan de overeenkomstige variabele van de parameter rechterOperand. */ } } Geef een recursieve implementatie van de methode gelijk() uit de class C. Gebruik als stopcondities dat de parameter rechterOperand en/of de variabele c van het object gelijk aan null kunnen zijn. Waardering Opgave a b c d e f totaal 1. 4 4 4 4 16 2. 2 2 4 4 12 3. 3 5 8 -- + 36 Het eindcijfer E volgt uit het puntentotaal T als volgt : E = T / 4 + 1