Faculteit der Exacte Wetenschappen Toets Inleiding Programmeren Vrije Universiteit 11 december 1998 tijdsduur : 1:30 uur ------------------------------------------------------------------------------- Opgave 1. a) Wat is het verschil tussen globale en lokale variabelen? Wat is het verschil tussen actuele en formele parameters? b) Gegeven is de onderstaande class 'X': class X { int waarde; X (int i) { waarde = i; } } In een andere class staan de declaraties: Output out = new Output(); X getal = new X(100); void maakLeeg (X x) { x.waarde = 0; } en de opdrachten: maakLeeg(getal); out.println(getal.waarde); Beredeneer welke waarde er wordt afgedrukt. c) Voordat de zoekmethode binary search gebruikt kan worden om in een rij waarden een gezochte waarde 'x' te zoeken moet die rij waarden aan een voorwaarde voldoen. Welke voorwaarde is dit? Buiten binary search is er nog een tweede zoekmethode behandeld. Hoe heet deze methode? Opgave 2. a) Schrijf alle benodigde declaraties op om een variabele 'rij' te declareren die een referentie naar een array-object van 100 integers bevat. b) Programmeer de onderstaande methode 'maximum()' die het maximum van alle elementen in een array van integers retourneert. Gegeven is dat het array dat bij de aanroep van de methode als actuele parameter wordt meegegeven altijd helemaal gevuld is, m.a.w. het maximale aantal elementen bevat. Verder mag je aannemen dat het array minimaal 1 element bevat. int maximum (int[] rij) { ... ... } c) Gegeven is de volgende class: class Veld { boolean leeg; Veld () { leeg = true; } boolean isLeeg () { return leeg; } boolean isBezet () { return ! leeg; } } Maak een class 'Bord' die een 2-dimensionaal array met 10 rijen en 15 kolommen van Veld-objecten bevat. Verder hoeft deze class alleen een default-constructor te bevatten. Deze default-constructor initialiseert het bord op het lege bord. Het lege bord is het bord dat uit allemaal lege velden bestaat. d) Schrijf voor je class Bord uit onderdeel c) van deze vraag een methode 'aantalVolledigBezetteKolommen()' die retourneert hoeveel kolommen van het bord volledig bezet zijn. Een kolom is volledig bezet als alle Veld-objecten in de kolom bezet zijn. Werk gestructureerd, d.w.z. gebruik indien nodig constanten, extra variabelen en private methodes om deelproblemen in op te lossen. Z.O.Z. voor opgave 3 Opgave 3. a) De driehoeksgetallen zijn als volgt gedefinieerd: d(0) = 0 d(1) = 0+1 d(2) = 0+1+2 d(3) = 0+1+2+3 d(4) = 0+1+2+3+4 enz. Schrijf een recursieve methode voor de berekening van het i-de (i >= 0) driehoeksgetal). b) Uit de wiskunde zijn de zogenaamde Stirling-getallen {k, r} bekend. Deze zijn gedefinieerd als het aantal verschillende manieren om een verzameling van k elementen in r disjuncte verzamelingen te splitsen. Voor k, r >= 0 geldt: {k, r} = r * {k-1, r} + {k-1, r-1} en {k, 0} = 0 {0, r} = 0 {0, 0} = 1 {k, k} = 1 Schrijf een recursieve methode "stirling" die voor willekeurige waarden van k en r retourneert op hoeveel verschillende manieren een verzameling van k elementen in r disjuncte verzamelingen gesplitst kan worden. Neem aan: k>=0 en r>=0. Waardering Opgave a b c d totaal 1. 4 4 4 12 2. 2 4 4 6 16 3. 3 5 8 -- + 36 Het eindcijfer E volgt uit het puntentotaal T als volgt : E = T / 4 + 1