(0.5) Assuma que A, B, C e D são variáveis e S_{1}, S_{2}, S_{3} e S_{4} são comandos. Dado o algoritmo a seguir, expresse o que é necessário para que os comandos \mathrm{S}_{1}, \mathrm{~S}_{2}, \mathrm{~S}_{3} e \mathrm{S}_{4} 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}\)

Passo 1

O enunciado dá o seguinte algoritmo (vou reescrever com os símbolos bem claros):\n
\text{se }A>B\text{ então}ã
\quad\text{se }B\le C\text{ então}ã
\quad\quad\text{se }C\ne D\text{ então}ã
\quad\quad\quad S_{1}
\quad\quad\text{senão}ã
\quad\quad\quad S_{2}
\quad\text{senão}ã
\quad\quad S_{3}
\text{senão}ã
\quad S_{4}
O que pede o problema: expressar, em termos das variáveis A, B, C, D, as condições necessárias para que cada comando S_{1}, S_{2}, S_{3}, S_{4} 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 A>B. Se for falso, vai direto para o último “senão” e executa-se S_{4}. Se for verdadeiro, continua para dentro do bloco.
  • Dentro do bloco onde já sabemos que A>B é verdadeiro, testa-se B\le C. Se esse teste for falso, executa-se S_{3}. Se for verdadeiro, continua.
  • No próximo nível, onde já sabemos que A>B e B\le C são verdadeiros, testa-se C\ne D. Se C\ne D for verdadeiro, executa-se S_{1}; caso contrário (ou seja, C=D), executa-se S_{2}.
Vou agora transformar esse raciocínio em expressões lógicas combinadas e explicar cada uma.

Passo 3

Condição para S_{1}. Para chegar a S_{1} precisamos que todos os testes anteriores tenham resultado “verdadeiro”: primeiro A>B, depois B\le C, e por fim C\ne D. Em linguagem lógica combinada isso é:
(A>B)\wedge(B\le C)\wedge(C\ne D)
Explicação didática: o símbolo \wedge significa “e” lógico — ou seja, todas as três condições devem ser verdadeiras ao mesmo tempo. Exemplo numérico: se A=5, B=3, C=4, D=2, então 5>3, 3\le4 e 4\ne2 são verdadeiros, então S_{1} será executado.

Passo 4

Condição para S_{2}. Para chegar em S_{2} precisamos que A>B e B\le C sejam verdadeiros e que o último teste seja falso. O último teste é C\ne D; o seu falso equivale a C=D. Assim:
(A>B)\wedge(B\le C)\wedge(C= D)
Explicação: aqui temos duas condições verdadeiras iniciais (entramos no bloco) e no terceiro teste obtemos igualdade, então executa-se S_{2}. Exemplo: A=5, B=3, C=4, D=4 S_{2}.

Passo 5

Condição para S_{3}. S_{3} ocorre quando o primeiro teste A>B é verdadeiro (entramos no bloco) mas o segundo teste B\le C é falso. A negação de B\le C é B> C. Portanto:
(A>B)\wedge(B> C)
Explicação: não precisamos avaliar C\ne D porque esse teste só aparece se B\le C for verdadeiro; como aqui B\le C é falso, já caímos no ramo do “senão” que executa S_{3}. Exemplo: A=5, B=4, C=2 (qualquer D) faz S_{3}.

Passo 6

Condição para S_{4}. S_{4} está no “senão” do teste inicial A>B. Logo S_{4} é executado sempre que o teste inicial for falso, ou seja, quando:
A\le B
Explicação: não importa o que ocorreria nos testes internos — eles não são avaliados se A>B for falso. Exemplo: A=2, B=3 (qualquer C,D) executa S_{4}.

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 A>B ou A\le B; no caso A>B separamos em B\le C ou B> C; no caso B\le C separamos em C\ne D ou C=D. Assim cada entrada de valores cai exatamente em um dos quatro ramos.

Resposta

(A>B)\wedge(B\le C)\wedge(C\ne D)\n
(A>B)\wedge(B\le C)\wedge(C= D)\n
(A>B)\wedge(B> C)\n
(A\le B)

Exercícios relacionados