Uitwerkingen Tentamen Inleiding Programmeren in C++ voor LS&Ters maandag 26 augustus 2002 1.a. double middel (double x, double y, double z) { if ( ( x < y && y < z ) || ( z < y && y < x ) ) return y; else if ( ( y < x && x < z ) || ( z < x && x < y ) ) return x; else return z; } // middel b. int fac (int n) { int i, res = 1; for ( i = 1; i <= n; i++ ) res = res * i; return res; } // fac c. int binom (int n, int k) { return fac (n) / ( fac (k) * fac (n-k) ); } // binom d. bool controle (char woordje[6], char verhaal[100]) { int i, j; bool okee; for ( i = 0; i < 100-6+1; i++ ) { okee = true; for ( j = 0; j < 6; j++ ) if ( woordje[j] != verhaal[i+j] ) okee = false; if ( okee ) return true; } // for return false; } // controle 2.a. void wissel (double A[n], int i, int j) { double temp = A[i]; A[i] = A[j]; A[j] = temp; } // wissel b. void sorteer (double A[n]) { int i, ronde; for ( ronde = 1; ronde < n; ronde++ ) for ( i = 0; i < n-ronde; i++ ) if ( A[i] > A[i+1] ) wissel (A,i,i+1); } // sorteer c. (n-1) + (n-2) + ... + 3 + 2 + 1 = n (n-1) / 2 d. Doe EEN bubblesort-ronde naar rechts, en dan EEN naar links. 3.a. Globale variabelen gelden in het gehele programma, en worden helemaal bovenin aangemaakt. Locale variabelen gelden (tijdelijk) alleen in de functie waarin ze aangemaakt zijn. Variabelen kunnen call by value en call by reference worden meegegeven aan een functie. Bij call by value gaat alleen de waarde van de parameter naar de functie, alwaar een locale variabele deze waarde opvangt, en er met deze locale variabele wordt verder gerekend. De oorspronkelijk variabele behoudt zijn waarde. Bij call by reference gaat als het ware de variabele zelf naar de functie, en kan dan ook blijvend veranderd worden. Eigenlijk wordt het adres (de reference) doorgegeven. b. 16 24 3 23 2 15 15 23 2 38 23 2 15 c. 16 24 3 24 3 16 25 4 17 29 4 17 25 d. 7 7 7 4 4 4 4 4 4 8 4 12 15 e. Ja, mits de x-parameter (de eerste) van fghij call by value is. 4.a. int aantal (int A[n][n], int X) { int tel = 0, i, j; for ( i = 0; i < n; i++ ) for ( j = 0; j < n; j++ ) if ( A[i][j] == X ) tel++; return tel; } // aantal b. bool uniek (int A[n][n]) { int i, j; for ( i = 0; i < n; i++ ) for ( j = 0; j < n; j++ ) if ( tel (A,A[i][j]) != 1 ) return false; return true; } // uniek c. void doe ( int A[n][n], int i, int j) { if ( i-1 >= 0 ) A[i-1][j]++; if ( i+1 < n ) A[i+1][j]++; if ( j-1 >= 0 ) A[i][j-1]++; if ( j+1 < n ) A[i][j+1]++; } // doe d. void verander (int A[n][n]) { int i = 0; while ( i < n && uniek (A) ) { doe (A,i,i); i++; } // while } // verander