Contatos

e-mail: daniloxc@msn.com

Skype: Daniloxc1

Pages

quarta-feira, 12 de setembro de 2012

Programa para geração de quadrados mágicos de ordem [3x3]

O que é um quadrado mágico?
http://pt.wikipedia.org/wiki/Quadrado_m%C3%A1gico

Este programa, feito em c, tem como objetivo gerar todos os quadrados mágicos possíveis na ordem [3,3].
Tentarei implementa-lo de um modo que faça os quadrados mágicos de quaisquer ordens. Fiz algumas tentativas, porém notei a necessidade de fazer uma função recursiva para gerar os "For's". Estudarei e postarei posteriormente.

Abaixo segue o programa, usei o compilador Dev C++:


#include <stdlib.h>
#include <stdio.h>

main()
{
int vet[8];
int vetpos[9];
int erro=0;
int erro2=0;
int g=0;
int n=9;
int quadrado=0;

for(vetpos[0]=1;vetpos[0]<=n;vetpos[0]++)
for(vetpos[1]=1;vetpos[1]<=n;vetpos[1]++)
for(vetpos[2]=1;vetpos[2]<=n;vetpos[2]++)
for(vetpos[3]=1;vetpos[3]<=n;vetpos[3]++)
for(vetpos[4]=1;vetpos[4]<=n;vetpos[4]++)
for(vetpos[5]=1;vetpos[5]<=n;vetpos[5]++)
for(vetpos[6]=1;vetpos[6]<=n;vetpos[6]++)
for(vetpos[7]=1;vetpos[7]<=n;vetpos[7]++)
           for(vetpos[8]=0;vetpos[8]<n;vetpos[8]++){
 /* if(vetpos[3]!=vetpos[2]&&vetpos[3]!=vetpos[1]&&vetpos[3]!=vetpos[0]&&vetpos[2]!=vetpos[1]&&
  vetpos[2]!=vetpos[0]&&vetpos[1]!=vetpos[0])
  {*/
  for(int i=0;i<n;i++)
        for(int j=1+i;j<n;j++){
    if(vetpos[i]==vetpos[j])
erro++;
         }
       
         if(erro==0){
 
    vet[0]=vetpos[0]+ vetpos[3]+ vetpos[6];
vet[1]=vetpos[1]+ vetpos[4]+ vetpos[7];
vet[2]=vetpos[2]+ vetpos[5]+ vetpos[8];
vet[3]=vetpos[0]+ vetpos[1]+ vetpos[2];
vet[4]=vetpos[3]+ vetpos[4]+ vetpos[5];
vet[5]=vetpos[6]+ vetpos[7]+ vetpos[8];
vet[6]=vetpos[0]+ vetpos[4]+ vetpos[8];
vet[7]=vetpos[6]+ vetpos[4]+ vetpos[2];
for(int i=0;i<n-1;i++)
        for(int j=1+i;j<n-1;j++){
    if(vet[i]!=vet[j])
erro2++;
         }
         if(erro2==0&&erro==0){
quadrado++;
printf("Quadrado Magico %d: \n\n", quadrado);
         for(int i=0; i<n;i++){
printf("%d ", vetpos[i]);
if(i==2||i==5)
               printf("\n\n");
     if(i==8)
    printf("\n\n\n\n");

}
       
 
     }

  /*g++;
printf("%d combinacao: ", g);
for(int i=0;i<n;i++)
printf("%d ", vetpos[i]);  
printf("\n\n"); */
 }
 erro=0;
 erro2=0;
      //}
 
           }

   getchar();   getchar();

}

Segue a imagem da saída do programa, é necessário esperar um pouco pra obter a saída, pois são muitas combinações:



Quadrado Magico 1: 

2 7 6 

9 5 1 

4 3 8 



Quadrado Magico 2: 

2 9 4 

7 5 3 

6 1 8 



Quadrado Magico 3: 

4 3 8 

9 5 1 

2 7 6 



Quadrado Magico 4: 

4 9 2 

3 5 7 

8 1 6 



Quadrado Magico 5: 

6 1 8 

7 5 3 

2 9 4 



Quadrado Magico 6: 

6 7 2 

1 5 9 

8 3 4 



Quadrado Magico 7: 

8 1 6 

3 5 7 

4 9 2 



Quadrado Magico 8: 

8 3 4 

1 5 9 

6 7 2 

Até a próxima!