Contatos

e-mail: daniloxc@msn.com

Skype: Daniloxc1

Pages

sexta-feira, 12 de julho de 2013

Programa de geração de quadrados mágicos com função recursiva

Anteriormente postei um programa feito em C, em que gerava quadrados mágicos de ordem [3x3].
Utilizando a linguagem de programação Python, através de uma função recursiva para geração de todas as combinações possíveis de números, consegui fazer um programa onde é possível a geração de quaisquer quadrado mágico. Porém, requer mais tempo. Segue o código
 from math import sqrt  
 """Esta função verifica se todos os termos do vetor são únicos"""  
 def unico(vet):  
      cont=0  
      uni=True  
      for each_term in vet:  
           for this_term in vet:  
                if each_term==this_term:  
                     cont+=1  
                     if(cont>1):  
                          uni=False  
           cont=0  
      return uni  
 """Esta é a função para comparar linhas, colunas e diagonais do quadrado mágico  
 Ela exige a passagem de um vetor como parâmetro. Obs.: 'Esta função somente funciona com vetores os quais sua ordem tenham raizes quadradas exatas"""  
 def compare(vet):  
      ordem=int(sqrt(len(vet)))  
      somas=[]  
      somas2=[]  
      somas3=[0]  
      somas4=[0]  
      magicSquare=False  
      acm=0  
      i=0  
      for each_term in vet:  
           acm+=each_term  
           if ((vet.index(each_term)+1)%ordem==0):  
                somas.append(acm)  
                acm=0  
      acm=0  
      for each_index in range(0,ordem):  
           somas2.append(0)  
      for each_term in vet:  
           somas2[i]+=each_term  
           i+=1  
           if i==ordem:  
                i=0  
      for inx in range(0,ordem):  
           somas3[0]+=vet[inx*(ordem+1)]  
           somas4[0]+=vet[(len(vet)-1)-(1+inx)*(ordem-1)]  
      somas=set(somas)  
      somas2=set(somas2)  
      somas3=set(somas3)  
      somas4=set(somas4)  
      if (somas==somas2==somas3==somas4):  
           magicSquare=True  
      return magicSquare  
 """Esta função gera todas as combinações possíveis de acordo a ordem passada do vetor  
 Exemplo merge(vet, len(vet), len(vet)-1)"""  
 def merge (vet, tam, it):  
   quad=[]  
   if it>0:  
     for each_term in vet:  
       merge(vet, tam, it-1)  
       vet[it]+=1  
     vet[it]=1  
   else:  
     for each_term in vet:  
       if(unico(vet)):  
         if compare(vet):  
           quad.append(vet)     
       print(vet)  
       vet[it]+=1  
     vet[it]=1  
   return quad  
 vet=[1 for each_term in range(1,10)]  
 print(merge(vet, len(vet), len(vet)-1))  
ShotScreen do programa em funcionamento

0 comentários:

Postar um comentário