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);
}
ienes que poner int antes del 'a'. Tal como dice el compilador, no se sabe el tipo de 'a'.
Exacto, además te recomendaría trabajar más limpio y ordenado.
si, es verdad de todas maneras no me funciona el programa, me dice que son iguales aunque la matrices sean distintas.
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.
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);
}
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.
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