Quadrado Magico

Iniciado por bl4ckboot47, 08 de Maio , 2010, 11:14:01 AM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

bl4ckboot47

Ola pessoal, estou querendo montar em c++, um quadrado magico de 3x3, consegui fazer a leitura da matriz a gora falta o resto,  se alguém tiver algum material que possa me auxiliar na construção do mesmo, e puder me passar ficaria feliz.... 

Reeves

você quer fazer em C++ um programa para resolver quadrado mágico 3x3? é isso?
tem logica/algoritimo para isso.. caso seja!

explica melhor ai!
  °vº   NÃO USE DROGAS,
/(_)\  USE GNU/LINUX
^ ^

Imoogi


Dicas para solucionar o quadrado mágico 3x3:

   1. O total que se quer obter em todos os sentidos deverá ser dividido por 3. O que resultará no número a ser colocado no centro do quadrado.
   2. Os números a serem colocados nos cantos deverão ser pares se o centro for ímpar, ou vice e versa.
   3. O último número a ser colocado deverá ser o centro mais 4.

Essas regras só valem se os números forem múltiplos de 3. Ex: 15, 18, 21, 24, 27, 30 etc.
fonte: Wikipedia


fiz ele no papel, pedindo um total de 12, mas não achei nenhum algoritmo, não se se ajuda essas dicas, mas ta ai.
vou ve se consigo fazer.

bl4ckboot47

Citação de: Reeves online 08 de Maio , 2010, 01:59:32 PM
você quer fazer em C++ um programa para resolver quadrado mágico 3x3? é isso?
tem logica/algoritimo para isso.. caso seja!

explica melhor ai!

É isso mesmo Reeves to querendo fazer um programa, mas estou com dificuldades na lógica, dei uma  googlada e não achei nada interessante que poderia me auxiliar, estou recorrendo aqui, para ver se alguém sabe algum link, ou alguma coisa que possa me ajudar... 

Imoogi

depois de muitos calculos achei :D

vamos supor a seguinte matriz
   a  b  c
   d  e  f
   g  h  i

digamos q vc que ter o valor total de 12
segundo as dicas q eu postei ali em cima
o elemento 'e' da matriz seria 12/3 ou seja 4
ela ficaria assim
   a  b  c
   d  4  f
   g  h  i

a partir dai o elemento 'a' será 'e'-3 ou seja 4-3 = 1

o elemento 'i' será 'e' + 3 ou seja 4+3 = 7
   1  b  c
   d  4  f
   g  h  7

o elemento 'c' será 'e' - 1 ou seja 4 -1 = 3

o elemento 'g' sera 'e' + 1 ou seja 4 + 1 = 5

   1  b  3
   d  4  f
   5  h  7


o elemento 'b' é 12 - (3+1) = 8
o elemento 'h' é 12 - (5+7) = 0

   1  8  3
   d  4  f
   5  0  7


o elemento 'd' é 12 - (1+5) = 6

o elemento 'f' é 12 - (3+7) = 2


   1  8  3 = 12
   6  4  2 = 12
   5  0  7 = 12
12 12 12

serve pra qualquer total desde que seja multiplo de 3

bl4ckboot47

Citação de: Imoogi online 08 de Maio , 2010, 04:46:08 PM
depois de muitos calculos achei :D

vamos supor a seguinte matriz
   a  b  c
   d  e  f
   g  h  i

digamos q vc que ter o valor total de 12
segundo as dicas q eu postei ali em cima
o elemento 'e' da matriz seria 12/3 ou seja 4
ela ficaria assim
   a  b  c
   d  4  f
   g  h  i

a partir dai o elemento 'a' será 'e'-3 ou seja 4-3 = 1

o elemento 'i' será 'e' + 3 ou seja 4+3 = 7
   1  b  c
   d  4  f
   g  h  7

o elemento 'c' será 'e' - 1 ou seja 4 -1 = 3

o elemento 'g' sera 'e' + 1 ou seja 4 + 1 = 5

   1  b  3
   d  4  f
   5  h  7


o elemento 'b' é 12 - (3+1) = 8
o elemento 'h' é 12 - (5+7) = 0

   1  8  3
   d  4  f
   5  0  7


o elemento 'd' é 12 - (1+5) = 6

o elemento 'f' é 12 - (3+7) = 2


   1  8  3 = 12
   6  4  2 = 12
   5  0  7 = 12
12 12 12

serve pra qualquer total desde que seja multiplo de 3

Valeu pela dica, já estou terminando de fazer, durante a semana, quando tiver um tempo eu posto ele aqui,blz

Reeves

Boaa Imoogi, sempre surpreendendo kra ;)

isso ai bl4ckboot47, agora é só ralar e mostrar sua conquista o/
  °vº   NÃO USE DROGAS,
/(_)\  USE GNU/LINUX
^ ^

KEst

abrindo um assunto a parte, já conseguiram realizar o cubo de rubik sem ajuda?

@imoogi velho eu tentei entender seu raciocínio mas nem sei porque tu deixou a conta como soma 12?

abraços

Campanha Converta-se a Gnu is Not Unix/Linux

Imoogi

Citação de: KEst online 10 de Maio , 2010, 03:15:06 PM
abrindo um assunto a parte, já conseguiram realizar o cubo de rubik sem ajuda?

@imoogi velho eu tentei entender seu raciocínio mas nem sei porque tu deixou a conta como soma 12?

abraços

Um quadrado magico é quando a soma dos elementos das linhas, colonas, e diagonais é sempre uma constante, no caso 12,
1º linha  1+8+3 = 12
2º linha  6+4+2 = 12
3º linha  5+0+7 = 12
1º coluna  1+6+5 = 12
2º coluna  8+4+0 = 12
3º coluna 3+2+7 = 12
diagonal principal  1+4+7 = 12
diagonal secundaria  5+4+3 = 12

