Programação Orientada à Procedimentos II Programação Orientada à Procedimentos I Processamento Paralelo Lógica de Programação Introdução à Computação Informática Básica

 

 

Informática Básica
Introdução à Computação
Lógica de Programação
Programação Orientada à Procedimentos I
Programação Orientada à Procedimentos II

Processamento Paralelo

Aula 11

Aula 12

Aula 13


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.

    1. Ler três valores para os lados de um triângulo: A, B e C;
    2. 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;
    3. 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