Mostrando postagens com marcador Lógica de Programação. Mostrar todas as postagens
Mostrando postagens com marcador Lógica de Programação. Mostrar todas as postagens

terça-feira, 26 de abril de 2011

Lógica de Programação: IF, ELSE - Comandos de Controle de Fluxo

Hoje vamos começar a estudar mais uma parte importante na programação, os Comandos de Controle de Fluxo. Vamos entender melhor eles e compreender seu funcionamento.

Primeiro vamos pensar nas linhas do código fonte de um programa, que aprendemos anteriormente que nada mais é que um conjunto de comandos que serão executados pelo computador linha após linha assim como lemos uma receita de bolo. Se digitarmos comandos atrás de comandos até o final do código do programa sem nenhum tipo de comando de controle de fluxo, vamos ter uma espécie de programa burro, comparado a um funcionário que não pensa, apenas faz seu trabalho sem analisar, pensar ou questionar aquela ação. É para isso que serve os comandos de controle de fluxo, para que o computador possa analisar os dados do programa e a partir dai possa tomar rumos diferentes a partir das informações desse dado, complicado? Nem tanto, vamos continuar o raciocínio
.
Vamos começar com comando mais simples e mais comum na programação, o If. If significa em português "Se". É aquele "Se" que usamos em frases como, "Se o Corinthians ganhar a libertadores..." ou "Se eu sou inteligente...". A idéia na programação é a mesma, dar uma condição para que uma ação seja tomada. Se essa condição então for verdadeira, então alguma ação irá ocorrer, voltando ao português seria como, "Se o Corinthians ganhar a libertadores, vai chover canivete" ou "Se eu sou inteligente, eu sei programar". Para que uma ação seja tomada, primeiro é necessário que uma condição seja verdadeira, seja qual for essa condição, em poucas palavras é assim que podemos definir o If.

Se lembra anteriormente que eu falei da variável booleana, aquela que ela só armazena dois tipos de dados, true ou false, verdadeiro ou falso, 1 ou 0. Esses são os resultados que um If espera, um true ou false, recebendo verdadeiro ele executa as ações que lhe foram designadas, caso receba falso ela anula todas as ações designada a ela e o programa passa para os comandos após os comando do If.

Mas como testamos uma condição na programação? Para transcrevermos uma condição na programação devemos utilizar os Operadores de Comparação que com certeza você deve se lembrar a suas aulas de matemática da quinta série. São eles:

= (Igual)
> (Maior)
< (Menor)
<> ou != (Diferente)
<= (Menor ou Igual)
>= (Maior ou Igual)

Esses operadores são utilizados para montarmos nossas condições que vão retornar verdadeiro ou falso, de acordo com os dados que ele testar. Por exemplo, 1=5, essa condição retornará false e o If não vai executar os comando designados a ele, mas se a condição for 1<5, então o If vai retornar verdadeiro e logo as ações designadas ao If serão executadas. Da mesma forma, as condições 1=1, 6=>5 ou 3<4 retornam verdadeiro e as condições 5=6, 3<=1 ou 5>1 retornam falso por exemplo. Outra forma de retornar verdadeiro ou falso para  uma If é através das funções, porém vamos aprender isso mais para frente.

Lógico que em um programa ou jogo dificilmente iremos fazer testes assim, normalmente iremos testar as variáveis que aprendemos anteriormente. Por exemplo, vamos fazer um programa que ajude um médico a tomar certas decisões a partir de dados (variáveis) dos pacientes. Então certamente teríamos linhas parecidas com essa no nosso programa:

If idade_do_paciente>40
 "Faça o exame de próstata"

Ou mesmo o comando:

If mes_da_gravidez=9
 "Faça o parto!"

A lógica é sempre a mesma, o que muda de linguagem para linguagem são os operadores e a forma de escrever os comandos, como por exemplo, o C que usa dois iguais (==) para testes de igualdade.

