VI – Tomada de Decisão
6.1 Operadores Relacionais
São utilizados para verificar o estado de uma determinada variável quanto verdadeiro ou falso. Dado o exemplo: "Ler dois valores numéricos, efetuar a adição e apresentar o seu resultado caso o valor somado seja maior que 10". Observe que a condição do exemplo foi utilizar o sinal de > (maior que) para verificar o estado da variável quanto ao seu valor. Sendo assim, uma condição também poderá ser verificada como: diferente; igual; menor que; maior ou igual a que e menor ou igual a que. Estas verificações são efetuadas com a utilização dos chamados operadores relacionais, conforme tabela abaixo:
Símbolo |
Significado |
= |
igual a |
<> |
diferente de |
> |
maior que |
< |
menor que |
>= |
maior ou igual que |
<= |
menor ou igual que |
6.2 Tipos de Desvios
6.2.1 Desvio Simples
Haverá momentos em que um determinado valor dentro de um programa necessitará ser tratado para se efetuar um processamento mais adequado. Imagine a seguinte situação: um programa que apresente a média escolar de um aluno. Até aqui, muito simples, mas além de calcular a média, o programa deve apresentar se o mesmo está aprovado ou reprovado segundo a análise de sua média. Observe que aqui será necessário verificar a média do aluno para então tomar uma decisão no sentido de apresentar a sua real situação: aprovado ou reprovado.
Para solucionar o problema proposto será necessário trabalhar uma nova instrução: se...então...fim_se. A instrução se...então...fim_se tem por finalidade tomar uma decisão. Sendo a condição Verdadeira, serão executadas todas as instruções se...então e a instrução fim_se. Sendo a condição Falsa, serão executadas as instruções que estejam após o comando fim_se.
Diagrama de Bloco
Observe na próxima figura, a existência das letras S e N, além das linhas com seta indicando a direção do processamento, colocadas juntamente com o símbolo de Decisão. O S representa sim e está posicionado para indicar que um determinado bloco de operações e será executado quando a condição atribuída for verdadeira. O N está para não e será executado quando a condição for falsa. O símbolo do losango, ou melhor dizendo, Decisão, deverá ser utilizado em situações em que haja a necessidade de se utilizar uma decisão dentro do programa. Uma decisão será tomada sempre com base em uma pergunta, como RESPOSTA = "sim", e é esta pergunta que deverá estar indicada dentro do símbolo de losango.
Português Estruturado
se (<condição>) então
<instruções para condição verdadeira>
fim_se
<instruções para condição falsa ou após condição ser verdadeira>
Como um exemplo, considere o seguinte problema: "Ler dois valores numéricos, efetuar a adição e apresentar o seu resultado caso o valor somado seja maior que 10". Veja o diagrama de blocos e a codificação em português estruturado.
Diagrama de Bloco

Português Estruturado
programa SOMA_NÚMEROS
var
X : inteiro
A : inteiro
B : inteiro
início
leia A
leia B
X = A + B
se (X > 10) então
escreva X
fim_se
fim
Observe que após a definição dos tipos de variáveis, é solicitada a leitura dos valores para as variáveis A e B, depois estes valores são implicados na variável X, a qual possui o resultado da adição dos dois valores. Neste ponto, é questionado no programa, uma condição que permitirá imprimir o resultado da soma caso esta seja maior que 10, e não sendo, o programa é encerrado sem apresentar a referida soma, uma vez que a condição é falsa.
6.2.2 Desvio Condicional Composto
Nesta seção você irá aprender a fazer uso da instrução se...então...senão...fim_se, que sendo a condição Verdadeira, serão executadas todas as informações que estejam posicionadas entre o se...então e a instrução senão. Sendo a condição Falsa, serão executadas as instrução que estejam entre o senão e a instrução fim_se.
Diagrama de Bloco

