Cuadrado Mágico

Iniciado por Black Lotus, 14 Marzo 2013, 22:42 PM

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

Black Lotus

Debo hacer un programa que resuelva un cuadrado mágico con las reglas noreste... y que  el programa debe mostrar como resuelve el método, para ello debe de utilizar un retardo de medio segundo por cada número a mostrar
El problema es el siguiente: yo entiendo que hay que poner cada número en el orden que se va solucionando... es decir primero el 1 en su lugar respectivo... el 2 en su lugar respectivo... el 3 en su lugar respectivo.. el 4 en su lugar respectivo... etc.. si es asi como se hace que yo lo unico que puedo hacer es que me muestre pero de linea en linea no de uno en uno... el codigo es el siguiente..

Código ( cpp) [Seleccionar]
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#define r( a, N ) ( (a)<0 ? N+(a)%N : ( (a)>=N ? (a)%N : (a) ) )
int main()
{
{
int cuadrado[17][17],a,b,n,N;
do{
cout<<"Ingrese el orden ( impar entre 3 y 17 ): " ;
cin>>N;
}while( !(N%2));
cout<<"Cuadrado Mágico de orden :"<<N;
for(a=0;a<N;a++){
for(b=0;b<N;b++){
cuadrado[a][b]=0;}
}
for( a=N/2,b=0,n=1; n<=N*N; )
if(!cuadrado[a][b] )
cuadrado[a][b] = n++,
a=r(a+1,N),
b=r(b-1,N);
else a=r(a-1,N),
b=r(b+2,N);
for(b=0;b<N;b++)
{
cout << endl;
for(a=0;a<N;a++)
cout <<" | "<< cuadrado[a][b] << " | "; Sleep(500);
}
}
getch ();
}


GRACIAS...

Almapa

El problema tiene fácil solución, si te fijas en la línea 30, debería haber una "," entre el "cout" y el "sleep" para que lo tenga en cuenta dentro del segundo bucle "for". Por lo tanto cambiando dicha línea ya saca número a número.
Aquí está dicha línea corregida.

cout <<" | "<< cuadrado[a] << " | ", Sleep(500);


Un saludo

Black Lotus

disculpa... gracias muchisimas gracias por eso...

pero ahora disculpa la pregunta.. lo que me dijiste vos era la solución? o es asi como yo comprendi el problema lo digo en la descripción de mi ejercicio antes del codigo...

Almapa

Mmm mi respuesta es para mostrar la solución final elemento a elemento, pero no por orden de resolución. No había entendido bien tu pregunta, le echaré un vistazo.

Almapa

#4
Mira a ver que te parece esta solución. Aunque no es muy agradable ver "0" durante la resolución puede hacer que te saque "*" o "-" en lugar de los 0.


#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
using namespace std;
#define r( a, N ) ( (a)<0 ? N+(a)%N : ( (a)>=N ? (a)%N : (a) ) )
int main()
{
{
 int cuadrado[17][17],a,b,n,N,i,j;
 do{
    cout<<"Ingrese el orden ( impar entre 3 y 17 ): " ;
    cin>>N;
 }while( !(N%2));

 cout<<"Cuadrado Mágico de orden :"<<N;

 for(a=0;a<N;a++){
   for(b=0;b<N;b++){
   cuadrado[a][b]=0;}
 }

for( a=N/2,b=0,n=1; n<=N*N; )
{
if(!cuadrado[a][b] )cuadrado[a][b] = n++,a=r(a+1,N),b=r(b-1,N);else a=r(a-1,N),b=r(b+2,N);
system("cls");
cout<<"Cuadrado Mágico de orden :"<<N;
for(i=0;i<N;i++)
{
 cout << endl;
 for(j=0;j<N;j++)cout <<" | "<< cuadrado[j][i] << " | ";
 }
Sleep(500);
}
}
getch ();
}


Black Lotus

muchisisisimas gracias asi esta perfecto  ;D ;D ;D ;D ;D ;D ;D