Mudanças entre as edições de "AULA de Introdução a Lógica de Programação - Comandos de Decisão"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(146 revisões intermediárias por 4 usuários não estão sendo mostradas)
Linha 1: Linha 1:
===Objetivos ===
+
=Objetivos =
  
O aluno deverá saber utilizar comandos e expressões em pseudo-código e fluxogramas usando:
+
Após a aula o aluno deverá:
  
*Operadores Relacionais e Lógicos
+
*Compreender condições para a tomada de decisão durante a execução dos algoritmos;
*Comandos de Decisão
 
*Comandos de decisão com aninhamento
 
  
===Expressões com operadores relacionais===
+
*Compreender e utilizar os principais operadores relacionais e lógicos;
 +
 
 +
*Identificar claramente dados de entrada e saída do algoritmo;
 +
 
 +
*Elaborar algoritmos simples usando fluxogramas e pseudocódigo com comandos de decisão e com aninhamento de comandos.
 +
 
 +
OBS: Toda a notação e semântica de operadores usada é baseada na Linguagem C para facilitar o estudo da Linguagem nas próximas aulas.
 +
 
 +
=Expressões com operadores relacionais=
  
 
Na aula anterior estudamos como construir expressões usando operadores aritméticos e o operador de atribuição. Vamos continuar este tópico aumentando o poder das expressões através dos operadores relacionais e lógicos.
 
Na aula anterior estudamos como construir expressões usando operadores aritméticos e o operador de atribuição. Vamos continuar este tópico aumentando o poder das expressões através dos operadores relacionais e lógicos.
Linha 30: Linha 36:
 
  |-
 
  |-
 
  |==
 
  |==
  |igual a (se o operando a esquerda é maior que o da direita)
+
  |igual a (se o operando a esquerda é igual ao da direita)
 
  |-
 
  |-
  |!=  
+
  |!= ou ainda <>
 
  |diferente de (se o operando a esquerda é diferente do da direita)
 
  |diferente de (se o operando a esquerda é diferente do da direita)
 
|}
 
|}
  
Note que com operadores lógicos podemos construir expressões tais como indicado no exemplo abaixo:
+
LEMBRETE: Os operadores mostrados são da linguagem C. Conferir os equivalentes na literatura.
  
Exemplo: O algoritmo abaixo lê dois número inteiros para dentro das variáveis A e B e atribue à variável X o resultado da comparação do primeiro com o segundo.  
+
Note que com operadores relacionais e lógicos podemos construir expressões tais como indicado no exemplo abaixo:
 +
 
 +
==Exemplo==
 +
 
 +
O algoritmo abaixo lê dois número inteiros para dentro das variáveis A e B e atribue à variável X o resultado da comparação do primeiro com o segundo.  
 
Observe que a variável X é do tipo booleano.
 
Observe que a variável X é do tipo booleano.
  
 
   
 
   
<code>
+
<syntaxhighlight lang=C>
 
ALGORITMO exemplo
 
ALGORITMO exemplo
 
VARIÁVEIS:
 
VARIÁVEIS:
Linha 56: Linha 66:
 
</syntaxhighlight>   
 
</syntaxhighlight>   
  
Exercício: Fazer um fluxograma para o algoritmo acima.
+
==EXERCÍCIO==
  
===Operadores Lógicos===
+
Fazer um fluxograma para o algoritmo acima.
 +
 
 +
=Expressões com operadores lógicos=
  
 
É possível construir expressões ainda mais completas usando os operadores lógicos, apresentados abaixo:
 
É possível construir expressões ainda mais completas usando os operadores lógicos, apresentados abaixo:
Linha 77: Linha 89:
  
  
Uma expressão lógica tem como resultado da sua avaliação um valor VERDADEIRO ou FALSO. Para manter a coerência com a linguagem C qualquer expressão que resultar em 0 será considerada FALSA e se resultar em algo diferente de 0 será considerada verdadeira.
+
Uma expressão lógica tem como resultado da sua avaliação um valor VERDADEIRO (1 no caso do C) ou FALSO (0). Para manter a coerência com a linguagem C, qualquer expressão que resultar em 0 será considerada FALSA e se resultar em algo diferente de 0 será considerada verdadeira.
  
Exemplo: Considere uma variação do exercício anterior onde se compara 3 números inteiros: o primeiro com o segundo e o primeiro com o terceiro.
+
==Exemplo==
  
<code>
+
Considere uma variação do exercício anterior onde se compara 3 números inteiros: o primeiro com o segundo e o primeiro com o terceiro.
 +
 
 +
<syntaxhighlight lang=c>
 
ALGORITMO exemplo
 
ALGORITMO exemplo
 
VARIÁVEIS:
 
