Page 176

3.5 Paso de par´ametros for (j=0; j<TALLA; j++) matriz [i][j] = (i*j) % TALLA;

24 25 26

printf ("El m´ aximo es %d\n", maximo(matriz )); return 0;

27 28 29

}

El compilador no acepta ese programa. ¿Por qu´e? F´ıjate en la declaraci´on del par´ametro. ¿Qu´e hay de malo? C no puede resolver los accesos de la forma a[i][j]. Si recuerdas, a[i][j] significa ((accede a la celda cuya direcci´ on se obtiene sumando a la direcci´on a el valor i * COLUMNAS + j)), donde COLUMNAS es el n´ umero de columnas de la matriz a (en nuestro caso, ser´ıa TALLA). Pero, ¿c´ omo sabe la funci´ on cu´ antas columnas tiene a? ¡No hay forma de saberlo viendo una definici´ on del estilo int a[][]! La versi´ on correcta del programa debe indicar expl´ıcitamente cu´antas columnas tiene la matriz. Hela aqu´ı: pasa matriz.c 1

pasa matriz.c

#include <stdio.h>

2 3

#define TALLA 3

4 5 6 7

int maximo(int a[][ TALLA ]) { int i, j, m;

8

m = a[0][0]; for (i=0; i<TALLA; i++) for (j=0; j<TALLA; j++) if (a[i][j] > m) m = a[i][j];

9 10 11 12 13 14

return m;

15 16

}

17 18 19 20 21

int main(void) { int matriz [TALLA][TALLA]; int i, j;

22

for (i=0; i<TALLA; i++) for (j=0; j<TALLA; j++) matriz [i][j] = (i*j) % TALLA;

23 24 25 26

printf ("El m´ aximo es %d\n", maximo(matriz )); return 0;

27 28 29

}

No ha sido necesario indicar cu´ antas filas tiene la matriz (aunque somos libres de hacerlo). La raz´on es sencilla: el n´ umero de filas no hace falta para calcular la direcci´on en la que reside el valor a[i][j]. As´ı pues, en general, es necesario indicar expl´ıcitamente el tama˜ no de cada una de las dimensiones del vector, excepto el de la primera (que puedes declarar o no, a voluntad). S´olo as´ı obtiene C informaci´ on suficiente para calcular los accesos a elementos del vector en el cuerpo de la funci´ on. Una consecuencia de esta restricci´on es que no podremos definir funciones capaces de trabajar con matrices de tama˜ no arbitrario. Siempre hemos de definir expl´ıcitamente el tama˜ no de cada dimensi´ on excepto de la primera. Habr´a una forma de superar este inconveniente, pero tendremos que esperar al siguiente cap´ıtulo para poder estudiarla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . · 197 Vamos a dise˜ nar un programa capaz de jugar al tres en raya. El tablero se representar´a con una matriz de 3 × 3. Las casillas ser´an caracteres. El espacio en blanco representar´a una casilla vac´ıa; el car´ acter ’o’ representar´a una casilla ocupada con un c´ırculo y el car´acter ’x’ representar´ a una casilla marcada con una cruz. 170

Introducci´ on a la Programaci´ on con C

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement