Faculteit der Exacte Wetenschappen Tentamen Inleiding Programmeren Vrije Universiteit 29 januari 1999 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) Geef declaraties voor de volgende constanten. Bedenk zelf een duidelijke naam voor iedere constante. Gebruik de correcte notatie voor de initiele waarde van de constanten. Geef, indien nodig, in commentaar aan om welke eenheden van een grootheid het gaat. - een double constante met de waarde nul om het vriespunt van water in te onthouden. - een int constante met de waarde 20 om het maximale aantal kilogram bagage in te onthouden. - een char constante om aan te geven welk scheidingsteken gebruikt wordt. Het gebruikte scheidingsteken is de puntkomma. - een String constante waarin een te stellen vraag onthouden wordt. De te stellen vraag begint met het character Z, eindigt met het character ? en luidt: Zei men: "OK"? b) Gegeven is dat de omtrek van een cirkel met straal r bekend kan worden met de formule 2 x pi x r en dat er in de class Math een constante PI zit met de waarde van pi. Schrijf een methode "omtrek" welke voor een willekeurige straal de omtrek van de cirkel met deze straal kan uitrekenen en retourneren. c) Gegeven is de onderstaande heading van een methode double benaderPi (int aantalTermen) Deze methode moet pi benaderen m.b.v. de volgende ontwikkeling pi = 4 x (1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - ......) Het aantal uit te rekenen termen, in de factor waarmee de constante 4 vermenigvuldigd wordt, is gelijk aan de waarde van de formele parameter aantalTermen. Programmeer deze methode. d) Declareer een variabele "matrix" die een twee-dimensinaal array van integers met 5 rijen en 8 kolommen bevat. Doe dit gestructureerd, d.w.z. gebruik indien nodig constanten. Schrijf een methode "positiefMatrix" die voor een willekeurig twee- dimensinaal arrays van integers kan controleren of dit array de eigenschap "positief" heeft. Voor deze opgave is gedefinieerd dat een matrix de eigenschap positief heeft als deze matrix meer positieve getallen (getallen > 0) bevat dan negatieve getallen (getallen < 0). d) Gegeven is het programma in de onderstaande class: class Opgave_1d { Output out; int a = 2, b = 3; 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? Z.O.Z. voor opgave 2 en 3 Opgave 2. Gegeven is de onderstaande class 'Boek'. class Boek { String titel, int aantalBladzijden; } a) Voeg aan de class Boek een constructor zonder parameters toe die het boek-object initialiseert op een leeg boek, d.w.z. dat het String-object als startwaarde de lege string krijgt en dat de primitieve variabele 'aantalBladzijden' als startwaarde de waarde 0 krijgt. b) Voeg nu aan de class Boek een tweede constructor met twee parameters toe. Deze parameters bevatten de startwaarden voor de twee variabelen van het Boek-object. c) Maak een class Bibliotheek welke, gebruik makend van de in de onderdelen a) en b) van deze vraag uitgebreidde class Boek, een object definieert dat maximaal 50000 boeken kan bevatten en een methode voegToe bevat om een boek aan de bibliotheek toe te voegen. d) Voeg aan de class biblotheek een methode 'aantalNovelles' toe die het aantal boeken met een minder dan 40 bladzijden telt. Pak dit gestructureerd aan door eerst aan de class Boek een methode 'novelle' toe te voegen. Opgave 3. a) Schrijf een recursieve methode "aantalCijfers" om het aantal cijfers van een willekeurig positief geheel getal te kunnen bepalen. De recursiestap hierbij is dat het aantal cijfers van een getal g gelijk is aan 1 plus het aantal cijfers van g/10. Bedenk zelf wat de stopconditie is. b) Gegeven zijn de onderstaande methodes: // gegeven: 0 <= i,j <= rij.length-1 */ void verwissel (int[] rij, int i, int j) { int hulp = rij[i]; rij[i] = rij[j]; rij[j] = hulp; } en // gegeven: het integer array rij bevat minimaal 1 element int indexMaximum (int[] rij, int lengte) { int index = 0, maximum = rij[index]; for (int i = 1; i < lengte; i++) { if (rij[i] > maximum) { index = i; maximum = rij[index] } } return index; } Schrijf een recursieve methode "sorteer" die ieder array van integers met 1 of meer elementen kan sorteren in monotoon niet-dalende volgorde door in een steeds kleiner wordende ongesorteerde deelrij het maximale element te verwisselen met het laatste element van die ongesorteerde deelrij. De bovenstaande twee gegeven methodes kunnen bij de implementatie van de methode sorteer gebruikt worden. Bedenk zelf de recursiestap en de stopconditie en leid daaruit af welke parameters de recursieve methode sorteer nodig heeft Waardering Opgave a b c d e f totaal 1. 2 2 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