VARIÁVEIS:
Linha 92: Linha 106:
 
   LER B
 
   LER B
 
   LER C
 
   LER C
   X = A>B E A < C
+
   X = (A>B) E (A < C)
 
   MOSTRAR "A expressão A>B E A<C é ", X
 
   MOSTRAR "A expressão A>B E A<C é ", X
 
FIM
 
FIM
Linha 98: Linha 112:
  
  
EXERCÍCIO
+
==EXERCÍCIO==
  
 
Para cada uma das expressões abaixo determine se a expressão é verdadeira ou falsa.
 
Para cada uma das expressões abaixo determine se a expressão é verdadeira ou falsa.
  
a)
 
  
  
Linha 114: Linha 127:
 
! Valor
 
! Valor
 
|-
 
|-
| A>B E C>D  
+
| (A>B) E (C>D)
|  
+
| 10
|  
+
| 8
 +
| 20
 +
| 15
 
|
 
|
 
|-
 
|-
| A
+
| (A>B) E (C>D)
|
+
| 10
|
+
| 12
 +
| 15
 +
| 15
 
|
 
|
 
|-
 
|-
| B
+
| (A<=B) OU (C>10)
|
+
| 5
|
+
| 5
 +
| 3
 +
| 5
 
|
 
|
 
|-
 
|-
| C
+
| (A<=B) OU ((C==D) E (D<A))
|
+
| 3
|
+
| 10
 +
| 4
 +
| 4
 
|
 
|
 
|-
 
|-
| D
+
| (A==B) OU (C==D)
|
+
| 3
|
+
| 1
 +
| 4
 +
| 4
 
|
 
|
 
|-
 
|-
|
+
| ((A==B) E (B<30)) OU (C>=D)
|
+
| 5
|
+
| 5
 +
| 10
 +
| 5
 
|
 
|
 
|}
 
|}
  
===Sheldon e o fluxograma da amizade===
+
=Controle do Fluxo de Execução: Estruturas de Decisão=
  
