Saltar para o conteúdo
Topos Uranos

Resumo

Uma condição é uma expressão cujo valor é verdadeiro ou falso. Esta aula estuda como as condições se constroem em C++: os seis operadores relacionais, que comparam dois valores e produzem um bool; os três conectivos lógicos, &&, || e !, que combinam condições como a conjunção, a disjunção e a negação da lógica, e a precedência que os ordena entre si e em relação à aritmética. Estuda também dois traços em que C++ se afasta da escrita matemática: a cadeia 1 < x < 5, que compila e não significa o que parece, e a avaliação em curto-circuito, pela qual o segundo operando de && e de || não é avaliado quando o primeiro já decide o resultado, o que permite proteger uma operação perigosa. Termina com a negação de condições compostas por meio das leis de De Morgan, comprovada com tabelas-verdade, e com o seu exemplo central: a condição de ano bissexto e a sua negação. A unidade ainda não tem decisões: as condições são avaliadas e impressas como true ou false, e a aula Decisões as porá a governar o programa.

Objetivos de aprendizagem

  1. Escrever em C++ condições compostas que traduzam enunciados como “xx está entre 1 e 10, extremos incluídos”.
  2. Negar uma condição composta com as leis de De Morgan e comprovar a equivalência com uma tabela-verdade.
  3. Usar a avaliação em curto-circuito para proteger uma operação, como em count != 0 && total / count > 2.
  4. Detectar o erro de escrever 1 < x < 5, explicar o que calcula e corrigi-lo.

A condição como expressão

A aula Caracteres, booleanos, conversões e constantes apresentou o tipo bool, com os seus dois valores true e false, e a aula Aritmética mostrou que uma expressão tem uma árvore, fixada pela precedência e pela associatividade, e um tipo, fixado pelos seus operandos. Esta aula reúne as duas ideias. Uma condição é uma expressão de tipo bool: não uma instrução que pergunta algo, mas um cálculo cujo resultado é uma resposta. count < 10 calcula-se como count + 1: tomam-se os operandos, aplica-se o operador e obtém-se um valor, só que o valor é true ou false em vez de um número. Se isto é assim, tudo o que vale para as expressões aritméticas vale para as condições: têm precedência, têm árvore, podem guardar-se numa variável com nome (const bool inRange{…}) e podem imprimir-se. Daí se segue a pergunta que percorre a aula: dada uma frase (“o ano é bissexto”, “a idade está entre 18 e 65”), que expressão tem exatamente esse valor de verdade para todos os dados possíveis?