Português Estruturado
se (<condição>) então
<instruções para condição verdadeira>
senão
<instruções para condição falsa>
fim_se
Para um exemplo da utilização desta estrutura considere o seguinte problema: "Ler dois valores numéricos, efetuar a adição. Caso o valor somado seja maior ou igual a 10, este deverá ser apresentado somando-se a ele mais 5; caso o valor somado não seja maior ou igual a 10, este deverá ser apresentado subtraindo-se 7". Veja o diagrama de blocos e a codificação em português estruturado.
Diagrama de Bloco

Português Estruturado
programa SOMA_NÚMEROS
var
X : inteiro
A : inteiro
B : inteiro
início
leia A
leia B
X = A + B
se (X > 10) então
escreva X + 5
senão
escreva X - 7
fim_se
fim
Observe que após a definição dos tipos de variáveis, é solicitada a leitura dos valores para as variáveis A e B, depois estes valores são implicados na variável X, a qual possui o resultado da adição dos dois valores. Neste ponto, é questionado no programa, uma condição que permitirá imprimir o resultado da soma adicionado de 5, caso esta seja maior ou igual a 10, e não sendo, o programa apresentará o resultado subtraindo 7.
6.2.3 Desvio Condicional Encadeado
Existem casos em que é necessário se estabelecerem verificações de condições sucessivas, onde uma determinada ação poderá ser executada se um conjunto anterior de instruções ou condições for satisfeito. Sendo a ação executada, esta poderá ainda estabelecer novas condições. Isto significa utilizar uma condição dentro de outra condição. Este tipo de estrutura poderá possuir diversos níveis de condição, sendo chamadas de aninhamentos ou encadeamentos.
Diagrama de Bloco

Português Estruturado
Neste exemplo, está sendo adotado o encadeamento para a <condição1> falsa, mas poderá, dependendo do problema a ser resolvido, ser colocado no outro lado. Como poderá ocorrer de termos a necessidade de utilizar a condição dos dois lados.
se (<condição1>) então
<instruções para condição1 verdadeira>
senão
se (<condição2>) então
<instruções para condição2 verdadeira e condição1 falsa>
senão
<instruções para condição2 e condição1 falsas>
fim_se
fim_se
Para um exemplo, da utilização desta estrutura considere o seguinte problema: "Elaborar um programa que efetue o cálculo do reajuste de salário de um funcionário. Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja menor que 500. Se o salário for maior ou igual a 500 mas menor ou igual a 1000, seu reajuste será de 10%, e caso seja ainda maior que 1000, o reajuste deverá ser de 5%". Veja o diagrama de blocos e a codificação em português estruturado.
Diagrama de Bloco
Português Estruturado
programa REAJUSTA_SALÁRIO
var
NOVO_SALÁRIO : real
SALÁRIO : real
início
leia SALÁRIO
se (SALÁRIO < 500) então
NOVO_SALÁRIO = SALÁRIO * 1.15
senão
se (SALÁRIO <= 1000) então
NOVO_SALÁRIO = SALÁRIO * 1.10
senão
NOVO_SALÁRIO = SALÁRIO * 1.05
fim_se
fim_se
escreva NOVO_SALÁRIO
fim
6.2.4 Desvio Condicional de Múltiplas Escolhas
Também chamada de decisão CASO/SELECIONE é utilizada para testar, na condição, uma única expressão, que produz um resultado, ou então, o valor de uma variável, em que está armazenado um determinado conteúdo. Compara-se, então, o resultado obtido no teste com os valores fornecidos em cada cláusula "Caso".
No exemplo do diagrama de blocos abaixo, é recebido uma variável "Op" e testado seu conteúdo, caso uma das condições seja satisfeita, é atribuído para variável Titulo a string "Opção X", caso contrário é atribuído a string "Opção Errada".
Diagrama de Bloco

