sexta-feira, 18 de dezembro de 2009

Lógica

Segundo reforço das aulas de programação por evento
por zecomeia


Lógica

Introdução

No começo é difícil entender a Lógica(no nosso caso lógica Booleana, procure por George Boole na wikipedia), mas com o tempo rapidamente vai ficar fácil, basta concentração.

O que podemos considerar como lógica?

Qualquer afirmação que fazemos é uma lógica independente de estar “certa” ou “errada”.Ex:

3 + 43 = 2

Isto é uma lógica, mas o importante é se preocupar se a lógica é verdadeira ou falsa.No exemplo acima se formos pensar na matemática podemos dizer que aquela lógica é falas, mas em outros casos aquele resultado, 2 por exemplo, pode ser apenas representativo da situação(estado) em que
afirmação(3 + 43 =) se encontra no contexto de onde ela foi aplicada.
Agora parece que complicou mas veremos como isso é simples.Então vamos ver sobre os estados.

Estados

O que nos importa para a programação são os estados que  podem  ser "verdadeiro e "falso"(existe o nulo também, mas não vamos usá-lo por não ser usado na programação por eventos para o nosso caso).
Veja a seguir:

Verdadeiro = ON  = 1
Falso      = OFF = 0


Iremos usar o 0 e 1 para representar.Resumindo o 0(falso) será "desligado", e 1(verdadeiro) será "ligado".
EX:
Geralmente em aparelho eletrônicos, junto ao botão de Liga/Desliga tem um símbolo de um 0 e 1, quando está ligado a chave está pro lado do 1 e desligado pro lado do zero.

Como só usamos 0 ou 1 então temos que usar uma matemática baseada nas lógicas:

AND/E:
A lógica AND(E em português) diz que a saída só será 1 se A and B forem iguais 1(A e B no caso porque só existem esses dois termos, caso existissem mais termos todos teriam que ser iguais
a 1).Então se repararmos bem o que a lógica AND faz é multiplicar[/i] os termos.

Veja a tabela verdade da lógica AND:

A   B   Resultado
0   0   0
0   1   0
1   0   0
1   1   1



Usamos a simbologia a seguir para a lógica AND:


A x B = Resultado

Lógica OR/OU
A lógica OR(OU em português) diz que a saída será 1 se A or B forem iguais 1(A e B no caso porque só existem esses dois termos, caso existissem mais termos pelo menos 1 teria que ser igual
a 1).Então se repararmos bem o que a lógica OR faz é somar os termos.

Veja a tabela verdade da lógica OR:

A   B   Resultado
0   0   0
0   1   1
1   0   1
1   1   1



Ao olhar a tabela acima você deve estar se perguntando:
“Ué?!?!Se a porta lógica OR soma os termo então 1 + 1 tem que ser igual a 2.”
Só que isso não acontece porque usamos a lógica para estados de base binária, ou seja, a saída só pode ser 0(desligado) ou 1(ligado).Pense assim, se fosse igual a 2 então o sistema estaria ligado duas vezes?!?!Acho que entenderam onde quero chegar.

Usamos a simbologia a seguir para a lógica OR:



A + B = Resultado

Lógica NOT/NÃO
A lógica NOT(NÃO em português) diz que a saída será 1 se a entrada NÃO for 1.Ou seja se a entrada for 0 a saída será 1, se a entrada for 1 a saída será 0.Resumindo a lógica NOT inverte os estados binários 0 e 1.

Veja a tabela verdade da lógica NOT:


Entrada(A)   Saída(Resultado = Ā)
0                             1
1                             0



Usamos a simbologia a seguir para a lógica NOT:


A = Ā

*OBS: Ā(A barrado) significa que é o inverso de A.

Alguns postulados de Matemática booleana

Antes de vermos como usar essas lógicas no RPGMaker vamos ver algumas analises que nos ajudam no ato de calcular os resultados e formar lógicas que nos ajude a criar nossos sistemas.

Teoremas de De Morgan
***OBS:Lembra do A barrado, a partir de agora no lugar de uma barra em cima da letra será usada apenas uma aspas simples(apóstrofo) para representar cada barra.

Vamos entender a afirmação abaixo.Como a barra inverte o valor(de 0 para 1 e vice versa) então se invertemos uma variável duas vezes ela será a mesma coisa de não inverte-la.
A’’ = A

Nesse próximo caso vamos usar algo conhecido como “barrão” isso significa que a barra de inversão abrange toda a expressão entre parênteses.A expressão abaixo significa que a inversão da soma de termos é igual a multiplicação dos termos já invertidos.
(A + B)’ = A’ x B’

No caso abaixo podemos ver que o processo é parecido com o do caso anterior.Onde agora a inversão da multiplicação de termos é igual a soma dos termos invertidos.
(A x B)’ = A’ + B’

A partir das analises dos teoremas de De Morgan mostrados acima fica mais fácil a compreensão de algumas lógicas, além da criação de outras como a “coincidência”(“ou exclusivo“ conhecido também como XOR), mas isso não vem ao caso, então se ficou interessado serão postados links pra saber sobre o assunto no final da aula.
Outra coisa que essas analises nos ajudam é na simplificação das expressões feitas para a lógica de seu programa, isso é muito importante.

Usando a Lógica Booleana no RPGMaker

Alguns devem estar se perguntando que diabos isso me ajudará a programar no rpgmaker, pois agora vou explicar um pouco melhor e mostrar alguns exemplos, perceberás que você já usava essas lógicas sem nem mesmo perceber.