Vamos observar o fluxograma da amizade do Sheldom da série de TV "Big Bang Theory"
 
  
<center>{{#ev:youtube|VAX4jLlNo-Q#!}} </center>
+
== Estruturas de Decisão==
  
Observe que a caixa no formato de LOSANGO permite testar uma condição: é uma caixa de decisão.
+
Você deve ter observado que, no fluxograma, instruções simples (retângulo) possuem uma entrada e uma saída indicando que o fluxo de saída está claramente determinado.
  
===Controle do Fluxo de Execução: Estruturas de Decisão===
+
Em algumas situações é necessário realizar algum teste sobre uma expressão e neste caso a execução é condicional. Esta expressão NORMALMENTE vai se utilizar de OPERADORES LÓGICOS e RELACIONAIS. O teste da expressão pode resultar em VERDADEIRO e neste caso uma sequência de ações é realizada. Se o resultado for FALSO, uma outra sequência é realizada.  
 
 
Você deve ter observado que instruções simples (retângulo) possuem uma entrada e uma saída indicando que o fluxo de saída está claramente determinado.
 
 
 
Em algumas situações é necessário realizar algum teste sobre uma expressão e neste caso a execução é condicional. O teste da expressão pode resultar em VERDADEIRO e neste caso uma sequência de ações é realizada. Se o resultado for FALSO, uma outra sequência é realizada.  
 
  
 
Seja o problema:
 
Seja o problema:
  
====Problema do Controle de Acesso====
+
====Exemplo: Problema do Controle de Acesso====
  
 
PROBLEMA: Controlar o acesso a uma porta usando uma senha pré-configurada no sistema.
 
PROBLEMA: Controlar o acesso a uma porta usando uma senha pré-configurada no sistema.
  
DADO DE ENTRADA: SENHA (variável alfanumérica)
+
DADO DE ENTRADA: a senha ( aser armazenada em variável alfanumérica)
  
 
DADO DE SAÌDA: porta aberta (simulado com msg "PORTA ABERTA") ou mensagem de "SENHA NAO CONFERE"
 
DADO DE SAÌDA: porta aberta (simulado com msg "PORTA ABERTA") ou mensagem de "SENHA NAO CONFERE"
  
VARIÁVEIS: SENHA (tiipo alfanumérica)
+
VARIÁVEIS: SENHA (tipo alfanumérica)
  
 
=====Algoritmo usando Fluxograma=====
 
=====Algoritmo usando Fluxograma=====
  
 
[[imagem:FluxogramaControleAcessoI.jpg|450px]]
 
[[imagem:FluxogramaControleAcessoI.jpg|450px]]
 +
[[imagem:ControleDeAcessoSimples.jpg|350px]]
  
 
=====Algoritmo usando Pseudo-código=====
 
=====Algoritmo usando Pseudo-código=====
  
<code>
+
<syntaxhighlight lang=C>
 
ALGORITMO ControleAcesso
 
ALGORITMO ControleAcesso
 
VARIÁVEIS
 
VARIÁVEIS
 
   SENHA: alfanumérica
 
   SENHA: alfanumérica
 
INICIO
 
INICIO
 +
  APRESENTAR "Entre com a SENHA"
 
   LER SENHA  
 
   LER SENHA  
 
   SE SENHA=="alfa" ENTÃO
 
   SE SENHA=="alfa" ENTÃO
Linha 192: Linha 214:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Aninhamento de estruturas de decisão===
+
NOTA: Considera-se tempo de execução ZERO das instruções. Na prática, uma instrução pode levar nano, micro ou milisegundos.
 +
 
 +
====EXERCÍCIO====
 +
 
 +
Suponha que existe um sensor de porta aberta. Considere que este sensor é representado por uma VARIÁVEL BOOLEANA chamada SENSOR_PORTA  e que é automaticamente setada para TRUE se a porta estiver fechada ou FALSE, caso contrário. O sistema de entrada de senha somente aceita abrir a porta se ela estiver fechada. Modifique o algoritmo acima, usando um fluxograma para prever esta situação.
 +
 
 +
=Outros Exemplos=
 +
 
 +
==Exemplo 1 - Um Fluxograma para uma Calculadora==
 +
 
 +
PROBLEMA: Entrar com dois números e na sequência uma operação aritmética. O resultado da operação sobre os dois números deve ser mostrado.
 +
 
 +
DADOS DE ENTRADA: OPERANDO1(real), OPERANDO2 (real) e OPERADOR (caracter)
 +
 
 +
DADOS DE SAÍDA: RESULTADO (real)
 +
 
 +
Atenção: para fins de simplificação não são mostradas mensagens para as entradas de dados.
 +
 
 +
[[imagem:FluxogramaCalculadora.jpg|550px]]
 +
 
 +
====EXERCÍCIO====
 +
 
 +
Modificar o fluxograma acima para evitar a DIVISÃO por ZERO.
 +
Em um computador, a divisão por zero pode levar a uma exceção e ao encerramento do programa. Evitar ou prever esta possibilidade é uma boa prática.
 +
 
 +
==Exemplo 2 - Um Fluxograma para Cálculo de Juros Simples OU Composto ao MÊS==
 +
 
 +
Elaborar um fluxograma para calcular o capital acumulado em um dado período de meses, considerando JUROS SIMPLES ou COMPOSTOS mensais. O algoritmo deve testar esta condição.
 +
 
 +
DADOS DE ENTRADA: CapitalInicial (real), Modo ('s' - simples ou 'c' - composto), Juro,  e Periodo (inteiro) em meses
 +
 
 +
DADOS DE SAÍDA: CapitalAcumulado
 +
 
 +
NOTA: Ver Juros Simples X Composto [https://pt.wikipedia.org/wiki/Juro#Juros_simples aqui].
 +
 
 +
[[imagem:FluxogramaJuros.jpg|550px]]
 +
 
 +
====EXERCÍCIO 1====
 +
 
 +
O fluxograma acima NÃO testa a condição 's'. Modificá-lo para prever esta situação. Fornecer mensagem de erro e encerrar em caso de não ser nenhuma das condições.
 +
 
 +
=Aninhamento de estruturas de decisão=
 +
 
 +
Note que é possível aninhar estruturas de decisão. Se você resolveu o exercício da calculadora para evitar divisão por zero, este aninhamento já aconteceu.
  
Note que é possível aninhar estruturas de decisão. Seja o exemplo ebaico que lê três lados de um possível triângulo e imprime se NÂO é um triângulo, ou, caso seja, imprime se é EQUILÁTERO, ISÓSCELES ou ESCALENO.
+
Seja o exemplo que lê três lados de um possível triângulo e imprime se NÂO é um triângulo, ou, caso seja, imprime se é EQUILÁTERO, ISÓSCELES ou ESCALENO.
  
<code>
+
<syntaxhighlight lang=C>
ALGORITMO trangulo
+
ALGORITMO triangulo
 
VARIAVEIS
 
VARIAVEIS
 
   lado1,lado2,lado3: real
 
   lado1,lado2,lado3: real
 
INICIO
 
INICIO
 +
  LER lado1
 +
  LER lado2
 +
  LER lado3
 
   SE lado1>(lado2+lado3) OU lado2>(lado1+lado3) OU lado3>(lado1+lado2) ENTÃO
 
   SE lado1>(lado2+lado3) OU lado2>(lado1+lado3) OU lado3>(lado1+lado2) ENTÃO
 
       MOSTRAR "não é triângulo"
 
       MOSTRAR "não é triângulo"
Linha 211: Linha 279:
 
         SENÃO
 
         SENÃO
 
             MOSTRAR "escaleno"
 
             MOSTRAR "escaleno"
 +
        FIMSE
 
       FIMSE
 
       FIMSE
 
   FIMSE
 
   FIMSE
Linha 216: Linha 285:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Exercícios===
+
====EXERCÍCIO====
  
EXERCÍCIO 1:
+
Construir um fluxograma para o algoritmo acima.
  
Elaborar um fluxograma para o o problema de controle de acesso prevendo um procedimento para modificar a senha de acesso. Neste caso a senha deverá ser armazenada em uma variável.
+
=Algumas considerações adicionais sobre a elaboração do Fluxograma/Pseudocódigo=
Para tanto, assuma a existência de uma senha de administrador fixa (por exemplo, "ADMIN"). Se a senha do administrador for fornecida, mostrar uma mensagem de ENTRE COM A NOVA SENHA de senha.
 
  
[[imagem:Prg1-ControleAcessoEx1.jpg|450px]]
+
*Um algoritmo deve resolver um determinado problema. Tenha ciência de qual problema pretende-se resolver...
 +
*Se coloque no lugar do "computador". Ele deve ler o algoritmo, instrução após instrução e executar uma após outra, na sequência. É isto que um microprocessador (CPU) faz, somente que em linguagem de máquina...
 +
*Fique atento aos momentos de entrada de dados e a ordem no uso das variáveis. A qualquer momento pode ser realizada a entrada e a saída de dados. Analise o problema para verificar quando será necessário...
 +
*Identifique claramente os dados de entrada e saída do algoritmo. Veja o algoritmo como uma sequência de instruções que transforma os dados de entrada nos dados de saída...
 +
*Use nomes significativos para as variáveis. Tenha consciência que as variáveis e constantes são manipuladas pelos algoritmos;
 +
*Uma variável é uma caixa de armazenamento (memória). Se colocar algo lá, tudo que estava armazenado nela é perdido. Uma caixa pode ter uma "sujeira" se não foi nada colocado nela...
 +
*Estude o problema a ser resolvido. Identifique variáveis e constantes a serem usadas. Observe qual tipo de variável vai usar...
 +
*Mudança na ordem de instruções pode acarretar em problemas...
  
EXERCÍCIO 2:
+
=Exercícios de Consolidação=
  
Inserir a noção de UserID. Para abrir a porta o usuário entra com o UserId e com
+
<ol>
a senha. De fábrica o UserId é "alfa" e a senha "alfa". O UserId do admin é "admin" e a senha "beta".
+
<li>Para fazer um determinado tipo de iogurte, o leite deve estar entre 20 e 30 graus e depois deve-se acrescentar uma levedura. Faça um algoritmo para ler a temperatura do leite (poderia vir de um sensor) e informar se o leite está muito quente, muito frio ou se está pronto para que o iogurte seja confeccionado.
 +
</li>
 +
<li>
 +
Implementar em pseudocódigo um algoritmo que realiza a leitura de dois números reais e imprime uma mensagem dizendo SE a média entre estes dois números é MAIOR que 5, IGUAL a 5 ou MENOR que 5.
 +
{{collapse top|Solução - Exercicio 04}}
 +
<!--
 +
[[imagem:Aula_02_Exercicio04_Prog1.jpg|400px]]
 +
-->
 +
{{collapse bottom}}
 +
</li>
 +
<li>
 +
Implementar um algoritmo em pseudocódigo para receber os 3 coeficientes de uma equação do segundo grau e então calcular as raízes indicando as três condições possíveis. Quantas variáveis foram usadas? ATENÇÃO: prever a condição a=0 e indicar que não seria uma equação do segundo grau.  VER [https://pt.wikipedia.org/wiki/Equa%C3%A7%C3%A3o_quadr%C3%A1tica]
  
EXERCÍCIO 3:
+
{{collapse top|Solução}}
 +
<!--
 +
<syntaxhighlight lang=C>
 +
ALGORITMO  EQUACAO
 +
a, b, c, delta, x1, x2 : real
 +
INICIO
 +
Ler a
 +
Ler b
 +
Ler c
 +
SE a = 0
 +
    MOSTRAR “O ‘a’ não pode ser igual a zero”
 +
SENÃO
 +
  delta = (b*b) - 4*a*c 
 +
  SE delta > 0  ENTÃO
 +
    x1 = (-b+SQRT(delta))/(2*a)
 +
    MOSTRAR "raiz 1 é x1"
 +
    x2 = (-b-SQRT(delta))/(2*a)
 +
    MOSTRAR "raiz 2 é x2"
 +
  SENÃO
 +
    SE delta < 0 ENTÃO
 +
        x_real = -b/(2*a)
 +
        x_imag = SQRT(-delta)
 +
        mostrar  "parte real ", x_real
 +
        mostrar  "parte imaginaria ", x_imag
 +
    SENAO
 +
        x = -b/(2*a)
 +
    FIMSE
 +
    FIMSE
 +
FIMSE
 +
FIM
 +
</syntaxhighlight>
 +
-->
 +
{{collapse bottom}}</li>
 +
<li>
 +
Tente fazer uma solução para o exercício anterior usando o menor número possível de variáveis. Note que, como comentado em sala, trata-se de um exercício de treinamento. Em geral, não vale perder legibilidade do algoritmo para "economizar" variáveis.
 +
</li>
 +
<li>
 +
Modifique o exercício de juros simples/composto (acima) para atender a seguinte situação. Um banco tem um fundo que proporciona juros simples (Fundo A) a uma taxa definida a cada mês e outro a juros composto (FUNDO B) que também permite a aplicação a JUROS COMPOSTO com uma taxa igual a metade do FUNDO A.
  
Inserir a noção de bloqueio do usuário. Se o usuário comum tentar 3 vezes e errar ele é bloqueado. A mudança de UserId deve desbloquear o usuário.
+
Faça um algoritmo que permite entrar com o CAPITAL INICIAL, A TAXA DE JURO mensal do FUNDO A e o período desejado. O algoritmo deve calcular o CAPITAL ACUMULADO para os dois fundos e compará-los informando qual o melhor fundo para o período em questão e qual a diferença entre os capitais acumulados.
 
+
</li>
EXERCÍCIO 4:
+
<li>
 
+
Implementar um algoritmo através de um fluxograma que recebe cinco números reais. O algoritmo deve mostrar a média destes números. Identifique (através de comentários ao lado do fluxograma) quem são os DADOS DE ENTRADA e DE SAÍDA. Qual o número de variáveis que estão sendo usadas no algoritmo? Quantas constantes? Seria possível reduzir o número de variáveis usadas? Qual seria o mínimo?
Implementar em pseudocódigo um algoritmo que lé dois números reais e imprime uma mensagem dizendo que a média entre estes dois números é maior que 5.
+
</li>
 +
<li>
 +
Implementar um algoritmo através de um fluxograma que recebe cinco números reais. O algoritmo deve mostrar a média e a quantidade de números (dentre estes cinco números) que estão acima da média. Identifique (através de comentários ao lado do fluxograma) quem são os DADOS DE ENTRADA e DE SAÍDA. Qual o número de variáveis que estão sendo usadas no algoritmo? Quantas constantes?
 +
</li>
 +
<li>
 +
Considere o exercício anterior. Tente conceber uma versão do algoritmo que usa o menor número de variáveis possível.
 +
</li>
 +
<li>
 +
Para o problema de controle de acesso descrito acima, conceber um procedimento para modificar a senha de acesso do USUÁRIO. Neste caso a senha deverá ser armazenada em uma variável.Para tanto, assuma a existência de uma senha de administrador fixa (por exemplo, "ADMIN"). Se a senha do administrador for fornecida, mostrar uma mensagem de ENTRE COM A NOVA SENHA (do USUÁRIO).
 +
{{collapse top|Solução - Exercicio 01}}
 +
<!--
 +
[[imagem:Prg1-ControleAcessoEx1.jpg|450px]]
 +
-->
 +
{{collapse bottom}}
 +
</li>
 +
<li>
 +
Inserir a noção de UserID. Para abrir a porta o usuário entra com o UserId e com
 +
a senha. De fábrica o UserId é "alfa" e a senha "alfa". O UserId do admin é "admin" e a senha "beta".  O administrador pode abrir a porta ou mudar a senha do UserId. Para tanto uma pergunta adicional deve ser feita. Solução com problema.
 +
{{collapse top|Solução - Exercicio 02}}
 +
<!--
 +
[[imagem:Aula_02_Exercicio02_Prog1.jpg|400px]]
 +
-->
 +
{{collapse bottom}}
 +
</li>
 +
<li>
 +
Inserir a noção de bloqueio do usuário. Se o usuário comum tentar 3 vezes e errar ele é bloqueado. A mudança da senha deve desbloquear o usuário.  
 +
{{collapse top|Solução - Exercicio 03}}
 +
<!--
 +
[[imagem:Aula_02_Exercicio03_Prog1.jpg|400px]]
 +
-->
 +
{{collapse bottom}}
 +
</li>
 +
<li>
 +
Implementar um algoritmo através de um pseudocódigo, que recebe as três cores de um resistor e informa em ohms o valor do mesmo. Identifique as entradas, saídas, constantes e variáveis envolvidas.
 +
</li>
 +
<li>
 +
Implementar um algoritmo através de um fluxograma que recebe 3 números inteiros e imprime os números em ordem decrescente.
 +
</li>
 +
</ol>

Edição atual tal como às 19h39min de 7 de agosto de 2023

Objetivos

Após a aula o aluno deverá:

  • Compreender condições para a tomada de decisão durante a execução dos algoritmos;
  • Compreender e utilizar os principais operadores relacionais e lógicos;
  • Identificar claramente dados de entrada e saída do algoritmo;
  • Elaborar algoritmos simples usando fluxogramas e pseudocódigo com comandos de decisão e com aninhamento de comandos.

OBS: Toda a notação e semântica de operadores usada é baseada na Linguagem C para facilitar o estudo da Linguagem nas próximas aulas.

Expressões com operadores relacionais

Na aula anterior estudamos como construir expressões usando operadores aritméticos e o operador de atribuição. Vamos continuar este tópico aumentando o poder das expressões através dos operadores relacionais e lógicos.

Os operadores relacionais permitem realizar comparações entre dois operandos. Os operadores são os seguintes:

Operador Significado
> maior que
>= maior ou igual que
< menor que
<= menor ou igual que
== igual a (se o operando a esquerda é igual ao da direita)
!= ou ainda <> diferente de (se o operando a esquerda é diferente do da direita)
LEMBRETE: Os operadores mostrados são da linguagem C. Conferir os equivalentes na literatura.

Note que com operadores relacionais e lógicos podemos construir expressões tais como indicado no exemplo abaixo:

Exemplo

O algoritmo abaixo lê dois número inteiros para dentro das variáveis A e B e atribue à variável X o resultado da comparação do primeiro com o segundo. Observe que a variável X é do tipo booleano.


ALGORITMO exemplo
VARIÁVEIS:
   A: inteiro
   B: inteiro
   X: booleana
INÍCIO
   LER A
   LER B
   X = A>B
   MOSTRAR "A condição A>B é ", X
FIM

EXERCÍCIO

Fazer um fluxograma para o algoritmo acima.

Expressões com operadores lógicos

É possível construir expressões ainda mais completas usando os operadores lógicos, apresentados abaixo:

Operador Significado
&& AND (E)
|| OR (OU)
! NOT (NÃO)


Uma expressão lógica tem como resultado da sua avaliação um valor VERDADEIRO (1 no caso do C) ou FALSO (0). Para manter a coerência com a linguagem C, qualquer expressão que resultar em 0 será considerada FALSA e se resultar em algo diferente de 0 será considerada verdadeira.

Exemplo

Considere uma variação do exercício anterior onde se compara 3 números inteiros: o primeiro com o segundo e o primeiro com o terceiro.

ALGORITMO exemplo
VARIÁVEIS:
   A: inteiro
   B: inteiro
   C: inteiro
   X: booleana
INÍCIO
   LER A
   LER B
   LER C
   X = (A>B) E (A < C)
   MOSTRAR "A expressão A>B E A<C é ", X
FIM


EXERCÍCIO

Para cada uma das expressões abaixo determine se a expressão é verdadeira ou falsa.


Expressões com operadores relacionais e lógicos
Expressão A B C D Valor
(A>B) E (C>D) 10 8 20 15
(A>B) E (C>D) 10 12 15 15
(A<=B) OU (C>10) 5 5 3 5
(A<=B) OU ((C==D) E (D<A)) 3 10 4 4
(A==B) OU (C==D) 3 1 4 4
((A==B) E (B<30)) OU (C>=D) 5 5 10 5

Controle do Fluxo de Execução: Estruturas de Decisão

Estruturas de Decisão

Você deve ter observado que, no fluxograma, instruções simples (retângulo) possuem uma entrada e uma saída indicando que o fluxo de saída está claramente determinado.

Em algumas situações é necessário realizar algum teste sobre uma expressão e neste caso a execução é condicional. Esta expressão NORMALMENTE vai se utilizar de OPERADORES LÓGICOS e RELACIONAIS. O teste da expressão pode resultar em VERDADEIRO e neste caso uma sequência de ações é realizada. Se o resultado for FALSO, uma outra sequência é realizada.

Seja o problema:

Exemplo: Problema do Controle de Acesso

PROBLEMA: Controlar o acesso a uma porta usando uma senha pré-configurada no sistema.

DADO DE ENTRADA: a senha ( aser armazenada em variável alfanumérica)

DADO DE SAÌDA: porta aberta (simulado com msg "PORTA ABERTA") ou mensagem de "SENHA NAO CONFERE"

VARIÁVEIS: SENHA (tipo alfanumérica)

Algoritmo usando Fluxograma

FluxogramaControleAcessoI.jpg ControleDeAcessoSimples.jpg

Algoritmo usando Pseudo-código
ALGORITMO ControleAcesso
VARIÁVEIS
   SENHA: alfanumérica
INICIO
   APRESENTAR "Entre com a SENHA"
   LER SENHA 
   SE SENHA=="alfa" ENTÃO
          "Abrir a porta"
   SENÃO
          "Senha não confere"
   FIMSE
   IR PARA INICIO
FIM
NOTA: Considera-se tempo de execução ZERO das instruções. Na prática, uma instrução pode levar nano, micro ou milisegundos.

EXERCÍCIO

Suponha que existe um sensor de porta aberta. Considere que este sensor é representado por uma VARIÁVEL BOOLEANA chamada SENSOR_PORTA e que é automaticamente setada para TRUE se a porta estiver fechada ou FALSE, caso contrário. O sistema de entrada de senha somente aceita abrir a porta se ela estiver fechada. Modifique o algoritmo acima, usando um fluxograma para prever esta situação.

Outros Exemplos

Exemplo 1 - Um Fluxograma para uma Calculadora

PROBLEMA: Entrar com dois números e na sequência uma operação aritmética. O resultado da operação sobre os dois números deve ser mostrado.

DADOS DE ENTRADA: OPERANDO1(real), OPERANDO2 (real) e OPERADOR (caracter)

DADOS DE SAÍDA: RESULTADO (real)

Atenção: para fins de simplificação não são mostradas mensagens para as entradas de dados.

FluxogramaCalculadora.jpg

EXERCÍCIO

Modificar o fluxograma acima para evitar a DIVISÃO por ZERO.

Em um computador, a divisão por zero pode levar a uma exceção e ao encerramento do programa. Evitar ou prever esta possibilidade é uma boa prática.

Exemplo 2 - Um Fluxograma para Cálculo de Juros Simples OU Composto ao MÊS

Elaborar um fluxograma para calcular o capital acumulado em um dado período de meses, considerando JUROS SIMPLES ou COMPOSTOS mensais. O algoritmo deve testar esta condição.

DADOS DE ENTRADA: CapitalInicial (real), Modo ('s' - simples ou 'c' - composto), Juro, e Periodo (inteiro) em meses

DADOS DE SAÍDA: CapitalAcumulado

NOTA: Ver Juros Simples X Composto aqui.

FluxogramaJuros.jpg

EXERCÍCIO 1

O fluxograma acima NÃO testa a condição 's'. Modificá-lo para prever esta situação. Fornecer mensagem de erro e encerrar em caso de não ser nenhuma das condições.

Aninhamento de estruturas de decisão

Note que é possível aninhar estruturas de decisão. Se você resolveu o exercício da calculadora para evitar divisão por zero, este aninhamento já aconteceu.

Seja o exemplo que lê três lados de um possível triângulo e imprime se NÂO é um triângulo, ou, caso seja, imprime se é EQUILÁTERO, ISÓSCELES ou ESCALENO.

ALGORITMO triangulo
VARIAVEIS
  lado1,lado2,lado3: real
INICIO
  LER lado1
  LER lado2
  LER lado3
  SE lado1>(lado2+lado3) OU lado2>(lado1+lado3) OU lado3>(lado1+lado2) ENTÃO
      MOSTRAR "não é triângulo"
  SENÃO
      SE lado1==lado2 E lado1==lado3 ENTÃO
         MOSTRAR "equilatero"
      SENAO
         SE lado1==lado2 OU lado1==lado3 OU lado2==lado3 ENTÃO
             MOSTRAR "isósceles"
         SENÃO
             MOSTRAR "escaleno"
         FIMSE
      FIMSE
  FIMSE
FIM

EXERCÍCIO

Construir um fluxograma para o algoritmo acima.

Algumas considerações adicionais sobre a elaboração do Fluxograma/Pseudocódigo

  • Um algoritmo deve resolver um determinado problema. Tenha ciência de qual problema pretende-se resolver...
  • Se coloque no lugar do "computador". Ele deve ler o algoritmo, instrução após instrução e executar uma após outra, na sequência. É isto que um microprocessador (CPU) faz, somente que em linguagem de máquina...
  • Fique atento aos momentos de entrada de dados e a ordem no uso das variáveis. A qualquer momento pode ser realizada a entrada e a saída de dados. Analise o problema para verificar quando será necessário...
  • Identifique claramente os dados de entrada e saída do algoritmo. Veja o algoritmo como uma sequência de instruções que transforma os dados de entrada nos dados de saída...
  • Use nomes significativos para as variáveis. Tenha consciência que as variáveis e constantes são manipuladas pelos algoritmos;
  • Uma variável é uma caixa de armazenamento (memória). Se colocar algo lá, tudo que estava armazenado nela é perdido. Uma caixa pode ter uma "sujeira" se não foi nada colocado nela...
  • Estude o problema a ser resolvido. Identifique variáveis e constantes a serem usadas. Observe qual tipo de variável vai usar...
  • Mudança na ordem de instruções pode acarretar em problemas...

Exercícios de Consolidação

  1. Para fazer um determinado tipo de iogurte, o leite deve estar entre 20 e 30 graus e depois deve-se acrescentar uma levedura. Faça um algoritmo para ler a temperatura do leite (poderia vir de um sensor) e informar se o leite está muito quente, muito frio ou se está pronto para que o iogurte seja confeccionado.
  2. Implementar em pseudocódigo um algoritmo que realiza a leitura de dois números reais e imprime uma mensagem dizendo SE a média entre estes dois números é MAIOR que 5, IGUAL a 5 ou MENOR que 5.
    Solução - Exercicio 04
  3. Implementar um algoritmo em pseudocódigo para receber os 3 coeficientes de uma equação do segundo grau e então calcular as raízes indicando as três condições possíveis. Quantas variáveis foram usadas? ATENÇÃO: prever a condição a=0 e indicar que não seria uma equação do segundo grau. VER [1]
    Solução
  4. Tente fazer uma solução para o exercício anterior usando o menor número possível de variáveis. Note que, como comentado em sala, trata-se de um exercício de treinamento. Em geral, não vale perder legibilidade do algoritmo para "economizar" variáveis.
  5. Modifique o exercício de juros simples/composto (acima) para atender a seguinte situação. Um banco tem um fundo que proporciona juros simples (Fundo A) a uma taxa definida a cada mês e outro a juros composto (FUNDO B) que também permite a aplicação a JUROS COMPOSTO com uma taxa igual a metade do FUNDO A. Faça um algoritmo que permite entrar com o CAPITAL INICIAL, A TAXA DE JURO mensal do FUNDO A e o período desejado. O algoritmo deve calcular o CAPITAL ACUMULADO para os dois fundos e compará-los informando qual o melhor fundo para o período em questão e qual a diferença entre os capitais acumulados.
  6. Implementar um algoritmo através de um fluxograma que recebe cinco números reais. O algoritmo deve mostrar a média destes números. Identifique (através de comentários ao lado do fluxograma) quem são os DADOS DE ENTRADA e DE SAÍDA. Qual o número de variáveis que estão sendo usadas no algoritmo? Quantas constantes? Seria possível reduzir o número de variáveis usadas? Qual seria o mínimo?
  7. Implementar um algoritmo através de um fluxograma que recebe cinco números reais. O algoritmo deve mostrar a média e a quantidade de números (dentre estes cinco números) que estão acima da média. Identifique (através de comentários ao lado do fluxograma) quem são os DADOS DE ENTRADA e DE SAÍDA. Qual o número de variáveis que estão sendo usadas no algoritmo? Quantas constantes?
  8. Considere o exercício anterior. Tente conceber uma versão do algoritmo que usa o menor número de variáveis possível.
  9. Para o problema de controle de acesso descrito acima, conceber um procedimento para modificar a senha de acesso do USUÁRIO. Neste caso a senha deverá ser armazenada em uma variável.Para tanto, assuma a existência de uma senha de administrador fixa (por exemplo, "ADMIN"). Se a senha do administrador for fornecida, mostrar uma mensagem de ENTRE COM A NOVA SENHA (do USUÁRIO).
    Solução - Exercicio 01
  10. Inserir a noção de UserID. Para abrir a porta o usuário entra com o UserId e com a senha. De fábrica o UserId é "alfa" e a senha "alfa". O UserId do admin é "admin" e a senha "beta". O administrador pode abrir a porta ou mudar a senha do UserId. Para tanto uma pergunta adicional deve ser feita. Solução com problema.
    Solução - Exercicio 02
  11. Inserir a noção de bloqueio do usuário. Se o usuário comum tentar 3 vezes e errar ele é bloqueado. A mudança da senha deve desbloquear o usuário.
    Solução - Exercicio 03
  12. Implementar um algoritmo através de um pseudocódigo, que recebe as três cores de um resistor e informa em ohms o valor do mesmo. Identifique as entradas, saídas, constantes e variáveis envolvidas.
  13. Implementar um algoritmo através de um fluxograma que recebe 3 números inteiros e imprime os números em ordem decrescente.