|
|
Linha 1: |
Linha 1: |
− | ===Objetivos ===
| |
| | | |
− | O aluno deverá saber utilizar comandos e expressões em pseudo-código e fluxogramas usando:
| |
− |
| |
− | *Operadores Relacionais e Lógicos
| |
− | *Comandos de Decisão
| |
− | *Comandos de decisão com aninhamento
| |
− |
| |
− | ===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:
| |
− |
| |
− | {| border="1" cellpadding="2"
| |
− | !Operador
| |
− | !Significado
| |
− | |-
| |
− | |>
| |
− | |maior que
| |
− | |-
| |
− | |>=
| |
− | |maior ou igual que
| |
− | |-
| |
− | |<
| |
− | |menor que
| |
− | |-
| |
− | |<=
| |
− | |menor ou igual que
| |
− | |-
| |
− | |==
| |
− | |igual a (se o operando a esquerda é maior que o 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:
| |
− |
| |
− | 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.
| |
− |
| |
− |
| |
− | <code>
| |
− | 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
| |
− | </syntaxhighlight>
| |
− |
| |
− | Exercício: Fazer um fluxograma para o algoritmo acima.
| |
− |
| |
− | ===Operadores Lógicos===
| |
− |
| |
− | É possível construir expressões ainda mais completas usando os operadores lógicos, apresentados abaixo:
| |
− |
| |
− | {| border="1" cellpadding="2"
| |
− | !Operador
| |
− | !Significado
| |
− | |-
| |
− | |&&
| |
− | |AND (E)
| |
− | |-
| |
− | |<nowiki>||</nowiki>
| |
− | |OR (OU)
| |
− | |-
| |
− | |!
| |
− | |NOT (NÃO)
| |
− | |}
| |
− |
| |
− |
| |
− | 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.
| |
− |
| |
− | 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.
| |
− |
| |
− | <code>
| |
− | 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
| |
− | </syntaxhighlight>
| |
− |
| |
− |
| |
− | EXERCÍCIO
| |
− |
| |
− | Para cada uma das expressões abaixo determine se a expressão é verdadeira ou falsa.
| |
− |
| |
− |
| |
− |
| |
− | {| align=center border=1
| |
− | |+ 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
| |
− | |
| |
− | |}
| |
− |
| |
− | ===Sheldon e o fluxograma da amizade===
| |
− |
| |
− | Vamos observar o fluxograma da amizade do Sheldom da série de TV "Big Bang Theory"
| |
− |
| |
− | <center>{{#ev:youtube|VAX4jLlNo-Q#!}} </center>
| |
− |
| |
− | Observe que a caixa no formato de LOSANGO permite testar uma condição: é uma caixa de decisão.
| |
− |
| |
− | ===Controle do Fluxo de Execução: Estruturas de Decisão===
| |
− |
| |
− | 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:
| |
− |
| |
− | ====Problema do Controle de Acesso====
| |
− |
| |
− | PROBLEMA: Controlar o acesso a uma porta usando uma senha pré-configurada no sistema.
| |
− |
| |
− | DADO DE ENTRADA: SENHA (variável alfanumérica)
| |
− |
| |
− | DADO DE SAÌDA: porta aberta (simulado com msg "PORTA ABERTA") ou mensagem de "SENHA NAO CONFERE"
| |
− |
| |
− | VARIÁVEIS: SENHA (tiipo alfanumérica)
| |
− |
| |
− | =====Algoritmo usando Fluxograma=====
| |
− |
| |
− | [[imagem:FluxogramaControleAcessoI.jpg|450px]]
| |
− |
| |
− | =====Algoritmo usando Pseudo-código=====
| |
− |
| |
− | <code>
| |
− | ALGORITMO ControleAcesso
| |
− | VARIÁVEIS
| |
− | SENHA: alfanumérica
| |
− | INICIO
| |
− | LER SENHA
| |
− | SE SENHA=="alfa" ENTÃO
| |
− | "Abrir a porta"
| |
− | SENÃO
| |
− | "Senha não confere"
| |
− | FIMSE
| |
− | IR PARA INICIO
| |
− | FIM
| |
− | </syntaxhighlight>
| |
− |
| |
− | ====Aninhamento de estruturas de decisão====
| |
− |
| |
− | 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.
| |
− |
| |
− | <code>
| |
− | ALGORITMO trangulo
| |
− | 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
| |
− | </syntaxhighlight>
| |
− |
| |
− | ===Exercícios===
| |
− |
| |
− | EXERCÍCIO 1:
| |
− |
| |
− | 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.
| |
− | 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]]
| |
− |
| |
− | EXERCÍCIO 2:
| |
− |
| |
− | 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".
| |
− |
| |
− | EXERCÍCIO 3:
| |
− |
| |
− | 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.
| |
− |
| |
− | EXERCÍCIO 4:
| |
− |
| |
− | 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.
| |