Português Estruturado
programa TESTA_VALOR
var
Título: caracter
Op: inteiro
Início
Titulo = " "
leia Op
Caso (Op)
Caso 1
Titulo = "Opção 1"
Caso 2
Titulo = "Opção 2"
Caso 3
Titulo = "Opção 3"
Caso 4
Titulo = "Opção 4"
Caso 5
Titulo = "Opção 5"
Caso 6
Titulo = "Opção Errada"
Fim_Caso
Escreva Titulo
Fim
6.3 Operadores Lógicos
Também conhecidos como operadores booleanos, são utilizados quando se deseja trabalhar com o relacionamento de duas ou mais condições ao mesmo tempo na mesma instrução se, efetuando desta forma testes múltiplos. Os operadores lógicos são três: .e., .ou. e .não., e serão representados em português estruturado sempre entre pontos. Em muitos casos o uso de operadores lógicos evita a utilização de muitas instruções se encadeadas.
6.3.1 Operador Lógico .E.
O operador do tipo .e. é utilizado quando dois ou mais relacionamentos lógicos de uma determinada condição necessitam ser verdadeiros. Abaixo, é apresentada a tabela-verdade para este tipo de operador:
Condição 1 |
Condição 2 |
Resultado |
Falsa |
Falsa |
Falso |
Verdadeira |
Falsa |
Falso |
Falsa |
Verdadeira |
Falso |
Verdadeira |
Verdadeira |
Verdadeiro |
Diagrama de Bloco

Português Estruturado
se (<condição1>) .e. (<condição2>) então
<instruções executadas se condição1 e condição2 verdadeira>
fim_se
O operador .e. faz com que somente seja executada uma determinada operação se todas as condições mencionadas forem simultaneamente verdadeiras. Veja o exemplo a seguir:
programa TESTA_LÓGICA_E
var
NÚMERO : inteiro
início
leia NÚMERO
se (NÚMERO >= 20) .e. (NÚMERO <= 90) então
escreva "O número está na faixa de 20 a 90"
senão
escreva "O número está fora da faixa de 20 a 90"
fim_se
fim
O exemplo acima mostra através da utilização do operador .e., que somente será apresentada a mensagem "O número está na faixa de 20 a 90", caso o valor fornecido para a variável NÚMERO seja entre 20 e 90. Qualquer valor fornecido fora da faixa definida apresentará a mensagem "O número não está na faixa de 20 a 90".
6.3.2 Operador Lógico .OU.
O operador do tipo .ou. é utilizado quando pelo menos um dos relacionamentos lógicos (quando houver mais de um relacionamento) de uma condição necessita ser verdadeiro. Abaixo, é apresentada a tabela-verdade para este tipo de operador:
Condição 1 |
Condição 2 |
Resultado |
Falsa |
Falsa |
Falso |
Verdadeira |
Falsa |
Verdadeiro |
Falsa |
Verdadeira |
Verdadeiro |
Verdadeira |
Verdadeira |
Verdadeiro |
Diagrama de Bloco

Português Estruturado
se (<condição1>) .ou. (<condição2>) então
<instruções executadas se cond1. verd. ou se cond2. verd.>
fim_se
O operador .ou. faz com que seja executada uma determinada operação se pelo menos uma das condições mencionadas for verdadeira. Veja o exemplo a seguir:
programa TESTA_LÓGICA_OU
var
SEXO : caractere
início
leia SEXO
se (SEXO = "masculino") .ou. (SEXO = "feminino") então
escreva "O seu sexo é válido"
senão
escreva "O seu sexo é duvidoso"
fim_se
fim
O exemplo anterior mostra através da utilização do operador .ou., que somente será apresentada a mensagem "O seu sexo é válido", caso o valor fornecido para a variável SEXO seja masculino ou feminino. Qualquer outro valor fornecido apresentará a mensagem "O seu sexo é duvidoso".
6.3.3 Operador Lógico .NÃO.
O operador do tipo .não. é utilizado quando se necessita estabelecer que uma determinada condição deve não ser verdadeira. Este recurso é utilizado quando mesmo sendo uma condição verdadeira, ela será tratada como falsa. O operador .não. caracteriza-se por inverter o estado lógico de uma condição verdadeira. Abaixo, é apresentada a tabela-verdade para este tipo de operador:
Condição |
Resultado |
Verdadeira |
Falso |
Falso |
Verdadeira |
Diagrama de Bloco

