Programação para Games I Estrutura de Decisão
Estrutura de Decisão Uma estrutura de decisão examina uma ou mais condições e decide quais delas serão executadas Em jogos digitais, considere inicialmente um menu com a possibilidade do jogador escolher o nível como Fácil Médio Dificil SE ele escolher a opção Fácil, ele terá uma determinada experiência de jogabilidade SE ele escolher a opção Dificil, ele terá uma outra experiência de jogabilidade
Estrutura de Decisão O comando if é uma estrutura de decisão, e o utilizaremos muito durante todo o nosso curso De forma geral temos a seguinte sintaxe: if(condição) { instrução; Ou seja, se a condição for aceita, será executada a instrução, se não for aceita, não será executada a instrução
Estrutura de Decisão #include <stdio.h> main(){ int a=20, b=5; if(a>b) //se a for maior que b { printf( O valor em a é maior que o valor em b );
Estrutura de Decisão No código anterior, o valor da variável a é 20 e o valor da variável b é 5 Nosso código diz: SE a for menor que b, faça: mostre na tela a mensagem valor em a é maior que o valor em b Como o valor em a realmente é maior que o valor em b, então será apresentado na tela a mensagem Agora, no mesmo código, modifique o valor de a para 5 e o valor de b para 20 O que aconteu? Se não aconteceu nada, ótimo, estamos no caminho certo
Estrutura de Decisão Acontece que testamos apenas se o valor em a é maior que o valor em b, entretanto não fizemos o teste contrário Em português diríamos algo assim SE o valor em a for maior que o valor em b escreva na tela valor em a é maior que o valor em b... SENÃO escreva na tela valor em b é maior que o valor em a Note que agora, além do SE, temos o SENÃO Se uma coisa é verdadeira faça isso, SENÃO (ou seja, se não for), faça essa outra ação Veja no próximo slide como ficaria o código
Estrutura de Decisão #include <stdio.h> main(){ int a=20, b=5; if(a>b) //se a for maior que b { printf( O valor em a é maior que o valor em b ); else { printf( O valor em b é maior que o valor em a );
Estrutura de Decisão Desta forma concluímos que, ao executarmos uma determinada condição, se ela for satisfeita executaremos a instrução entre as chaves O senão simboliza a negação das condições anteriores (dos ifs anteriores)
Estrutura de Decisão Agora, o que acontece quando o valor em a for igual a 20, e o valor em b for igual a 20? Experimente!
Estrutura de Decisão Aninhada Quando uma estrutura de decisão é o falso de uma outra, chamamos o todo desta estrutura como Estrutura de Decisão Aninhada ou encaixada ou encadeada No exemplo anterior, se o valor de a fosse igual ao valor de b, seria apresentado na tela a mensagem O valor em b é maior que o valor em a o que não condiz com a verdade Desta forma, precisamos explorar todas as possibilidades
Estrutura de Decisão Aninhada Em português, é como se falássemos: SE o valor em a for maior que o valor em b escreva na tela valor em a é maior que o valor em b... SENÃO, SE o valor em b for maior que o valor em a escreva na tela valor em b é maior que o valor em a... SENÃO escreva na tela valor em a é igual ao valor em b Agora temos um SENÃO, SE, ele é responsável por explorar todas as possibilidades No próximo slide, temos a estrutura de decisão aninhada no exemplo de comparação das variáveis a e b
Estrutura de Decisão Aninhada #include <stdio.h> main(){ int a=20, b=5; if(a>b) //se a for maior que b { printf( O valor em a é maior que o valor em b ); else if(b>a) { printf( O valor em b é maior que o valor em a ); else printf( O valor em a é igual ao valor em b );
Estrutura de Decisão Aninhada No exemplo anterior, utilizamos o primeiro if e uma sequencia de else-if e else Você pode usar quantos if-else desejar, tudo depende de quantas opções você tem disponível No nosso caso, tínhamos apenas 3: ou o valor de a é maior que o valor de b ou o valor de b é maior que o valor de a ou o valor de a e b são iguais
Estrutura de Decisão Aninhada No próximo slide vamos fazer um programa que verifica se o número é par ou ímpar Aqui nós utilizaremos o operador % Este operador é responsável por pegar o resto de uma divisão, por exemplo, se fizermos resultado = 5%2; a variável resultado receberá o valor 1, pois 1 é o resto da divisão de 5 por 2 Por outro lado, se fizermos resultado = 4%2; a variável resultado receberá o valor 0, pois 0 é o resto da divisão de 4 por 2 Desta forma, um número será dito como par SE a divisão de um número por 2 tiver como resto o valor zero
Estrutura de Decisão Aninhada #include <stdio.h> main(){ int n1; printf( Digite um numero para verificar se eh par ou impar ); scanf( %d,&n1); if(n1%2==0){ printf( O numero %d eh par,n1); else{ printf( O numero %d eh impar,n1);
Operadores Relacionais Nos exemplos anteriores vimos alguns exemplos de como utilizar a estrutura de decisão if e if-else Note que, entre os parênteses do if, sempre fazemos uma comparação de um valor com outro valor Para realizar esta comparação utilizamos o conceito de Operadores Relacionais
Operadores Relacionais Operadores relacionais são utilizado para comparar valores, tendo como resultado um valor booleano (VERDADEIRO ou FALSO) Os operadores relacionais são: == (IGUAL)!= (DIFERENTE) > (MAIOR) < (MENOR) >= (MAIOR IGUAL) <= (MENOR IGUAL)
Operadores Relacionais Os operadores relacionais podem mudar de uma linguagem para outra? SIM, em algumas linguagens o símbolo de diferente é!=, em outras é <> Veja que, em C e algumas outras linguagens, apenas 1 sinal de igual é atribuição, ou seja, uma variável recebendo outro valor, porém, se tivermos 2 sinais de igual, é uma comparação num = 4; //a variável num está recebendo o valor 4 num == 4; //estamos comparando se o conteúdo da variável num é igual a 4 A seguir, veja o teste lógico utilizando os operadores relacionais Se o resultado for 1, significa que é verdadeiro, se for 0, significa que é falso
Operadores Relacionais #include <stdio.h> main(){ int n1=4, n2=2; int resultado; resultado = n1 > n2; printf( N1 é maior que N2? %d,resultado); resultado = n1 < n2; printf( N1 é menor que N2? %d,resultado); resultado = n1 == n2; printf( N1 é igual a N2? %d,resultado); resultado = n1!= n2; printf( N1 é diferente de N2? %d,resultado);
Exemplo utilizando estrutura condicional aninhada e operadores relacionais #include <stdio.h> main(){ float media; scanf( %f,&media); if(media==10){ printf( Parabéns, você tirou uma ótima nota e está aprovado! ); if(media>=7){ printf( Você está aprovado ); if(media>=4){ printf( Você está de exame e quase ficou de DEP ); if(media<3) printf( Reprovado );
Operadores Lógicos No exemplo anterior, o que será impresso na tela se o aluno tirar nota 8? e nota 6? O resultado é conforme o esperado?
Operadores Lógicos Qual o critério para saber se o aluno foi aprovado, reprovado ou está de exame? SE a média for MAIOR IGUAL a 7 aprovado SE a média for MAIOR IGUAL a 4 E MENOR que 7 exame SE a média for MENOR que 4 reprovado Note que agora apareceu um operador novo, a ele damos nome de operador lógico
Operadores Lógicos Qual o critério para saber se o aluno foi aprovado, reprovado ou está de exame? SE a média for MAIOR IGUAL a 7 aprovado SE a média for MAIOR IGUAL a 4 E MENOR que 7 exame SE a média for MENOR que 4 reprovado Note que agora apareceu um operador novo, a ele damos nome de operador lógico Os operadores lógicos são utilizados quando é necessário usar duas ou mais condições dentro da mesma instrução if para que seja tomada uma única decisão cujo resultado será verdadeiro ou falso.
Operadores Lógicos E VERDADEIRO VERDADEIRO VERDADEIRO VERDADEIRO FALSO FALSO FALSO VERDADEIRO FALSO FALSO FALSO FALSO Para o caso do operador E, o resultado será verdadeiro caso todas as comparações sejam verdadeiras.
Operadores Lógicos OU VERDADEIRO VERDADEIRO VERDADEIRO VERDADEIRO FALSO VERDADEIRO FALSO VERDADEIRO VERDADEIRO FALSO FALSO FALSO Para o caso do operador OU, o resultado será verdadeiro em todos os casos, exceto quando as duas comparações forem falsas
Operadores Lógicos Em C, e na maioria das linguagens de programação, o operador E é representado por && e o operador OU é representado por II No próximo slide vamos adaptar o código do exemplo anterior, agora colocando o operador lógico E
Operadores Lógicos #include <stdio.h> main(){ float media; scanf( %f,&media); if(media==10){ printf( Parabéns, você tirou uma ótima nota e está aprovado! ); if(media>=7 && media<10){ printf( Você está aprovado ); if(media>=4 && media<7){ printf( Você está de exame e quase ficou de DEP ); if(media<3) printf( Reprovado );
Operadores Lógicos Agora, experimente substituir o && (E) do exemplo anterior e colocar o OU ( )