Baixar a apostila C++ Progressivo |
- && - AND ou E
- || - OR ou OU
- ! - NOT ou de negação
Operador Lógico AND: &&
O operador && serve para unir duas expressões lógicas em uma só, assim:- expressão1 && expressão2
O resultado dessa expressão é verdade somente se a expressão1 E a expressão2 forem verdadeiras.
Se qualquer uma delas for falsa, a expressão geral se torna falsa também.
A tabela verdade do operador && é:
Por exemplo, para você doar sangue, precisa ser de duas condições:
Ser maior de idade
Não ter doenças
Ou seja, pra dor você precisa ser maior E TAMBÉM não ter doenças:
- maioridade && não ter doenças
Se qualquer uma dessas condições não for satisfeita (for false), você não pode doar sangue.
Vamos refazer o programinha que diz se é obrigatório você votar ou não.
Para ser obrigatório, deve satisfazer duas condições:
Ter 18 anos ou mais
Ter menos de 65 anos
Ou seja, precisa ter 18 anos E (AND) precisa ter menos de 65 anos.
Nosso código C++ fica assim:
#include <iostream> using namespace std; int main() { int age; cout <<"Sua idade: "; cin >> age; if( age>=18 && age<65 ) cout << "Obrigatório votar."; else cout << "Voto facultativo"; return 0; }
Veja que ficou bem mais enxuto, pois fizemos dois testes condicionais de uma vez só dentro do IF.
Se a pessoa tiver menos de 18 anos, a primeira expressão vai dar falsa e o teste inteiro se torna falso, indo pro ELSE.
Se ela tiver 65 ou mais, a segunda expressão já se torna falsa, deixando o resultado do IF falso também, indo pro ELSE.
Em ambos casos, o voto é facultativo.
Operador Lógico OR: ||
O operador lógico || (OU) une duas expressões assim:
expressão1 || expressão2
Ele retorna verdadeiro se qualquer uma das expressões forem verdadeiras.
Ou seja, só retorna falso se ambas forem falso. Confira a tabela verdade deste operador:
Por exemplo, se numa rodovia a velocidade máxima é de 80 km/h, andar acima disso e abaixo da metade (40 km/h) dá multa. Vamos testar:
Ou seja: se a velocidade for maior que 80 km/h OU for abaixo de 40 km/h, o motorista vai levar uma multa. Se alguma das expressões for verdadeira, o teste inteiro é verdadeiro.
Veja um programa que recebe a velocidade de um carro e diz se vai gerar multa ou não:
expressão1 || expressão2
Ele retorna verdadeiro se qualquer uma das expressões forem verdadeiras.
Ou seja, só retorna falso se ambas forem falso. Confira a tabela verdade deste operador:
Por exemplo, se numa rodovia a velocidade máxima é de 80 km/h, andar acima disso e abaixo da metade (40 km/h) dá multa. Vamos testar:
- velocidade > 80 || velocidade < 40
Ou seja: se a velocidade for maior que 80 km/h OU for abaixo de 40 km/h, o motorista vai levar uma multa. Se alguma das expressões for verdadeira, o teste inteiro é verdadeiro.
Veja um programa que recebe a velocidade de um carro e diz se vai gerar multa ou não:
#include <iostream> using namespace std; int main() { int speed; cout <<"Velocidade: "; cin >> speed; if( speed>80 || speed<40 ) cout << "Vai levar multa."; else cout << "Tudo ok."; return 0; }O IF detecta se você vai levar multa, ou seja, pra não levar precisa cair no ELSE, e só cai no ELSE se ambas as expressões forem falsas, logo, você não está nem acima de 80 nem está abaixo de 40, logo está entre 40 e 80, que é o correto. Sacou ? OU uma coisa OU outra.
Operador Lógico NOT: !
Por fim, temos o operador de negação.
Ele transforma o que é falso em verdadeiro, e o que é verdadeiro em falso.
Veja a tabela verdade dele:
Ou seja:
!true é o mesmo que false
!false é o mesmo que true
Refazendo o primeiro código:
A precedência de operadores entre eles é, de cima pra baixo:
!
&&
||
E se o usuário digitar menos que 0 ou mais que 10?
É um erro. Ajeite o programa usando o operador lógico || para caso digitem notas abaixo de 0 ou acima de 10.
Ele transforma o que é falso em verdadeiro, e o que é verdadeiro em falso.
Veja a tabela verdade dele:
!true é o mesmo que false
!false é o mesmo que true
Refazendo o primeiro código:
#include <iostream> using namespace std; int main() { int age; cout <<"Sua idade: "; cin >> age; if( !(age>=18 && age<65) ) cout << "Voto facultativo."; else cout << "Obrigatório votar"; return 0; }Refazendo o segundo código:
#include <iostream> using namespace std; int main() { int speed; cout <<"Velocidade: "; cin >> speed; if( !(speed>80 || speed<40) ) cout << "Tudo ok."; else cout << "Vai levar multa."; return 0; }Pode parecer mais complicado ou a mesma coisa, de fato é a mesma coisa, mas muitas vezes vai ser mais lógico e vai fazer mais sentido usar o operador NOT em alguns testes condicionais. Veremos isso algumas vezes, no decorrer de nosso curso de C++.
A precedência de operadores entre eles é, de cima pra baixo:
!
&&
||
Exercício de Operadores Lógicos
No tutorial passado, sobre IF e ELSEs aninhados, propusemos uma questão sobre converter uma nota numérica em A, B, C... mas tem um bug ali.E se o usuário digitar menos que 0 ou mais que 10?
É um erro. Ajeite o programa usando o operador lógico || para caso digitem notas abaixo de 0 ou acima de 10.
|| fica do lado esquerdo do teclado, entre shift e Z,,,,, digita shift + \\ .... e ela aparece. ││ outra alternativa digita alt+179
ResponderExcluir