Português Estruturado
se .não. (<condição>) então
<instruções executadas se condição não for verdadeira>
fim_se
O operador .não. faz com que seja executada uma determinada operação se a condição não for verdadeira, portanto considerada falsa. Veja o exemplo a seguir:
programa TESTA_LÓGICA_NÃO
var
A, B, C, X : inteiro
início
leia A, B, X
se .não. (X > 5) então
C = (A + B) * X
senão
C = (A - B) * X
fim_se
escreva C
fim
O exemplo acima mostra através da utilização do operador .não., que somente será efetuado o cálculo de C ¬ (A + B) * X , se o valor da variável X não for maior que 5. Qualquer valor de 5 para baixo efetuará o cálculo C ¬ (A - B) * X. Se forem informados os valores 5, 1 e 2 respectivamente para as variáveis A, B e X, resultará para a variável C o valor 12, pois o valor 2 da variável X é controlado pela instrução se .não. ( X > 5 ) então, como sendo verdadeiro, uma vez que não é maior que 5, sendo assim, os valores 5 e 1 são somados resultando 6 e multiplicandos por 2 resultando 12. Mas se forem informados os valores 5, 1, e 6 respectivamente para as variáveis A, B e X, resultará para a variável C o valor 24, pois o valor 6 da variável X é controlado pela instrução se .não. ( X > 5 ) então, como sendo falso, sendo assim, os valores 5 e 1 são subtraídos resultando 4 e multiplicados por 6 resultando 24.
6.4 Exemplo
Para demonstrar a utilização de operadores lógicos em um exemplo um pouco maior, considere o seguinte problema:
Ler três valores para os lados de um triângulo, considerando lados como: A, B e C. Verificar se os lados fornecidos formam realmente um triângulo, e se for esta condição verdadeira, deverá ser indicado qual tipo de triângulo foi formado: isósceles, escaleno ou eqüilátero. Veja o algoritmo, diagrama de blocos e a codificação em português estruturado, prestando atenção na utilização dos operadores lógicos.
Algoritmo
Para se estabelecer este algoritmo é necessário, em primeiro lugar, saber o que realmente é um triângulo. Se você não souber o que é um triângulo, conseqüentemente não conseguirá resolver o problema. Triângulo é uma forma geométrica (polígono) composta por três lados, onde cada lado é menor que a soma dos outros dois lados. Perceba que isto é uma regra (uma condição) e deverá ser considerada. É um triângulo quando A<B+C, quando B<A+C e quando C<A+B.
Tendo certeza de que os valores informados para os três lados formam um triângulo, serão então analisados os valores para se estabelecer qual tipo de triângulo será formado: isósceles, escaleno ou eqüilátero.
Um triângulo é isósceles quando possui dois lados iguais e um diferente, sendo A=B ou A=C ou B=C; é escaleno quando possui todos os lados diferentes, sendo A<>B e B<>C e é eqüilátero quando possui todos os lados iguais, sendo A=B e B=C.
- Ler três valores para os lados de um triângulo: A, B e C;
- Verificar se cada lado é menor que a soma dos outros dois lados. Se sim, saber se A=B ou se B=C, sendo verdade o triângulo é eqüilátero. Se não verificar A=B ou se A=C se B=C, sendo verdade o triângulo é isósceles, caso contrário o triângulo será escaleno;
- Caso os lados fornecidos não caracterizarem um triângulo, avisar a ocorrência.
Diagrama de Blocos

Português Estruturado
programa TRIÂNGULO
var
A, B, C : real
início
leia A, B, C
se (A < B + C) .e. (B < A + C) .e. (C < A + B) então
se (A = B) .e. (B = C) então
escreva "Triângulo Eqüilátero"
senão
se (A = B) .ou. (A = C) .ou. (C = B) então
escreva "Triângulo Isósceles"
senão
escreva "Triângulo Escaleno"
fim_se
fim_se
senão
escreva "As medidas não formam um triângulo"
fim_se
fim
|