Agora e se nesse programa desejássemos avisar para o médio caso as condições não fossem verdadeiras? É ai que entra o Else, que nada mais é que um complemento do If, e somente pode ser usado após ele. Else em português siguinfica "se não". Utilizado em frases como "Se eu ganhar na loteria, eu irei pagar as minhas dividas, se não vou deixar sem pagar mesmo" ou "Se eu souber programar, eu criarei um jogos, se não eu não vou criar nenhum jogo". E poucas palavras, é dar uma ação para ser feita caso a condição do If seja falsa. Então nosso programa ficaria:

If idade_do_paciente>40
 "Faça o exame de próstata"
Else
 "Esse tá salvo da dedada"

If mes_da_gravidez=9
 "Faça o parto!"
Else
 "Alarme falso"

No nosso exemplo introduzimos apenas um comando por If e Else, porém podemos colocar quantos comando quisermos dentro dos blocos de código do If e Else, até podemos colocar outro comando If dentro do If ou do Else caso ache necessário.

Na programação é muito comum se utilizar fluxogramas para demonstrar a forma como o programa vai tratar o fluxo de dados, abaixo temos uma fluxograma de exemplo mostrando um simples programa que usa o If e o Else.

Dessa forma podemos visualizar melhor a forma como os comandos de controle de fluxo trabalham. Nos fluxogramas, quando desejamos representar um comando de controle de fluxo, usamos um losango que é ligado em duas pontas diferentes, um para o resultado positivo e outro para o negativo, os outros elementos não são um padrão definido então podemos encontrar fluxogramas que usam outras formas para representar saída de dados ou texto, aqui uso um retângulo para dar inicio e fim ao fluxo, e uma forma de pontas esféricas para passar um texto para o usuário.

Agora voltando ao programinha do médico, verificamos a idade do paciente e o mês da gravidez da grávida, mas esse teste não é suficiente, pois se uma mulher tiver mais de quarenta anos ela será submetida ao teste de próstata, e aqui vai uma lição de anatomia de grátis para quem não sabe, mulher não tem próstata. Temos que complementar a condição do If, muito podem até pensar em colocar mais um If dentro do If, porém existe outra forma melhor de fazer isso, é através dos Operadores Lógicos.

Os Operadores Lógicos são usados para complementar o comando de condição, podemos adicionar quantos operadores quisermos em uma sentença de condição. As operações lógicas existentes são:

And ou && (E): Irá retornar verdadeiro apenas se as duas sentenças entre ele forem verdadeiras, exemplo 1=1 And 1<5 é verdadeiro, mas 1=1 And 1>5 é falso.

Or ou || (Ou): Irá retornar verdadeiro se uma das duas sentenças entre ele for verdadeira, independente se a outra for falsa. Exemplo, 1=1 Or 1<5 é verdadeiro, e 1=1 Or 1>5 também é verdadeiro, mas 1>5 Or 1>-1 é falso.

Not ou ! (Não): Irá retornar verdadeiro sem a condição a sua frente for falsa, e retornará falso se a condição a frente for verdadeira. Basicamente inverte o resultado da condição. Not 1=1 é falso, e Not 1<5 é verdadeiro.

Confuso? Vamos a pratica para clarear as idéias, programa para o médico ficaria assim.

If idade_do_paciente>40 And sexo="masculino"
 "Faça o exame de próstata"
Else
 "Esse tá salvo da dedada"

If mes_da_gravidez=9 And Not sexo="masculino"
 "Faça o parto!"
Else
 "Alarme falso"

Mas o médico não tá satisfeito com o sistema de gravidez, ele quer detectar se a gravidez é de risco, que ocorre quando a mulher é menor de quinze anos ou maior de 35 anos, nesse caso deve-se usar o Or.

if idade<=15 Or idade>=35
 "Gravidez de risco"
Else
 "Gravidez normal"

