Faculteit der Exacte Wetenschappen Tentamen Inleiding Programmeren Vrije Universiteit 24 maart 2000 tijdsduur : 3 uur ------------------------------------------------------------------------------- DIT TENTAMEN KAN NIET GEMAAKT WORDEN DOOR STUDENTEN DIE HET VAK INLEIDING PROGRAMMEREN II MOETEN HALEN Opgave 1. a) Leg uit waarom het voor een methode wel mogelijk is de inhoud van een als actuele parameter meegegeven object te veranderen en niet mogelijk is om de de inhoud van een als parameter meegegeven variabele van een primitief type te veranderen. Kan een methode de inhoud van een als actuele parameter meegegeven array van booleans veranderen? Verklaar je antwoord. b) Schrijf een methode int grootsteTweemacht (int n) die de grootste macht van 2 uitrekent die niet groter is dan n. Gegeven is dat n >= 1. Maak geen gebruik van de wiskundige methodes uit de class Math. c) Declareer een variabele "matrix" die een twee-dimensionaal array met elementen van het type int van 5 rijen en 12 kolommen bevat. Doe dit gestructureerd, d.w.z. gebruik indien nodig constanten. Schrijf een methode "sommatieOneven" die voor een willekeurig tweedimensinaal array van int's kan retourneren wat de sommatie is van de getallen waarvan of de rij-index of de kolom-index oneven is. Gebruik niet meer dan twee herhalingsstatements. 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 a, int c) { int b = a; c = a * c; methode2(c); out.println(a); out.println(c); return b; } void methode2 (int a) { b = b - a; a = b + a; out.println(a); out.println(b); } void start() { methode2(a); a = methode1(b, a); out.println(a); out.println(b); } public static void main(String argv[]) { new Opgave_1d().start(); } } Welke uitvoer geeft dit programma? Opgave 2. a) Maak een class Adres voor het opslaan van een adres bestaande uit straatnaam, huisnummer, postcode en woonplaats. Voorzie de class Adres van een constructor met parameters om alle velden van de class Adres te initialiseren bij het aanmaken van een nieuw adres object. b) Maak een class Adresboek welke een object definieert waarin maximaal 500 adressen kunnen worden opgeslagen. Voorzie de class Adresboek van een default constructor en een methode voegToe() om een adres toe te voegen aan het adresboek. c) Voeg aan de class Adresboek de onderstaande methode zoek() toe die, gegeven een willekeurige postcode, in een nieuw adresboek alle adressen retourneert die de gezochte postcode hebben. Adresboek zoek (String postcode) Pak dit gestructureerd aan door eerst aan de class Adres een methode toe te voegen die gebruikt kan worden om voor een postcode te testen of dit de postcode van een adres-object is. Opgave 3. a) Schrijf een recursieve methode drukAf() die de cijfers van een willekeurige geheel getal in omgekeerde volgorde afdrukt. Bij het gehele getal 12345 moet de uitvoer dus zijn: 54321 b) De onderstaande methode zoekt in een willekeurige array van int's tussen de elementen op de indexplaatsen van 'start' t/m 'eind' of een van de elementen gelijk is aan het gezochte element 'x'. boolean binarySearch (int[] rij, int start, int eind, int x) Als gegeven is dat het te doorzoeken int array 'rij' bij aanroep van de methode binarySearch() gesorteerd is, geef dan een recursieve implementatie van het binary search algoritme. BEKNOPTE BESCHRIJVING BINARY SEARCH Bij binary search wordt de index 'midden' bepaald van het element dat midden tussen de elementen met de indices 'start' en 'eind' in ligt. Vervolgens wordt gekeken of het gezochte getal gelijk is aan het element met de index 'midden'. Zo nee, dan wordt verdergezocht in de deelrij links of recht van het element met index 'midden'. Waardering Opgave a b c d e f totaal 1. 4 4 4 4 16 2. 2 4 6 12 3. 3 5 8 -- + 36 Het eindcijfer E volgt uit het puntentotaal T als volgt : E = T / 4 + 1