El algoritmo no comprueba que el usuario está introduciendo una matriz simétrica, es decir, que coincide con su transpuesta (o lo que es lo mismo, que cada elemento A[i][j] es igual al elemento A[j][i]). No sé si me pedirán modificar esto, pero lo voy a hacer porque además me resultará más cómodo mañana saber si estoy metiendo matrices simétricas.
Una forma es especificarle al programa que no le pida al usuario introducir el elemento A[j][i] si ya ha introducido el A[i][j], pero prefiero que dé un error y pida introducir una matriz nueva.
Este es el algoritmo para que el usuario introduzca los elementos de la matriz.
Code: Select all
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("\nelemento [%d][%d]= ",i,j);
scanf("%f",&A[i][j]);
//#ifdef DEBUG
printf("%f \n",A[i][j]);
//#endif
}
}
No sé muy bien qué hace el #ifdef DEBUG, pero es lo que hay y no molesta.
Entonces mi plan es que haga que el usuario introduzca los elementos de la matriz y, si no cumple la condición del while, entonces vuelve a pedir que los introduzca.
La condición de que la matriz no sea simétrica (y por tanto vuelva a repetir el input) es:
Code: Select all
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
A[i][j]!=A[j][i];
}
}
Por tanto, utilizando la estructura do-while y según mi lógica, quedaría algo así:
Code: Select all
do
{
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("\nelemento [%d][%d]= ",i,j);
scanf("%f",&A[i][j]);
//#ifdef DEBUG
printf("%f \n",A[i][j]);
//#endif
}
}
}
while
(
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
A[i][j]!=A[j][i];
}
}
);
Esto al compilador no le mola y me imagino que a la gente que entiende de C/C++ tampoco. ¿No puedo introducir un bucle en la condición del while? Porque claro, yo quiero que revise la condición para todos los elementos A[i][j].
Otra opción es decirle en el propio input que compruebe si el elemento A[j][i] es igual que el elemento A[i][j] para todos los elementos con j>i (porque si no, lo comprobaría con las primeras entradas y otras que aún no hemos introducido). Sin embargo, yo creo que esto es más sucio y complicado.
¡Muchas gracias!