C/Visual C - Matrix y Función

 
Vista:

Matrix y Función

Publicado por Bexy (2 intervenciones) el 28/11/2008 16:27:11
Hola, no me aclaro con el tran manido tema de pasar una matriz como parametro de una función... En mi caso tengo definida una matriz de la que quiero utilizar solamente una submatriz de dimensiones a, b en una función.

la matriz esta definida --> char miMatrix[FILS][COLS];
llamada a la función --> calcular(miMatrix, a, b);
cabecera de la función --> void calcular(char m[ ][ ] int subA, int subB) { .... }

He probado ha hacer lo siguiente dentro de la función:
int i,j;
for (i = 0; i < subA; i++) {
for (j = 0; j < subB; j++) {
printf("%c", m[i][j] );
}
}

Y el error que me lanza es: "Size of structure or array not known in function calcular"

Cuando le doy la dimensión [FILS][COLS] en la definicion de la función no hay problema. En principio la matriz va a ir variando de dimensiones así que en la práctica no puedo hacer eso.¿Alguien me puede explicar cuál es el error? Creí haber entendido que en los parámetros formales no se ponen las dimensiones de la matrix, pero algo falla...

Muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Matrix y Función

Publicado por Joriel (19 intervenciones) el 28/11/2008 17:50:18
mira lo q pasa es que tienes q especificar en tamano de la matriz por eso de vota ese error tienes q especificar las columnas en la matriz para que te quede claro asi seria.....

la matriz esta definida --> char miMatrix[FILS][COLS];
llamada a la función --> calcular(miMatrix, a, b);
cabecera de la función --> void calcular(char m[ ][5 ] int subA, int subB) { .... }

He probado ha hacer lo siguiente dentro de la función:
int i,j;
for (i = 0; i < subA; i++) {
for (j = 0; j < subB; j++) {
printf("%c", m[i][j] );
}
}

mira q puse el cinco en el parametro de la funcion eso es lo q te falta para q la funcion no te bote error...!!!!! eso era todo...!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Matrix y Función

Publicado por Bexy (2 intervenciones) el 28/11/2008 17:51:59
Hola Joriel y gracias!

Y cómo hago si cada vez que llamo a la función la matriz tiene un tamaño distinto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Matrix y Función

Publicado por Joriel (19 intervenciones) el 28/11/2008 18:39:03
Mira lo q tu quieres lo tuve como problema en un examen en la u....y yo como soy medio tonto lo q hice fue mandarle la dismensiones como variables a una funcion para hay crear una matriz distinta dentro de la funcion para realizar los calculos y lo q yo estaba haciendo era un atentado contra la programacion..... y tu caso es un poco similar

tu no puedes hacer eso con arreglos multidimensionales con arreglos de una sola dimension si, pero siempre en una funcion vas a tener q especificar la columna de la matriz lo que puedes hacer es q en la funcion principal hacer lo q tu quieres q te haga la funcion y si eso lo vas a repetir varias veces pones un do-while...para q no sea extenso el codigo..... y si quieres q te ayude mas especificame el problema completo para ver si lo puedes hacer de otra manera...!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Matrix y Función

Publicado por eduardo (82 intervenciones) el 29/11/2008 18:15:26
Tu prototipo de función puede tener una de las siguientes formas:

1) void calcular( char miMatrix[ FILS ][ COLS ], int a, int b );
2) void calcular( char miMatrix[][ COLS ], int a, int b );

e incluso:
3) void calcular( char miMatrix[ FILAS + 100000 ][ COLS ], int a, int b );

El primero se declara como un array delimitado, aunque el primer indice no importa(para el compilador), dado que C no comprueba los límites de un array en su primera dimensión y es irrelevante lo coloquemos o no (como el segundo método), es más podríamos colocar cualquier número en la primera dimensión(como el caso 3) dado que en realidad no se crea el array con esas dimensiones, simplemente se pasa un puntero q apunta al primer elemento del array.
El compilador necesita conocer la longitud de cada fila, es decir la segunda dimensión, de lo contrario sería imposible saber donde empieza la siguiente fila.
Ahora supongo que ese array bidimensional contiene cadenas y como tales deben tener un caracter nulo al final,
este caracter lo agregan de forma automática funciones como gets(), scanf() por lo que siempre debemos declarar las cadenas con un caracter mas de la cadena más larga que pueda contener.
Conocido esto podrías imprimir cada cadena de forma independiente o todas a la vez.

imprimir la cadena de la fila t:
void imprimir_fila( const char miMatrix[][ COLS ], const int t ) {
char *p;

p = miMatrix[ t ];

printf( " Fila %2d -> %s ", t, p );

}

imprimir todas las cadenas:
void imprimir_texto( const char miMatrix[][ COLS ], const int filas ) {
register int t;

for ( t = 0; t < filas; ++t )
printf( " Fila %2d -> %s ", t, texto[t] );

}


Donde filas debería ser un número entero obtenido en el proceso de lectura de las cadenas que indica el
total de cadenas ingresadas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar