UTNianos

Versión completa: [Ayuda] Algoritmo cuadrado Magico
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola! Tengo que hacer un programa en c++ que haga un cuadrado mágico, con n de 3 a 25. No se en que me estoy equivocando en el código, pero me hace cualquier cosa, si alguien me puede ayudar...

Copio el codigo:

int main(int argc, char** argv) {
int dim; // Esta variable almacena la dimensión de la matriz. Puede 3<=dim<=25
int f; // para indicar la fila de la matriz
int c; // para indicar la columna de la matriz.
int i; // va a ser mi contador

cout<<"Ingrese el valor de la matriz: ";
cin>> dim;
cout<< endl;


if (dim <= 25 && dim >=3 && dim%2=1) // Condiciones pedidas por el enunciado: Matriz impar, 3 <= dim <= 25
{
int cuad[dim][dim]; // Creamos una matriz de la dimensión indicada

c= dim/2; // empezamos desde la columna central de la matriz, en la primer fila.
// cuad[c][f]=1;

while ( i<=dim*dim) //Esto determina la cantidad de números que tenemos que colocar, en una matriz de 3x3, seran 9 número, en una de 4x4, seran 16, etc.
{ //El contador i, determinará el valor de cada registro de la matriz.

if (f<0)f=dim-1; // Esto es para que cuando llegamos a la fila superior, empecemos a cargar los datos desde la fila n-1 (ultima fila)

if (c==dim) {c==0;} // Cuando llegamos al extremo derecho, ultima columna, (dado por la dimensión de la matriz) empezaremos a cargar las columnas superiores, desde la fila 0

if (cuad[c][f]>=1 && cuad[c][f]<=dim*dim) // Cuando llegamos a una celda, que tiene un valor, nos posicionamos en la celda debajo a la que cargamos anteriormente.
{
f=f+2;
c=c-1;
if((c>=dim)){c=c-dim;}
if(f<0){f=dim-1;}
cuad[c][f]=i;
}
else { cuad[c][f]=i;}
--c; ++f;
i++;
}
for (int i=0; i<dim; i++)
{
for (int j=0; j<dim; j++)
{
cout<<cuad[i][j]<< " ";

}
cout<<endl;
}


}
return 0;

}

int main(int argc, char** argv) {
int dim; // Esta variable almacena la dimensión de la matriz. Puede 3<=dim<=25
int f; // para indicar la fila de la matriz
int c; // para indicar la columna de la matriz.
int i; // va a ser mi contador

cout<<"Ingrese el valor de la matriz: ";
cin>> dim;
cout<< endl;

if (dim <= 25 && dim >=3 && dim%2=1){ // Condiciones pedidas por el enunciado: Matriz impar, 3 <= dim <= 25
int cuad[dim][dim]; // Creamos una matriz de la dimensión indicada
c= dim/2; // empezamos desde la columna central de la matriz, en la primer fila.
// cuad[c][f]=1;
while ( i<=dim*dim){
//Esto determina la cantidad de números que tenemos que colocar, en una matriz de 3x3, seran 9 número, en una de 4x4, seran 16, etc.
//El contador i, determinará el valor de cada registro de la matriz.
if (f<0) f=dim-1; // Esto es para que cuando llegamos a la fila superior, empecemos a cargar los datos desde la fila n-1 (ultima fila)
if (c==dim) {c==0;} // Cuando llegamos al extremo derecho, ultima columna, (dado por la dimensión de la matriz) empezaremos a cargar las columnas superiores, desde la fila 0
if (cuad[c][f]>=1 && cuad[c][f]<=dim*dim){ // Cuando llegamos a una celda, que tiene un valor, nos posicionamos en la celda debajo a la que cargamos anteriormente.
f=f+2;
c=c-1;
if((c>=dim)) {c=c-dim;}
if(f<0) {f=dim-1;}
cuad[c][f]=i;
}
else { cuad[c][f]=i;}
--c; ++f;
i++;
}
for (int i=0; i<dim; i++){
for (int j=0; j<dim; j++){
cout<<cuad[i][j]<< " ";
}
cout<<endl;
}
}
return 0;
}



¡Buenas! Antes que nada atención a la identación y el formato del texto, un código bien identado hace que la gente te quiera más (?).

Si bien no estoy seguro de la lógica, en una vista rápida te puedo decir que:

11: Tenés un 'dim%2=1', supongo que será ==.

En ningún momento les das un valor inicial a i y af entonces te salteas todo el while y te vas directo al for que recorre la matriz para mostrar los valores.

Cualquier cosa, avisá. Supongo que vas a tener que hacer un par de correcciones más.

don nadie

Con quien cursas?
URLs de referencia