C/Visual C - Matriz como argumento de función

 
Vista:

Matriz como argumento de función

Publicado por Daniel (1 intervención) el 19/09/2004 13:27:56
Hola a todos!
Estoy empezando a programar en C por mi cuenta.
Utilizo GCC 3.3.3 en una Debian GNU/Linux.
El asunto por el que escribo es el siguiente:

Estoy editando un programa en el que declaro una matriz bidimensional en la función main() y empiezo a trabajar con ella pasándola de parámetro a funciones. El código resumido sería:

int n, m;

void Inicio() {
.....
}

void Rellenar (double A[n][m]) {
...
}

void Mostrar(double A[n][m]) {
... /* Muestra todos los valores de la matriz según lo asignado */
}

void Comprobacion (double A[n][m]) {

printf("%ld", A[1][3]); /* Imprime 0.000000 */

if (A[1][3] == 0.000000) {
print ("Correcto\n");
} else {
print ("Incorrecto\n");
}

/* Imprime incorrecto aunque valga 0.000000 */
}

int main (void) {
Incio(); /* Función que pide a el usuario la dimensión del matriz
* y la almacena en la variables globales n y m */

double matriz[n][m]; /* Declaración de la matriz con la que trabajo */

Rellenar(matriz); /* Relleno la matriz con valores */

Mostrar(matriz); /* Muestra todos los valores de la matriz correspondiendo
* con los asignados en Rellenar */

Comprobar(matriz); /* Aquí es donde empieza a fallar el programa */
}

¿Hago bien el paso de la matriz? ¿Qué es lo que falla en la comparación?

PD: La función Comparación no falla siempre. Depende según los datos asignados en la matriz. Con los que no falla, no falla nunca y con los que falla, falla siempre.

Gracias por su atención y ayuda.
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

No intentes comparar numeros con punto flotante

Publicado por s (16 intervenciones) el 19/09/2004 14:23:14
Hola.

Una de las reglas en cuanto a comparación de números es que no es recomendable comparar numeros con punto flotantes. Debido a la representación interna de cada uno de ellos, muchas veces las comparaciones no se realizan de la forma en que debieran.
Lo mejor es convertirlos a enteros y entonces realizar la comparación. Siguiendo tú código sería bueno el cambio así:

if ( (int)A[1][3] == 0) {
print ("Correcto\n");
.....
}

Saludos.
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:No intentes comparar numeros con punto flotante

Publicado por chuidiang (677 intervenciones) el 21/09/2004 15:31:56
Es cierto lo que te dice zorrogris, pero lo de convertirlos a enteros depende de por donde andes comparando.

Por ejemplo, para ver si vale cero, te puede valer. Sin embargo, si quieres saber si el valor es 3.74, no puedes convertir a entero.
Es mas general ver si la difrencia en valor absoluto es menor que un cierto limite

if ( fabs (A[1][3] - 0.0000) < 0.00001)

Se bueno.
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