Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: estudiante_1 en 2 Enero 2016, 20:43 pm



Título: Determinar si dos matrices son iguales
Publicado por: estudiante_1 en 2 Enero 2016, 20:43 pm
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:
Código:
#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);
             }



Título: Re: Determinar si dos matrices son iguales
Publicado por: ivancea96 en 2 Enero 2016, 20:48 pm
ienes que poner int antes del 'a'. Tal como dice el compilador, no se sabe el tipo de 'a'.


Título: Re: Determinar si dos matrices son iguales
Publicado por: JavierScars en 2 Enero 2016, 21:10 pm
Exacto, además te recomendaría trabajar más limpio y ordenado.


Título: Re: Determinar si dos matrices son iguales
Publicado por: estudiante_1 en 2 Enero 2016, 21:11 pm
si, es verdad de todas maneras no me funciona el programa, me dice que son iguales aunque la matrices sean distintas.


Título: Re: Determinar si dos matrices son iguales
Publicado por: 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.


Título: Re: Determinar si dos matrices son iguales
Publicado por: estudiante_1 en 3 Enero 2016, 19:25 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);
             }


Título: Re: Determinar si dos matrices son iguales
Publicado por: MAFUS en 3 Enero 2016, 19:43 pm
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.


Título: Re: Determinar si dos matrices son iguales
Publicado por: JavierScars en 3 Enero 2016, 19:56 pm
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