Determinar si dos matrices son iguales

Iniciado por estudiante_1, 2 Enero 2016, 20:43 PM

0 Miembros y 1 Visitante están viendo este tema.

estudiante_1

Hola, he hecho un programa que me diga si dos matrices son iguales, y no me compila debido a la unica funcion que hay. El error que dice el compilador es unknown type a.
este es el codigo:
#include<stdio.h>
#include<stdlib.h>
     int iguales(int m[3][3],a[3][3],int i,int j){

     for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            if(m[i][j]==a[i][j]) return 1;
            else return 0;
        }
     }


     }

     int main(void){
      int m[3][3],i,j;
      int a[3][3];

             for(i=0;i<3;i++){
             for(j=0;j<3;j++){
             scanf("%d",&m[i][j]);
             }

             }
             printf("\n\t");

              for(i=0;i<3;i++){
              printf("\n");
             for(j=0;j<3;j++){

              printf("%6d ",m[i][j]);

             }
             }

             printf("\n");
             for(i=0;i<3;i++){
                for(j=0;j<3;j++){
                    scanf("%d",&a[i][j]);
                }
             }
                printf("\n\t");
                for(i=0;i<3;i++){
                        printf("\n");
                    for(j=0;j<3;j++){
                        printf("%6d ",a[i][j]);
                    }
                }
                printf("\n");

                  if(iguales(m,a,i,j)) printf("Son iguales\n");
                  else printf("No son iguales\n");







             system("pause");
             return(0);
             }



ivancea96

ienes que poner int antes del 'a'. Tal como dice el compilador, no se sabe el tipo de 'a'.

JavierScars

Exacto, además te recomendaría trabajar más limpio y ordenado.
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.

estudiante_1

si, es verdad de todas maneras no me funciona el programa, me dice que son iguales aunque la matrices sean distintas.

MAFUS

No te funciona porque a la primera iteración, la primera comparación,  ya retornas de la función. Solo comparas el primer elemento.
return termina la función sí o sí.
Debes rehacer la función.

Recomendación: establece una variable con un valor tal que indica que la función ha tenido éxito en ver que los dos arrays son iguales.
Empieza a realizar la comparación de forma iterativa.
Si encuentras que en algún momento son diferentes cambias el valor de la anterior variable y sales del bucle.
Retorna ek valor.

estudiante_1

#5
Cita de: MAFUS en  2 Enero 2016, 21:32 PM
No te funciona porque a la primera iteración, la primera comparación,  ya retornas de la función. Solo comparas el primer elemento.
return termina la función sí o sí.
Debes rehacer la función.

Recomendación: establece una variable con un valor tal que indica que la función ha tenido éxito en ver que los dos arrays son iguales.
Empieza a realizar la comparación de forma iterativa.
Si encuentras que en algún momento son diferentes cambias el valor de la anterior variable y sales del bucle.
Retorna ek valor.
Y cómo lo harías en código? no entiendo establecer una variable con un valor




creo que te refieres a algo así, aunque todavía sigue sin salir correcto, pues al introducir dos matrices iguales me dice que no lo son:
Citar#include<stdio.h>
#include<stdlib.h>
    int compi(int m[3][3],int a[3][3]){
    int i,j,comparacion;
    for(i=0;i<3;i++){
       for(j=0;j<3;j++){
        if(m[j]==a[j]) comparacion++;
       }
    }
  return(comparacion);

    }
    int soniguales(int m[3][3],int a[3][3],int comparacion){
    compi(m,a);
    if(comparacion==9) return 1;
    else return 0;






    }

    int main(void){
     int m[3][3],i,j;
     int a[3][3];
     int comparacion;

            for(i=0;i<3;i++){
            for(j=0;j<3;j++){
            scanf("%d",&m[j]);
            }

            }
            printf("\n\t");

             for(i=0;i<3;i++){
             printf("\n");
            for(j=0;j<3;j++){

             printf("%6d ",m[j]);

            }
            }

            printf("\n");
            for(i=0;i<3;i++){
               for(j=0;j<3;j++){
                   scanf("%d",&a[j]);
               }
            }
               printf("\n\t");
               for(i=0;i<3;i++){
                       printf("\n");
                   for(j=0;j<3;j++){
                       printf("%6d ",a[j]);
                   }
               }
               printf("\n");
                  compi(m,a);

                 if(soniguales(m,a,comparacion)) printf("Son iguales\n");
                 else printf("No son iguales\n");







            system("pause");
            return(0);
            }

MAFUS

Fallas en las llamadas y retornos de las funciones.
Antes de continuar con este programa vuelve a revisar el tema de las funciones:
Cómo llamarlas
Cómo pasarles patámetros y usarlos en la función
Cómo devolver un valor con la función y usarlo en el código llamante
Paso de valores por referencia a argumentos

Cuándo manejes bien estos aspectos, es media horita, vuelve al programa.

JavierScars

Pana te estas enredando más para algo tan censillo...
Primero guiate por el primer código que posteaste y sigue esto.
1) En la declaración de la función iguales declara el tipo del array a es decir ponle int adelante.
2) Crea una variable o algo en la función iguales  que al primer dato que no sea igual entre las dos matrices deje de conpara puesto que así como lo tienes solo debería comparar el primer dato. "Creo, me parece"
3)El if que revisa a la función iguales tienes que darle algo con que compararlo es decir if (igual(matrices) ==1) {imprimir iguales}
4)DIOS SE  NAS ORDENADO no se si es porque soy un poco noob pero me parece que deberías aunque sea comentar las cosas y para que sirven, identar, dejar espacio, saltos de línea, etc. Además usa los prototipos de las funciones y luego escribe las al final deja el main siempre de primero.

Saludos
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.