Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Black Lotus en 14 Marzo 2013, 22:42 pm



Título: Cuadrado Mágico
Publicado por: Black Lotus en 14 Marzo 2013, 22:42 pm
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
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <windows.h>
  4. #include <conio.h>
  5. #define r( a, N ) ( (a)<0 ? N+(a)%N : ( (a)>=N ? (a)%N : (a) ) )
  6. int main()
  7. {
  8. {
  9. int cuadrado[17][17],a,b,n,N;
  10. do{
  11. cout<<"Ingrese el orden ( impar entre 3 y 17 ): " ;
  12. cin>>N;
  13. }while( !(N%2));
  14. cout<<"Cuadrado Mágico de orden :"<<N;
  15. for(a=0;a<N;a++){
  16. for(b=0;b<N;b++){
  17. cuadrado[a][b]=0;}
  18. }
  19. for( a=N/2,b=0,n=1; n<=N*N; )
  20. if(!cuadrado[a][b] )
  21. cuadrado[a][b] = n++,
  22. a=r(a+1,N),
  23. b=r(b-1,N);
  24. else a=r(a-1,N),
  25. b=r(b+2,N);
  26. for(b=0;b<N;b++)
  27. {
  28. cout << endl;
  29. for(a=0;a<N;a++)
  30. cout <<" | "<< cuadrado[a][b] << " | "; Sleep(500);
  31. }
  32. }
  33. getch ();
  34. }

GRACIAS...


Título: Re: Cuadrado Mágico
Publicado por: Almapa en 15 Marzo 2013, 00:16 am
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


Título: Re: Cuadrado Mágico
Publicado por: Black Lotus en 15 Marzo 2013, 00:27 am
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...


Título: Re: Cuadrado Mágico
Publicado por: Almapa en 15 Marzo 2013, 01:00 am
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.


Título: Re: Cuadrado Mágico
Publicado por: Almapa en 15 Marzo 2013, 01:29 am
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.


Código:
#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 ();
}



Título: Re: Cuadrado Mágico
Publicado por: Black Lotus en 15 Marzo 2013, 20:58 pm
muchisisisimas gracias asi esta perfecto  ;D ;D ;D ;D ;D ;D ;D