Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con cuadrado mágico

Estas en el tema de Problema con cuadrado mágico en el foro de C/C++ en Foros del Web. Hola, tengo un problema con un cuadrado mágico en C. Creo que el planteamiento es correcto pero hay algo que no estoy haciendo bien,pasandole el ...
  #1 (permalink)  
Antiguo 28/01/2010, 04:19
 
Fecha de Ingreso: enero-2008
Mensajes: 111
Antigüedad: 16 años, 11 meses
Puntos: 0
Problema con cuadrado mágico

Hola, tengo un problema con un cuadrado mágico en C. Creo que el planteamiento es correcto pero hay algo que no estoy haciendo bien,pasandole el numero 3 me tendria que poner el dos en la esquina inferior derecha,el tres a la izquierda en la fila central,el cuatro debajo del tres,etc.

Pongo el codigo.Saludos
Código:
#include <conio.h>
#include <stdio.h>      
      
       
main ()
{      
     int na;  
     printf("Introduzca un número");
     scanf("%d",&na);
     array(na);
     getch();

      
}
//----------------
 
 
  array(int na)
  {
              
  int t[na][na],f,c,a,conta;

 
    for (f=0;f<na;f++)                          //inicializo el vector
     {
         for (c=0;c<na;c++)
          {           
              t[f][c]=0;
              
           }
     }
              
       
            c=(na-1)/2;
             
              
              for(conta=2;conta<=na*na;conta++)   // se repite el bucle hasta que el contador sea igual al número insertado por 2
              {
                    if(conta<=na) //si el contador es menor o igual que el numero insertado fila anterior siguiente columna
                    {
                      f=f-1;      
                      c=c+1;
                      t[f][c]=conta;           
                    }             
                   else if(conta>na &&(conta-1)%na!=0)//si el contador es mayor que el numero insertado
                    {   f=f-1;                        //y restandole 1 es no es multiplo de 3 fila anterior siguiente columna                                          
                        c=c+1;
                        t[f][c]=conta;
                                   
                    }  
                    else if(conta>na &&(conta-1)%na==0)//si el contador es mayor que el numero insertado
                    {                                  //y restandole 1 es multiplo de 3 siguiente fila misma columna          
                       f=f+1;
                 
                        t[f][c]=conta;  
                    }
                  
             }
             
    for (f=0;f<na;f++)//se muestra el array
     {
         for (c=0;c<na;c++)
          {
              a=(na-1)/2;     //para que el 1 estè arriba y en el centro            
              t[0][a]=1;
              printf("%d",t[f][c]);
           }
          
      
        printf("\n");        
     }    
             
  }
  #2 (permalink)  
Antiguo 28/01/2010, 05:55
 
Fecha de Ingreso: enero-2010
Mensajes: 24
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Problema con cuadrado mágico

Buenas

No acabo de ver la logica que estas usando para generarlo, estas seguro que tu metodo es valido?

"No existe un método general para construir cuadrados mágicos de cualquier orden, siendo necesario distinguir entre los de orden impar, los de orden múltiplo de 4 y el resto de orden par (4×m + 2)."
http://es.wikipedia.org/wiki/Cuadrado_m%C3%A1gico

Saludos
  #3 (permalink)  
Antiguo 29/01/2010, 05:41
 
Fecha de Ingreso: enero-2008
Mensajes: 111
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Problema con cuadrado mágico

Para generarlo el 1 debe ir en el medio de la primera fila.
El siguiente número deberia de ir en la fila anterior y en la columna siguiente.En este caso como el número 1 esta en la primera fila el 2 tiene que ir en la ultima (como si el vector estuviera enrollado) y en el caso de que el número anterior al actual sea multiplo del seleccionado, este ira en la fila siguiente y en la misma columna.

Ya lo he solucionado, el problema estaba en que no habia puesto el código para "enrollar" el array y que si el número tuviera que ir en la fila -1 pasara directamente a la ultima.

Etiquetas: cuadrado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:20.