Aula 04 - Operadores Lógicos e Condicionais
Conceitos-Chave:
- AND (&&), e
- OR (||), ou
- NOT (!), não é
- if, se
- else, caso contrário
- else if, caso contrário se
Operadores lógicos
Os operadores lógicos são, talvez, um bocado difíceis de compreender, uma vez que não fazem parte da matemática básica. Para dar um exemplo simples:
Imaginem que queríamos saber se o HP(Pontos de Vida) de uma personagem está compreendido entre 0 e 100. Poderíamos fazê-lo da seguinte forma:
#include <iostream>
using namespace std;
int main()
{
int min = 0, max = 100; //valores mínimos e máximos de HP
bool varteste; //a variável para verificação
int valor; //o valor a ser introduzido pelo utilizador
cout << "VERIFICACAO DO LIMITE DE HP" << endl;
cout << "\nInsira um valor de HP:" << endl;
cin >> valor;
varteste = valor >= min && valor <= max;
/*
Se o valor for maior ou igual ao minimo E o valor for menor ou igual ao
máximo, então varteste é verdadeiro
*/
cout << "O teste e igual a " << varteste << endl;
cout << "\n\nCodigo: \n\n0 -> Falso\n1 -> Verdadeiro" << endl;
cin.get();
cin.get(); // Pára o programa até o utilizador premir uma tecla
return 0;
}
O caracter && (AND) é a única coisa de novo. Para uma melhor explicação criei umas tabelas de cada um dos três operadores lógicos:
Operador && (AND, e):
| A | B | Resultado (A && B) |
| false | false | false |
| false | true | false |
| true | false | false |
| true | true | true |
Lê-se: A e B são verdadeiros (true)?
Operador || (OR, ou):
| A | B | Resultado (A || B) |
| false | false | false |
| false | true | true |
| true | false | true |
| true | true | true |
Lê-se: A ou B (algum deles) é verdadeiro?
Operador ! (NOT, não é)
| A | Resultado (!A) |
| false | true |
| true | false |
Lê-se: o contrário de A.
E um exemplo prático:
bool a = true;
bool b = true;
bool c = false;
bool d = false;
bool e;
e = a && c; // e vai ser igual a false
e = a && b; // e vai ser igual a true
e = c && d; // e vai ser igual a false
e = a || c; // e vai ser igual a true
e = a || b; // e vai ser igual a true
e = c || d; // e vai ser igual a false
e = a == c; // e vai ser igual a false
e = a == b; // e vai ser igual a true
e = c == d; // e vai ser igual a true
e = !a; // e vai ser igual a false
e = !c; // e vai ser igual a true
Operadores condicionais: If
Chegamos agora a um dos pontos mais importantes em programação, os operadores condicionais. Quem nunca programou e está a ler este curso deve ter alguma vez pensado como é que através de simples conjuntos de instruções (a maior parte deles matemáticos), poderemos criar jogos.
Até agora não temos construídos jogos muito interactivos (podemos até dizer que não criamos jogos nenhuns :), são mais pedaços de texto que enviamos ao utilizador. Os operadores condicionais vão possibilitar essa interacção.
Por exemplo, imaginem que queríamos saber se o jogador morreu para mostrar uma mensagem de "Game Over". O que é que precisaríamos? Primeiro uma variável de HP (Health Points ou Pontos de Vida). Precisaríamos também de utilizar o operador menor ou igual (para saber se o HP é menor ou igual a 0). Vamos criar um programa com o que sabemos até agora:
#include <iostream>
using namespace std;
int main()
{
bool varteste; //a variável para verificação
int hp; //os pontos de saúde
cout << "PROGRAMA GAMEOVER 0.1" << endl;
cout << "\nInsira um valor de HP:" << endl;
cin >> hp;
varteste = hp <= 0; //até agora nada de novo...
cout << "O teste e igual a " << varteste << endl;
cout << "\n\nCodigo: \n\n0 -> Falso\n1 -> Verdadeiro" << endl;
cin.get();
cin.get(); // Pára o programa até o utilizador premir uma tecla
return 0;
}
Com os conhecimentos anteriores só poderíamos chegar a isto, mas não é isto que queremos. Queremos que o programa mostre um texto a dizer "Game Over". Para isso vamos utilizar o operador condicional IF.
Se(if) varteste for verdadeiro, então vai ser mostrado "Game Over".
#include <iostream>
using namespace std;
int main()
{
bool varteste; //a variável para verificação
int hp; //os pontos de saúde
cout << "PROGRAMA GAMEOVER 1.0" << endl;
cout << "\nInsira um valor de HP:" << endl;
cin >> hp;
varteste = hp <= 0; //até agora nada de novo...
if (varteste) //se varteste for verdadeiro...
{
cout << "\nGame Over" << endl; //então...
}
cin.get();
cin.get(); // Pára o programa até o utilizador premir uma tecla
return 0;
}
Vamos parte por parte:
if (condicao){
...instrucoes
}
Se a condicao (que está dentro de parentises) for verdadeira, então as instrucoes vão ser executadas. Notem no uso de chavetas. Estas só são necessárias se o bloco do if tiver mais que uma instrução.
Também podemos colocar a condição directamente no if, sem precisar de uma variável booleana:
#include <iostream>
using namespace std;
int main()
{
int hp; //os pontos de saúde
cout << "PROGRAMA GAMEOVER 1.01" << endl;
cout << "\nInsira um valor de HP:" << endl;
cin >> hp;
if (hp <= 0) //se o HP for menor ou igual a 0...
{
cout << "\nGame Over" << endl; //então...
}
cin.get();
cin.get(); // Pára o programa até o utilizador premir uma tecla
return 0;
}
Este código é muito melhor, tanto em questões de performance (é mais curto e não usa uma variável booleana) como de legibilidade: é muito mais fácil compreender a condição. Se o HP for menor ou igual a 0, então mostra a frase "Game Over".
Só usei o Exemplo 4.3 para demonstrar como funciona o if: se o que está entre parêntises (condição) for verdadeiro (igual a 1), então executa as instruções que fazem parte do if (geralmente as que estão no bloco seguinte).
Dica:
A condição if, se tiver apenas uma instrução, não tem que possuir chavetas. Por exemplo:
if (hp <= 0)
cout << "Game Over" << endl;
cin.get();
Neste caso cout << "Game Over" << endl; faria parte das instruções a serem executadas pelo if, enquanto o cin.get() não.
É no entanto encorajado a continuarem a usar chavetas com uma instrução, pois permite uma maior legibilidade no código (qualquer pessoa saberá facilmente quando começa e termina o if).
Dica:
Já na primeira lição falei sobre um bloco. Agora o conceito de bloco é mais importante. Um bloco serve para
agrupar várias instruções numa única instrução e é definido entre chavetas ('{' e '}'). É por isso que podemos optar por não usar chavetas numa condição if, isto se
só esta só possuir uma instrução. Se tivermos mais que uma temos que usar um bloco (através das chavetas).
Dica:
Decerto que repararam nas 3 diferentes versões do programa GameOver.
A versão 0.1 significa que o programa está ainda numa fase experimental, ainda não atingiu o necessário para chegar a 1.0. Isto deve-se ao programa ainda não mostrar a mensagem Game Over.
A versão 1.0 significa que o programa Game Over já atingiu o seu propósito, é a primeira versão que cumpre o objectivo.
A versão 1.01 significa que foram feitas ligeiras alterações no programa (a eliminação da variavel varteste).
Mais abaixo vamos desenvolver a versão 1.1, uma versão de programa um pouco mais alterada (com alterações mais visíveis).
Operadores condicionais: Else e Else if
Vamos aprender agora os operadores condicionais else e else if. Estes operadores servem de complemento ao operador if.
Embaixo está o exemplo 4.5: Programa Game Over 1.1, que utiliza o operador else:
#include <iostream>
using namespace std;
int main()
{
int hp; //os pontos de saúde
cout << "PROGRAMA GAMEOVER 1.1" << endl;
cout << "\nInsira um valor de HP:" << endl;
cin >> hp;
if (hp <= 0) //se o HP for menor ou igual a 0...
{
cout << "\nGame Over" << endl; //então...
}
else // caso contrário (se o HP não for menor ou igual a 0)...
{
cout << "\nConseguiu sobreviver!" << endl;
}
cin.get();
cin.get(); // Pára o programa até o utilizador premir uma tecla
return 0;
}
Penso que não será muito dificil compreender o que o else faz. Caso o if anterior não seja cumprido, então vai cumprir o que está dentro do else. É então necessário uma condição if a preceder o else (não pode existir sozinho).
Agora vou mostrar a condição else if, criando um menu de um jogo interactivo:
#include <iostream>
using namespace std;
int main()
{
int escolha;
cout << "MENU DE UM JOGO" << endl;
cout << "\n\n1 - Novo Jogo" << endl;
cout << "2 - Carregar Jogo" << endl;
cout << "3 - Opcoes" << endl;
cout << "4 - Sair" << endl;
cin >> escolha;
if (escolha == 1)
cout << "Escolheu comecar um novo jogo" << endl;
else if (escolha == 2)
cout << "Escolheu carregar um jogo antigo" << endl;
else if (escolha == 3)
cout << "Opcoes:" << endl;
else if (escolha == 4)
cout << "Deseja mesmo sair?" << endl;
else // Caso contrário...
cout << "Escolha errada" << endl;
cin.get();
cin.get();
return 0;
}
Não acho muito difícil de perceber. Primeiro temos o if. Se a escolha for igual a 1 executa a instrução (ou bloco). Caso contrário (else) se (if) a escolha for igual a 2....
Experimentem compilar o programa e alterar os textos. Basicamente está assim:
Programa:
Mostra o menu,
Espera que o utilizador forneça um valor,
Se o valor for igual a 1
Escreve no ecrã: Escolheu comecar um novo jogo
Caso o valor não seja igual a 1,
Se o valor for igual a 2
Escreve no ecrã:...... (vocês sabem ;)
Caso o valor não seja igual a 2,
Se o valor for igual a 3
Escreve no ecrã:...... (vocês sabem ;)
Caso o valor não seja igual a 3,
Se o valor for igual a 4
Escreve no ecrã:...... (vocês sabem ;)
Caso o valor não seja igual a 4 (logo diferente dos outros valores
acima),
Escreve no ecrã: Escolha errada
O Primeiro Jogo: Adivinha o Número
Sim, após 4 aulas de C++ já pode fazer um jogo!!! Aqui vai o código:
#include <iostream>
#include <stdlib.h> // para podermos usar o system("PAUSE");
using namespace std;
int main()
{
int numero = 6;
int utilizador;
cout << "*********************************" << endl;
cout << " ADIVINHE O NÚMERO " << endl;
cout << "*********************************" << endl;
cout << "Insira um numero por favor: _\b";
cin >> utilizador;
if (utilizador == numero)
{
cout << "\n\n\nPARABENS!!!!\nACERTOU" << endl;
}
else if (utilizador < numero)
{
cout << "\n\n\nNao acertaste :(\nDemasiado baixo" << endl;
}
else if (utilizador > numero)
{
cout << "\n\n\nNao acertaste :(\nDemasiado alto" << endl;
}
cin.get();
cin.get();
return 0;
}
Dou-vos para trabalho de casa perceberem o que faz o programa :P
Este é o primeiro jogo! Falta muita coisa, como o primeiro número (é sempre 6 e não outro), e uma opção para tentar novamente, mas o que querem? Ainda não aprendemos muito, mas já fizemos um jogo!
Próxima aula -> C++ 05 - Mais Operadores Condicionais
Fazer o download do código fonte dos exemplos da aula
Fazer o download da aula em PDF (Brevemente)
Ir para o topo da página