essa constante pode ser 15, 18, 21, qualquer numero multiplo de 3, o que vai mudar é só em qual
algarismo ele vai começar e terminar, constante 12 ele começa com 0 até 8, constante 15 começa com 1 até 9, etc.

KEst

Vocês não estão falando de Cubo de Rubik então?
shuhsushush que furo meu!

Campanha Converta-se a Gnu is Not Unix/Linux

bl4ckboot47

Ola, como prometido acabei de fazer o algoritmo do quadrado acabei fazendo em pseudo-código no visualg, fiquem a vontade, podem fazer comentário, e modificar o código..blz....

algoritmo "Quadrado magico" 
// Função : 
// Autor : Tiago Casanova 
// Data : 9/5/2010 
// Seção de Declarações 
var 
mat : vetor [1..4,1..4] de real 
l,c:inteiro 
dprincipal,dsecundario:real 
inicio 
// Seção de Comandos 

dprincipal<-0 
dsecundario<-0 

para l<-1 ate 3 passo 1 faca 
   para c<-1 ate 3 passo 1 faca 
        escreva("Informe os numeros da matriz",(l),(c),": ") 
        leia(mat[l,c]) 
   fimpara 
fimpara 
   para l<-1 ate 3 passo 1 faca 
       para c<-1 ate 3 passo 1 faca 
          mat[l,4]<-mat[l,4]+mat[l,c] 
          mat[4,c]<-mat[4,c]+mat[l,c] 
       fimpara 
    fimpara 

//  escreva("Os valores lido da matriz sao: ") 

// para l<-1 ate 4 passo 1 faca 
//   para c<-1 ate 4 passo 1 faca 
//     escreva(mat[l,c]) 
//   fimpara 
// fimpara 

para l<-1 ate 3 passo 1 faca 
  para c<-1 ate 3 passo 1 faca 
    se(l=c) entao 
      dprincipal<-dprincipal+mat[l,c] 
    fimse 
  fimpara 
fimpara 

//  escreva("Soma matriz principal he: ", dprincipal) 


   
  para l<-1 ate 1 passo 1 faca 
   para c<-1  ate 1 passo 1 faca 
    dsecundario<- mat[l,c+2]+mat[l+1,c+1]+mat[l+2,c] 
   fimpara 
  fimpara 
   
  //escreva(" - O valor da matriz secundaria he: ", dsecundario) 

    se(mat[1,4] = mat[2,4])entao 
     se(mat[1,4] = mat[3,4])entao 
      se(mat[4,1] = mat[4,2])entao 
       se(mat[4,1] = mat[4,3])entao 
        se(dprincipal = dsecundario)entao 
         escreva("É um quadrado magico") 
        fimse 
       fimse 
      fimse 
     fimse 
    senao 
     escreva("Não é uma quadrado magico") 
    fimse 


fimalgoritmo 

C00L3R

Cara fiz em Ansi C usando pocas linhas sem usar memoria e vetor nem ponteiro
/*

      .--..--..--..--..--..--.
    .' \  (`._   (_)     _   \
  .'    |  '._)         (_)  |
  \ _.')\      .----..---.   /
  |(_.'  |    /    .-\-.  \  |
  \     0|    |   ( O| O) | o|
   |  _  |  .--.____.'._.-.  |
   \ (_) | o         -` .-`  |
    |    \   |`-._ _ _ _ _\ /
    \    |   |  `. |_||_|   |     Solution!
    | o  |    \_      \     |     -.   .-.
    |.-.  \     `--..-'   O |     `.`-' .'
  _.'  .' |     `-.-'      /-.__   ' .-'
.' `-.` '.|='=.='=.='=.='=|._/_ `-'.'
`-._  `.  |________/\_____|    `-.'
   .'   ).| '=' '='\/ '=' |
   `._.`  '---------------' 
           //___\   //___\
             ||       ||
             ||_.-.   ||_.-.
            (_.--__) (_.--__)
Author: Antonio "Cooler_"
contact: tony.unix@yahoo.com.br
license: BSD
http://devio.us/~cooler/
Programa validador de quadros mágicos 3x3
sem usar aloc,vetor,ponteiro...

*/
#include<stdio.h>
#define w printf 
#define sf scanf
int main() {
int l1,l2,l3,l4,l5,l6,l7,l8,l9;
while(1) w("\x0aPrograma verificador de quadro mágico 3x3\x0a coded by Cooler_ \x0a----------\x0a")&w("digite numero \x0a")&sf("%d",&l1)&w("digite numero \x0a")&sf("%d",&l2)&w("digite numero \x0a")&sf("%d",&l3)&w("digite numero \x0a")&sf("%d",&l4)&w("digite numero \x0a")&sf("%d",&l5)&w("digite numero \x0a")&sf("%d",&l6)&w("digite numero \x0a")&sf("%d",&l7)&w("digite numero \x0a")&sf("%d",&l8)&w("digite numero \x0a")&sf("%d",&l9)&w("mostrando quadro\x0a")&w("[%d,%d,%d]\x0a[%d,%d,%d]\x0a[%d,%d,%d]\x0a",l1,l2,l3,l4,l5,l6,l7,l8,l9)&w("Seu Quadro %s\x0a",((l5+3)==l9) && (((!(l5%2))&&(l1%2!=0)&&(l3%2!=0)&&(l7%2!=0)&&(l9%2!=0)) || ((l5%2!=0)&&(!(l1%2))&&(!(l3%2))&&(!(l7%2))&&(!(l9%2))))?"é mágico!":"não é mágico!");
}


hahaha divirta-se um colega da USP me mostro um desafio semelhante porem um poco mais chato , alias bem chato mesmo mas não dificil...