Faculteit Wiskunde en Informatica Tentamen Inleiding Programmeren Vrije Universiteit 21 januari 1998 tijdsduur : 3 uur ------------------------------------------------------------------------------- Voor alle opgaven in dit tentamen zijn de volgende declaraies gegeven: Output out = new Output(); Input in = new Input(); Er kan in opgaven waar dit gewenst is dus zonder meer gebruik gemaakt worden van de variabelen in en out voor inlezen respectievelijk afdrukken. Opgave 1. a) Declareer een constante 'CIJFERS' welke in de declaratie als startwaarde een int-array krijgt. De waarden van de elementen van deze arrayconstante moeten de getallen 0 t/m 9 (in die volgorde) zijn. Declareer een stringconstante 'CITAAT' met onderstaande tekst (welke begint met de hoofdletter 'H' en eindigende met het leesteken '.') als startwaarde: Hij zei: "OK". b) Leg uit wat in JAVA het effect van het break-statement is. Leg uit wat in JAVA het effect van het continue-statement is. N.B.: Ben volledig bij je bespreking. c) Voor een hier niet nader beschreven toepassing is er behoefte aan een eenvoudige codering van strings. De gekozen eenvoudige codering houdt in dat ieder character van de string wordt vervangen door de opvolger van dat character volgens de Unicode. Het eerste character volgens de Unicode wordt voor deze codering als opvolger van het laatste character van deze code beschouwd. Schrijf een methode die deze codering realiseert en die kan worden gebruikt om willekeurige strings mee te coderen. Bedenk zelf of en welke parameters er nodig zijn en welk type de methode zal retourneren. d) Gegeven is het programma in de onderstaande class: class Opgave_1c { Output out; int a = 2, b = 3; Opgave_1c() { out = new Output(); } int methode1 (int c, int b) { int a = c; methode2(c); b = a + c; out.println(a); out.println(b); return b; } void methode2(int a) { if (a%2 == 0) { a += 2; } else { a += 3; } 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_1c().start(); } } welke uitvoer geeft dit programma? Opgave 2. Gegeven is de onderstaande class 'Tentamen'. class Tentamen { String naamStudent, studierichtingStudent; int beoordeling; } a) Voeg aan de class Tentamen een constructor zonder parameters toe die het tentamen-object initialiseert op een leeg tentamen, d.w.z. dat de twee String-objecten als startwaarde de lege string krijgen en dat de primitieve variabele 'beoordeling' als startwaarde het getal 0 krijgt. b) Voeg nu aan de class Tentamen een tweede constructor met drie parameters toe. Deze parameters bevatten de startwaarden voor de drie variabelen van het Tentamen-object. c) Hoe heet het principe van JAVA dat het mogelijk maakt om twee methodes te hebben met dezelfde identifier als naam? Hoe weet de JAVA-compiler, als er verschillende methodes met dezelfde naam zijn, welke van deze methodes bedoeld wordt bij een aanroep? d) Maak een class TentamenRij welke, gebruik makend van de in de onderdelen a) en b) van deze vraag uitgebreidde class Tentamen, een object definieert dat maximaal 200 tentamens kan bevatten en een methode voegToe bevat om een tentamen aan de tentamenrij toe te voegen. e) Voeg aan de class TentamenRij een methode 'aantalVoldoendes' toe die het aantal tentamens met een beoordelingen >= 6 telt. Pak dit gestructureerd aan door eerst aan de class Tentamen een methode 'voldoende' toe te voegen. f) Gegeven is dat in een class die gebruik maakt van de class TentamenRij de volgende declaratie staat: TentamenRij tentamenRij = new TentamenRij(); Schrijf voor deze class een methode 'onvoldoendePercentage' welke het percentage onvoldoendes in 'tentamenRij' retourneert. Opgave 3. a) Geef een recursieve implementatie van de onderstaande methode: void print (int[] r, int start, int eind) // neem aan: 0<=start<=r.length en 0<=eind<=r.length-1 // start<=eind: druk de elementen r[start] t/m r[eind] af // start>eind : druk niets af 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 e f totaal 1. 2 2 4 4 12 2. 2 2 2 4 4 2 16 3. 4 4 8 -- + 36 Het eindcijfer E volgt uit het puntentotaal T als volgt : E = T / 4 + 1