Entendeu agora, não é tão difícil, iremos usar muito esses controladores sempre em nossos jogos, como por exemplo, para passar para uma próxima fase do jogo o jogador tenha que acumular mais de 1000 pontos, logo teríamos um If com uma condição pontos>1000, porém além disso o jogador tem que ter três chaves, então teríamos uma condição como pontos>1000 And chaves=3. É Simples, e é um bom treino de raciocínio lógico.

Como exercício tente pensar nos seus jogos favoritos e tente imaginar qual a sentença usada nas condições para detectar suas ações nos jogos, é uma forma de se preparar para pensar no seu jogo.

Por hora é só, e me despeço antes que algum Corintiano apareça querendo me espancar.

sexta-feira, 8 de abril de 2011

Lógica de Programação: Variáveis

Para ajudar aqueles que acompanham minhas séries de vídeo aulas, decidi fazer essa série de post para ajudar aqueles que estão iniciando na área de programação de jogos a entender melhor os termos e as lógicas que aplico nas vídeo aulas.

Primeiramente vamos entender o que se trata a lógica de programação. A melhor comparação que se pode fazer com a programação com a vida real, é a uma receita de bolo, funciona da mesma forma. Em uma receita primeiramente tempos os ingredientes que são declarados no início, depois temos o modo de fazer que deve ser seguido e executado linha a linha, da forma que é dita na receita. Temos aqui uma ótima analogia para programação, pois é dessa forma que basicamente cada linha de um programa funciona.

Uma vez me perguntaram em que ordem o computador lê os códigos inseridos na programação, pode parecer esquisito para alguns, mas algumas pessoas que estão iniciando podem ter essa dúvida, então por isso acho interessante frisar que assim como lemos um texto da esquerda para direita, de cima para baixo, os códigos de programação são lidos e executados da mesma forma, da esquerda para direita, de cima para baixo, linha após linha. Isso pode não ser sempre verdade, mas por enquanto para você que está começando é melhor entender dessa forma.

Assim como uma receita de bolo, onde no inicio declaramos os ingredientes que iremos usar, na programação devemos declarar no inicio os nosso ingredientes antes de realmente utilizá-lo, e um dos nossos ingredientes principais são as variáveis. Variáveis são na verdade pequenos espaços na memória onde armazenamos dados, mas para facilitar vamos fazer uma boa analogia, uma variável pode ser comparada a uma caixa. Numa caixa podemos armazenar qualquer coisa, ou mesmo nada, porém, as caixas têm um limite no que se pode armazenar dentro delas, as variáveis também são assim, elas tem um limite no número de dados que se armazena dentro delas. Se vamos usar uma caixa para armazenar algo, antes de comprá-la devemos saber o tamanho da caixa que iremos precisar, da mesma forma antes de criar uma variável devemos especificar seu tamanho através da declaração.

Quando declaramos uma variável, estamos primeiramente dizendo o que iramos guardar dentro dela, a partir dessa informação, o computador irá reservar um espaço para armazenar esse dado, que pode variar de acordo com o tipo variável escolhida na declaração. Somente após declararmos à variável e esse espaço for reservado na memória, poderemos usar essa variável para armazenar o tipo de dado pré definido na declaração.

Mas quais tipos de variáveis existem? Existem diversas, e há caso de linguagens de programação que tem tipos próprios de variáveis, porém existem os tipos básicos que são encontrados em todas elas, e que a maioria dos outros tipos de variáveis se baseia, são elas:

Inteiro (int): Variáveis do tipo inteiro armazenam somente números inteiros, esses incluem os números 1, 2, 3, 4 e assim por diante. E os valores negativos como -1, -2, -3, -4 e assim por diante. Porém não incluímos os números quebrados que são aqueles valores que tem casas decimais após a vírgula como 1,4 ou -0,5 por exemplo. O valor máximo que se pode armazenar nesse tipo varia de linguagem para linguagem, porém normalmente é muito alto, coisa de ultrapasse a casa dos milhões.

