GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Qui 18 Abr 2024, 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39


Lógica: Simplificação de expressões

4 participantes

Ir para baixo

Lógica: Simplificação de expressões Empty Lógica: Simplificação de expressões

Mensagem por PedroX Sáb 28 Mar 2015, 20:30

Simplificação de expressões

A lógica desse artigo pode ser usada na maioria das linguagens de programação, com simples adaptações. GML é uma delas. Os códigos aqui usados rodam corretamente.

O artigo pode ser um pouco "confuso" para quem não está acostumado com lógica binária (digital). É recomendado para quem já sabe no mínimo usar bem os operadores AND e OR (&& e ||).

Tags: lógica digital, binário, and, or, mapa de Karnaugh, tabela da verdade, simplificação de expressões lógicas.

Código:
if ( ( (a && !b) or (b && !c) ) && ( (!b && c) or (a && !c)))
{

}

Achou a expressão acima exagerada? Se sim, saiba que eu também.

Existe um método de simplificar expressões. Geralmente é usado para diminuir a quantidade de portas lógicas necessárias na arquitetura de um processador. Mas os programadores também podem tirar proveito disto e tornar seus códigos mais eficientes, inteligentes e elegantes.

Para simplificar uma expressão que usa apenas valores true/false (também pode ser >0 e <0), podemos utilizar o Mapa de Karnaugh (acho que se pronuncia "Carnô").

Antes de montar esse mapa, você precisa construir uma "tabela da verdade". Isso quer dizer que você deve fazer uma tabela que contenha cada variável como a primeira célula de sua coluna, além de uma coluna para o resultado.

Simplificando o código de exemplo, podemos fazer o seguinte (lembrando que 1=true e 0=false):

a|b|c|r
0|0|0|0 ---> se a, b, c são false, então o resultado é false
0|0|1|0 ---> se somente c é true, então o resultado é false
0|1|0|0 ---> se somente b é true, então o resultado é false
0|1|1|0 ---> se somente a é false, então o resultado é false
1|0|0|1 ---> se somente a é true, então o resultado é true
1|0|1|1 ---> se somente b é false, então o resultado é true
1|1|0|1 ---> se somente c é false, então o resultado é true
1|1|1|0 ---> se todos são true, então o resultado é false

Note que a combinação das três colunas a, b, c vai de 000 a 111, ou seja, de 0 a 7 em binário. Como temos 3 variáveis, temos 2³=8 combinações possíveis. Se fossem 4 variáveis, teríamos 2^4=16.

Devemos testar cada combinação possível. Para isso, você pode fazer um programa que teste o resultado de cada combinação ou fazer manualmente (mentalmente).

Depois que você fizer a tabela da verdade, é hora de fazer o Mapa de Karnaugh.

Para isso, vamos pegar apenas as combinações que resultaram em 1:

a|b|c
1|0|0
1|0|1
1|1|0

No mapa de três variáveis, as linhas representam o valor de A e as colunas representam as combinações dos valores de B e C.

Marcamos com um X as células dessas combinações (100, 101, 110).

Lógica: Simplificação de expressões Sem_t_tulo
Agora é hora de simplificar a expressão.

Para isso, vamos eliminar as variáveis que podem assumir tanto o valor 0 como o 1.

Vamos procurar no mapa por X's adjacentes (conjuntos de 2 ou 4). No mapa acima, encontramos uma dessas combinações. Note que C pode ser tanto 0 como 1 desde A=1 e B=0. Ou seja, 100 e 101 possuem um X.

Logo, vamos eliminar C nessa expressão. Temos então:
A && !B (ou seja, A=1 e B=0)

A última célula (A=B=C=1) não forma um grupo, portanto ela não pode ser simplificada. Mas deve ser usada.

Reunimos o resultado A && !B (em que A deve ser true e B false) ao resultado A && B && C (em que todos devem ser true). Para reuni-los, usamos OR.

A expressão final será:

Código:
if ((A && !B) or (A && B && C))
{
}

É interessante notar que a operação AND pode ser usada como uma multiplicação e a operação OR como uma soma, desde que todos possam assumir somente os valores 0 e 1.

Código:
if ((A * !B) + (A*B*C))
{
}

Esse é apenas um exemplo de simplificação, com o objetivo de incentivar a pesquisa nessa área. Para saber mais, pesquise sobre esse mapa, tabela da verdade e lógica digital.

Em breve, mais artigos.

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Lógica: Simplificação de expressões Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

moisesBR gosta desta mensagem

Ir para o topo Ir para baixo

Lógica: Simplificação de expressões Empty Re: Lógica: Simplificação de expressões

Mensagem por fredcobain Seg 30 Mar 2015, 18:02

PedroX, essa disciplina é interessantíssima... eu mesmo tinha essa curiosidade de saber mais sobre isso.

Obrigado por disponibilizar.

Obs: Me lembrou essa série muito bacana do brendan:
https://gmbr.forumeiros.com/t27761-logica-e-operadores-de-bits-por-brendan640

fredcobain
fredcobain

Games Ranking : Sem avaliações

Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios : Lógica: Simplificação de expressões Empty

Medalhas x 0 Tutoriais x 3 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Lógica: Simplificação de expressões Empty Re: Lógica: Simplificação de expressões

Mensagem por Gonzo Seg 30 Mar 2015, 20:56

Muito bacana PedroX poderia fazer um exemplo de como manipular os sinais de controle remoto pelo celular, sendo que esse é o ponto de partida correto ?!
vlw

avatar
Gonzo

Data de inscrição : 29/05/2012
Reputação : 33
Número de Mensagens : 929
Prêmios : Lógica: Simplificação de expressões Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Lógica: Simplificação de expressões Empty Re: Lógica: Simplificação de expressões

Mensagem por PedroX Ter 31 Mar 2015, 22:21

Fred, estou tendo essas aulas na faculdade. Conforme eu for aprendendo, vou reforçando por ensinar.

Não entendi a pergunta sobre o controle remoto, Gonzo. Na verdade, nunca achei um app que funcionasse de verdade.

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Lógica: Simplificação de expressões Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Lógica: Simplificação de expressões Empty Re: Lógica: Simplificação de expressões

Mensagem por luan.alc Qua 01 Abr 2015, 12:38

PedroX escreveu:Fred, estou tendo essas aulas na faculdade. Conforme eu for aprendendo, vou reforçando por ensinar.

Não entendi a pergunta sobre o controle remoto, Gonzo. Na verdade, nunca achei um app que funcionasse de verdade.

Me vi na sala de aula, estudando lógica da programação hahaha
Parabéns, é uma boa iniciativa pegar o que vemos na faculdade e trazer para o fórum! Parabéns..

Estás em qual período de CC?
luan.alc
luan.alc

Games Ranking : Nota B

Notas recebidas : B
Data de inscrição : 13/03/2012
Reputação : 3
Número de Mensagens : 294
Prêmios : Lógica: Simplificação de expressões Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Lógica: Simplificação de expressões Empty Re: Lógica: Simplificação de expressões

Mensagem por PedroX Qua 01 Abr 2015, 13:46

Na verdade estou fazendo Engenharia de Telecomunicações. A disciplina é Organização e Arquitetura de Computadores e o assunto, por enquanto, é lógica digital.

Com o tempo essa parte de sinais, ondas, frequências etc vai ser rotina. Posto o que achar mais interessante.

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Lógica: Simplificação de expressões Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

moisesBR gosta desta mensagem

Ir para o topo Ir para baixo

Lógica: Simplificação de expressões Empty Re: Lógica: Simplificação de expressões

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos