Uitwerking Tentamen Programmeren 1 - Java maandag 4 november 2002 1. a. In serie[2001]. b. Java wordt gecompileerd (naar bytecode), JavaScript wordt regel voor regel geinterpreteerd. Java is "strenger": er wordt bijvoorbeeld bij variabelen erop gelet of ze wel gedeclareerd zijn, en bij toekenningen moeten de types precies kloppen. JavaScript ziet wat meer door de vingers. Java is een complete programmeertaal, JavaScript verzorgt (kleinere) programma's in HTML-pagina's. c. 130 respectievelijk Som: 4090. respectievelijk Som: 130. In het tweede geval worden de strings "opgeteld": achter elkaar geplakt. d. if ( event.getSource ( ) == knop ) ... else if ( event.getSource ( ) == tekstveld ) ... 2. a. public int kl (int[ ] A) { int i, klein = A[0]; for ( i = 1; i < A.length; i++ ) { if ( A[i] < klein ) klein = A[i]; return klein; } // kl b. public int eenna (int[ ] A) { int i, klein = A[0], een = A[1]; if ( A[0] > A[1] ) { klein = A[1]; een = A[0]; } // if for ( i = 2; i < A.length; i++ ) { if ( A[i] < klein ) { een = klein; klein = A[i]; } // if else if ( A[i] < een ) een = A[i]; } // for return een; } // eenna c. Doe herhaald (n/2 keer) het volgende: zoek de kleinste en daarna de eennakleinste van de "rest", en wissel deze met de twee voorste elementen (daarbij moet je nog een beetje oppassen overigens). De twee voorste elementen hoef je dan niet meer te bekijken, die verdwijnen uit de "rest". 3. a. De functie doewat mishandelt de globale variabele globaal. In doewat is temp een locale variabele, die even gebruikt wordt en daarna weer verdwijnt. De locale variabele x krijgt bij aanroep de waarde van de "actuele" parameter (bijvoorbeeld 3 bij aanroep doewat (3)); veranderingen aan deze x zijn plaatselijk. b. Respectievelijk: 5 3 13 5 3 13 5 3 11 13 3 13 5 3 13 5 3 11 4. a. public int willekeur (int k) { return (int) (k * Math.random ( ) + 1); } // willekeur b. int[ ][ ] A = new int[m][n]; for ( int i = 0; i < A.length; i++ ) for ( int j = 0; j < A[0].length; j++ ) A[i][j] = willekeur (10) - 1; c. public int hoeveel (int[ ][ ] A, int i) { int getal = 0; int j; for ( j = 0; j < A[0].length; j++ ) getal = 10 * getal + A[i][j]; return getal; } // hoeveel Voor n=5: return A[i][0]*10000 + A[i][1]*1000 + A[i][2]*100 + A[i][3]*10 + A[i][4] 5. a. A wordt eerst: 10 10 10 10 10 10 10 10 10 10 en B: 5 6 7 8 9 10 11 12 13 14 Na de functieaanroepen: A is dan: 0 10 10 10 10 10 10 10 10 0 en B: 0 6 7 8 9 10 11 12 13 0 b. Als je in Java een array doorgeeft aan een functie kan de functie WEL de array-inhoud wijzigen! Dit in tegenstelling tot het doorgeven van integers! Eigenlijk geef je namelijk het adres van het array door, en dat adres kan niet veranderen. c. F maakt een array B (even groot als A) met -1's gevuld. Daarna worden de niet-nullen uit A achtereenvolgens in B gezet. Voorbeeld: A is 1 7 0 2 5 0 6 B wordt eerst -1 -1 -1 -1 -1 -1 -1 en later: 1 7 2 5 6 -1 -1