Flutuante (float): Assim como o inteiro, abrange os números 1, 2, 3..., e negativos como -1, -2, -3 ..., mas ao contrário do inteiro, ele cobre também os números quebrados que tem valores após a virgula, como 1,9 ou -5,1 por exemplo. Algo que deve ser ressaltado sobre os números quebrados é que as linguagens de programação utilizam-se de ponto (.) no lugar da virgula ao declarar números quebrados, ou seja, se nós gostaríamos de passar o valor 1,82 então devemos escrevemos 1.82.

Caráter (char): Pode armazenar somente um caráter, podendo ser ele letras como a, b, c..., ou numérico como 1, 2, 3... Também pode ser caracteres especiais com cifrão, dois pontos, ponto e vírgula, etc. Porém nem todas as linguagens suportam todos os caracteres especiais, podendo variar de linguagem para linguagem. A valore numéricos quando armazenados nesse tipo não podem ser utilizados para operações matemáticas, pois perdem seu valor numérico, sendo considerado um simples caráter visual.

Booleano (bool): Esse tipo pode armazenar somente dois tipos de valores, 0 ou 1 que são tratados respectivamente como falso e verdadeiro (false e true).

Caracteres (string): Esse tipo pode armazenar um conjunto de caracteres para formar frases e palavras, podendo variar o número máximo de caracteres para cada linguagem de programação. Algumas linguagens como o C, tratam string como um conjunto de variáveis do tipo char.

Esses são os tipos mais básicos de variáveis, existem outros, mas na maioria são versões dessas variáveis básicas com alguns incrementos como, por exemplo, o tipo double encontrado em algumas linguagens que serve para armazenar números maiores do que o tipo float não suporta.

Devemos antes de declarar um tipo de variável pensar em sua finalidade,  porque cada tipo requer um tamanho diferente na memória. Uma variável do tipo float por exemplo ao ser declarada exige mais espaço liberado na memória do que se fosse declarado um tipo inteiro. Mesmo que os computadores dos dias atuais disponham de um amplo espaço de memória, esses espaços não são infinitos, por isso ainda sim devemos pensar o tipo correto de variáveis a se declarar. Mesmo porque também nem sempre vamos lidar com um grande espaço de memória, como no caso de aplicativos desenvolvidos para dispositivos moveis como os celulares, normalmente eles dispõem de pouca memória e deve ser trabalhado sempre pensando nesse espaço limitado.

Ao declararmos uma variável, também damos um nome a ela, pelo qual podemos identificar essa variável. Ela pode conter qualquer nome desde que siga algumas regras que também variam de linguagem para linguagem, mas na maioria basicamente tem as mesmas regras. Uma delas é não poder começar o nome com um número, podendo somente utilizar números após o primeiro caráter. Não usar caracteres especiais como aspas, asterisco e  parênteses, e nem caracteres reservados que variam de linguagem para linguagem, como por exemplo < (menor), ; (ponto e vírgula), : (dois pontos), etc. Enfim, é sempre recomendado se utilizar letras, e números somente após o primeiro caractere.

Outro ponto sobre os nomes é que “A” é diferente de “a”, em linguagem de programação chamamos isso de  Case sensitive. Se declararmos uma variável com nome de Amora, não poderemos usar ela mais para frente usando o nome amora, nome com letras maiúsculas são diferentes de letras minúsculas e você deve prestar atenção ao utilizá-las para que não cause erro em seus códigos. Na verdade essa regra vale para quase tudo que é escrito em um código na maioria das linguagens de programação.

As variáveis são a base da programação e são utilizados em praticamente todo o decorrer de um código de um programa ou jogo, por isso devemos fixar bem suas regras e a forma de usar, para fazermos bom uso delas e tornar nosso código mais simples e gerando um programa ou um jogo mais leve.

Espero que tenham compreendido essa pequena introdução a programação, e agora consigam compreender melhor a forma que trabalho com as variáveis nas minhas vídeo aulas. Em breve estarei postando explicações mais detalhadas sobre outros elementos que fazem parte da programação de jogos e programas para computadores em geral.