FORUM DARKERS

Tecnologia & Informática => Programação => C/C#/C++ => Topic started by: bl4ckboot47 on 08 de May , 2010, 11:14:01 AM

Title: Quadrado Magico
Post by: bl4ckboot47 on 08 de May , 2010, 11:14:01 AM
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.... 
Title: Re:Quadrado Magico
Post by: Reeves on 08 de May , 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!
Title: Re:Quadrado Magico
Post by: Imoogi on 08 de May , 2010, 02:59:23 PM

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.
Title: Re:Quadrado Magico
Post by: bl4ckboot47 on 08 de May , 2010, 03:04:10 PM
Quote from: Reeves on 08 de May , 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... 
Title: Re:Quadrado Magico
Post by: Imoogi on 08 de May , 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
Title: Re:Quadrado Magico
Post by: bl4ckboot47 on 09 de May , 2010, 05:21:57 PM
Quote from: Imoogi on 08 de May , 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
Title: Re:Quadrado Magico
Post by: Reeves on 10 de May , 2010, 11:49:03 AM
Boaa Imoogi, sempre surpreendendo kra ;)

isso ai bl4ckboot47, agora é só ralar e mostrar sua conquista o/
Title: Re:Quadrado Magico
Post by: KEst on 10 de May , 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
Title: Re:Quadrado Magico
Post by: Imoogi on 10 de May , 2010, 04:39:58 PM
Quote from: KEst on 10 de May , 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.
Title: Re:Quadrado Magico
Post by: KEst on 11 de May , 2010, 12:31:29 AM
Vocês não estão falando de Cubo de Rubik então?
shuhsushush que furo meu!
Title: Re:Quadrado Magico
Post by: bl4ckboot47 on 12 de May , 2010, 06:29:51 PM
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 
Title: Re:Quadrado Magico
Post by: C00L3R on 13 de June , 2010, 12:24:47 AM
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...