Para usarmos essas lógicas a nosso favor no RPGMaker devemos usar as indispensáveis ferramentas:

Condições, Variáveis e Switchs.

*OBS:Ainda não passei a aula sobre condições mas já está sendo feita(falta uns retoques), então sugiro que se não saiba nada sobre condições pare de ler aqui e vá ler a aula de condições caso ela já tenha sido postada.

Primeiros vamos pensar no caso das switchs por ser mais simples.
Quando você abre o comando de “condições”  e seleciona a condição como “switch” lá na aba 1, pode se ver que é possível escolher entre “ON” e “OFF” para a condição da switch.Agora lembra-se dos nosso estados binários 0 e 1?Sim, ON e OFF são exatamente eles neste caso.Então que tal formarmos uma lógica AND com as condições para dois termos(switchs nos casos).Vamos lá então.

Primeiro nomeie duas switchs, uma A e a outra como B e deixe as duas como “OFF”.
*OBS:As switch s já começam com seu estado natural em “OFF”, mas para efeito didático use o comando e deixe como OFF as switchs.

Agora crie duas condições, onde a segunda condição se encontra no corpo da primeira.A primeira condição é que a switch A tem que estar ON, e a segunda condição é que a switch B tem que estar ON.Dentro da segunda condição coloque uma mensagem apenas para verificarmos o efeito, pode ser “A e B estão ligadas.”, desta forma:




Agora lembra da tabela verdade da lógica AND?Vamos comprovar se nossas condições do evento estão mesmo seguindo está lógica.Faça os testes um por um mudando os valores das switchs no evento conforme a tabela verdade da lógica AND e verificando os resultados.

Agora vamos ver a situação da lógica OR.
Crie outro evento e deixe no estado OFF aquelas duas switchs como no primeiro evento feito com o AND.
Agora vamos criar nossas condições.Faça a primeira condição como A igual a ON e coloque exceção.No corpo dessa primeira condição vamos colocar uma mensagem pra verificar o efeito, pode ser “A ou B está(ão) ligadas.”.Agora na exceção da primeira condição nós vamos fazer a segunda condição, que será B igual ON para o funcionamento, e não há necessidade de colocar uma condição. No corpo da segunda condição coloque aquela mesma mensagem da primeira para verificarmos o resultado.



Faça os testes assim como foi feito para a lógica AND, mas claro, seguindo a tabela verdade da lógica OR.

*Parecer uma OR, o conteúdo do corpo da primeira condição tem que ser igual ao conteúdo da segunda.

Está na hora de ver a situação da lógica NOT.
Crie outro evento e desta vez usaremos apenas a switch A, deixe-a no estado OFF.Faça a condição(sem exceção) como A igual a “OFF”.No corpo da condição coloque uma mensagem para verificarmos o resultado, pode ser “A está desligada.”.



Teste o evento verificando as duas situações da tabela verdade da lógica NOT.

Agora pense como usando esses elementos ao mesmo tempo a infinidade de “expressões” que podem ser feitas para trabalhar o seu evento, lembrando que seguindo esses princípios podem ser criadas condições para mais termos e não apenas 2 como na maioria de nossos exemplos.

Veremos agora como as possibilidades se ampliam ainda mais quando usamos a lógica aplicada com as condições e as variáveis.

Lembra daquele primeiro exemplo deste texto( 3 + 43 = 2 ), pois é, com variáveis pode-se transformá-lo em uma lógica verdadeira.Veja o exemplo:



Exemplo bem bobo, né?Mas isso nos mostra que podemos criar condições que executem algo que queremos quando a variável assumir determinado valor.Isso significa que com uma variável temos uma switch de infinitos(teoricamente) estados e não só 2( estado 0 e 1) como nossa switch convencional.
Lembrando que nosso comando de condição no caso de variáveis nos dá ferramentas que nos permite comparar uma variável em relação a um numero constante escolhido na hora ou á uma outra variável , usando os operadores comparadores igual, maior que, menor que, maior ou igual, menor ou igual, diferente.
A partir destes comparadores podemos criar condições que trabalham em um intervalo de valores para a variável ou em casos únicos.
Operando variáveis com a matemática comum para efetuar seus cálculos para o sistema e depois utilizando estes comparadores das condições pensando na lógica é possível fazer N coisas, lembrando ainda que o comando de variáveis te dá acesso a muitos valores correntes do jogo.

Lição de casa:

1-Faça um evento que vai envolver todas as lógicas desta forma:
Lógica OR com 4 termos, no corpo de cada condição desta OR coloque uma lógica NAND(NOT + AND, pense um pouco e descubra como ela funciona) de 2 termos.Faça os testes e monte a tabela verdade do evento.
2-Faça um evento que mostre uma mensagem a cada 10 passos(tanto faz a mensagem), mas isso só acontece se estiver andando na metade do lado esquerdo do mapa(faça um mapa de 20x15), ou seja, mesmo que der 10 passos estando do lado direito a mensagem não aparece.

*OBS:Não precisa ser precisamente 10 passos pode ter uma pequena variação
***No final da página está o link para o projeto(no RMXP) com os eventos feitos nos exemplos e o evento com a resposta dos exercícios.Também está a tabela verdade do primeiro exercício(em anexo).

Comentário

Bom, acho que esse reforço de lógica ficou bem melhor que o antigo que tinha feito e postado na RMB ^^.Demorei pra fazer esse reforço, mas acho que valeu a pena e espero que continue ajudando muita gente.

Link para:
nenhum

Extras:
nenhum

Nenhum comentário:

Postar um comentário