(0.5) Assuma que
e
são variáveis e
e
são comandos. Dado o algoritmo a seguir, expresse o que é necessário para que os comandos
e
sejam executados.
,se A > B então
se \(B \leq C\) então
ise \(C \neq \mathrm{D}\) então
\(\mathrm{S}_{1}\)
senão
\(\mathrm{S}_{2}\)
senão
\(\mathrm{S}_{3}\)
senão
\(\mathrm{S}_{4}\)
,se A > B então
se \(B \leq C\) então
ise \(C \neq \mathrm{D}\) então
\(\mathrm{S}_{1}\)
senão
\(\mathrm{S}_{2}\)
senão
\(\mathrm{S}_{3}\)
senão
\(\mathrm{S}_{4}\)
Passo 1
O enunciado dá o seguinte algoritmo (vou reescrever com os símbolos bem claros):\n
O que pede o problema: expressar, em termos das variáveis
, as condições necessárias para que cada comando
seja executado.
Passo 2
Entendendo a lógica dos “se … então”: cada teste é uma condição booleana. A execução segue assim, passo a passo:
- Primeiro testa-se
. Se for falso, vai direto para o último “senão” e executa-se . Se for verdadeiro, continua para dentro do bloco. - Dentro do bloco onde já sabemos que
é verdadeiro, testa-se . Se esse teste for falso, executa-se . Se for verdadeiro, continua. - No próximo nível, onde já sabemos que
e são verdadeiros, testa-se . Se for verdadeiro, executa-se ; caso contrário (ou seja, ), executa-se .
Vou agora transformar esse raciocínio em expressões lógicas combinadas e explicar cada uma.
Passo 3
Condição para
. Para chegar a
precisamos que todos os testes anteriores tenham resultado “verdadeiro”: primeiro
, depois
, e por fim
. Em linguagem lógica combinada isso é:
Explicação didática: o símbolo
significa “e” lógico — ou seja, todas as três condições devem ser verdadeiras ao mesmo tempo. Exemplo numérico: se
,
,
,
, então
,
e
são verdadeiros, então
será executado.
Passo 4
Condição para
. Para chegar em
precisamos que
e
sejam verdadeiros e que o último teste seja falso. O último teste é
; o seu falso equivale a
. Assim:
Explicação: aqui temos duas condições verdadeiras iniciais (entramos no bloco) e no terceiro teste obtemos igualdade, então executa-se
. Exemplo:
,
,
,
dá
.
Passo 5
Condição para
.
ocorre quando o primeiro teste
é verdadeiro (entramos no bloco) mas o segundo teste
é falso. A negação de
é
. Portanto:
Explicação: não precisamos avaliar
porque esse teste só aparece se
for verdadeiro; como aqui
é falso, já caímos no ramo do “senão” que executa
. Exemplo:
,
,
(qualquer
) faz
.
Passo 6
Condição para
.
está no “senão” do teste inicial
. Logo
é executado sempre que o teste inicial for falso, ou seja, quando:
Explicação: não importa o que ocorreria nos testes internos — eles não são avaliados se
for falso. Exemplo:
,
(qualquer
) executa
.
Passo 7
Verificação da cobertura e exclusividade. As quatro condições que achamos são mutuamente exclusivas (não podem ocorrer duas ao mesmo tempo) e cobrem todas as possibilidades, porque separamos primeiro em
ou
; no caso
separamos em
ou
; no caso
separamos em
ou
. Assim cada entrada de valores cai exatamente em um dos quatro ramos.