Preview only show first 10 pages with watermark. For full document please download

Aed 03

Aula de Algoritmo e Estrutura de Dados do Professor Patrick Pedreira.

   EMBED


Share

Transcript

Algoritmos e Estruturas de Dados Sumário ❖ Tópicos a serem abordados na aula ◗ Comandos de Condiç Condição PORTUGOL Estruturas de Controle de Fluxo Prof. Patrick Pedreira Estruturas de Controle de Fluxo ❖ Os algoritmos desenvolvidos até o momento constituem uma seqüência de ações que sempre são executadas em sua totalidade indiferente de qual seja(m) o(s) valor(es) da(s) entrada(s). ❖ Contudo para a resolução de determinados problemas ou para a execução de determinadas tarefas é necessária a realização de um conjunto distinto de ações e este conjunto é definido com base em uma análise da(s) entrada(s). Estruturas de Controle de Fluxo ❖ Um exemplo simples de uma destas situações é um algoritmo capaz de efetuar o cálculo do imposto de renda devido por um determinado contribuinte. Neste caso dependendo da quantidade de dependentes, do valor de sua renda e outras fatores o cálculo será feito de formas distintas. ❖ Em função do que foi mencionado foram criadas as estruturas de controle de fluxo, as quais são fundamentais para a construção de algoritmos complexos. Estas permitem que o programador especifique a seqüência de instruções que será executada. 1 Estruturas de Controle de Fluxo ❖ Comando se (Instrução condicional) ◗ O funcionamento do comando se é bastante intuitivo. Para um exemplo de compras poderíamos expressar o algoritmo como: ... Estruturas de Controle de Fluxo ❖ Sintaxe: … se () então Escolha o produto que quer comprar se tem dinheiro para comprá-lo então … Coloque no carrinho senão Devolva para a prateleira Escolha um marca mais barata ... Estruturas de Controle de Fluxo ❖ Pseudocódigo/Exercício – Construa o pseudocódigo de um algoritmo para obter o resultado da divisão de dois números inteiros quaisquer. Lembre-se que a divisão só pode ser feita caso o divisor seja diferente de zero ❖ A pode ser representada por uma variável booleana, uma constante (V ou F) ou uma expressão cujo resultado seja um valor lógico. Estruturas de Controle de Fluxo algoritmo divisao var n1, n2: inteiro; res: real; inicio escreva (“Digite o dividendo inteiro: ”); leia (n1); escreva (“Digite o divisor inteiro: ”); leia (n2); se (n2<>0) entao inicio res  n1 / n2; escreva (“Resultado da divisão: ”, res); fim {fim do se} Se (n2=0) escreva (“Impossível dividir”); fim {fim do algoritmo} 2 Estruturas de Controle de Fluxo ❖ Pseudocódigo/Exercício – Construa o pseudocódigo de um algoritmo que leia um número e identifique se o valor lido é 5. Caso seja, deve-se indicar que a condição é verdadeira e imprimir o valor lido. Estruturas de Controle de Fluxo Algoritmo Verifica5_versao1 var a: inteiro; início escreva(“Entre com um valor: ”); {1} leia(a); {2} se (a=5) então {3} início escreva (“Condição Verdadeira”); {4} escreva (“O valor é ”, a); {5} fim escreva(“Fim do algoritmo”); {6} fim Estruturas de Controle de Fluxo ❖ Vejamos o teste de mesa ❖ Usaremos mais uma coluna para indicar qual instrução está sendo executada ❖ Esse novo dado é interessante para se perceber que as instruções poderão ser executadas fora da ordem apresentada nas linhas Estruturas de Controle de Fluxo ❖ Teste de mesa para a=5 Instruç Instrução Linha a 1 1 ? 2 2 [5] 3 3 5 4 4 5 5 5 {5} 6 6 5 3 Estruturas de Controle de Fluxo Estruturas de Controle de Fluxo ❖ Teste de mesa para a=2 (diferente de 5) ❖ Comando se ...senão ◗ A cláusula senão é opcional ao utilizarmos o se Instruç Instrução Linha a 1 1 ? 2 2 [2] 3 3 2 4 6 2 ◗ O bloco de comandos que segue o senão será executado quando o valor booleano avaliado na condição for falso ◗ Sintaxe: … se () então [senão ] ... Estruturas de Controle de Fluxo ❖ Cláusula senão não precisa ser numerada nem representada no teste de mesa pois não tem custo computacional Estruturas de Controle de Fluxo Algoritmo Verifica5_versao2 var a: inteiro; início escreva(“Entre com um valor: ”); {1} leia(a); {2} se (a=5) então {3} início escreva (“Condição Verdadeira”); {4} escreva (“O valor é ”, a); {5} fim senão início escreva(“Condição falsa”); {6} escreva (“O valor nao é 5 é ”, a); {7} fim escreva(“Fim do algoritmo”); {8} fim 4 Estruturas de Controle de Fluxo Estruturas de Controle de Fluxo ❖ Teste de mesa para a=5 ❖ Teste de mesa para a=2 (diferente de 5) Instruç Instrução Linha a Instruç Instrução Linha a 1 1 ? 1 1 ? 2 2 [5] 2 2 [2] 3 3 5 3 3 2 4 4 5 4 6 2 5 5 {5} 5 7 {2} 6 8 5 6 8 2 Estruturas de Controle de Fluxo ❖ Exercício ❖ Problema – Faça um algoritmo que leia a idade de uma pessoa e diga-lhe se é maior de idade ou não. Represente o valor que indica maior idade como uma constante que valerá 18. Estruturas de Controle de Fluxo Algoritmo Maior_Idade constante LIMITE = 18; var idade: inteiro; maior: booleano; início escreva(“Entre com a idade: ”); leia(idade); se (idade>= LIMITE) então maior  V; senão maior  F; se (maior) então escreva(“É maior de idade.”); senão escreva(“É menor de idade.”); fim {1} {2} {3} {4} {5} {6} {7} {8} 5 Estruturas de Controle de Fluxo ❖ O trecho se (maior) então poderia ser representado por se (maior = V) então. De qualquer forma, a condição booleana teria o mesmo resultado. Estruturas de Controle de Fluxo ❖ Exercício - Faça o teste de mesa para o problema anterior ❖ Não delimitamos os blocos de instruções depois do se com início...fim, porque nesse caso só existe um único comando a ser executado ◗ Não é incorreta a delimitação, mas isso torna o código mais limpo Estruturas de Controle de Fluxo ❖ Exercício ❖ Problema – Faça um algoritmo que leia dois números inteiros e determine qual dos dois é maior. Considere que os dois números serão diferentes. Estruturas de Controle de Fluxo Algoritmo Maior_versao1 var n1, n2: inteiro; início escreva(“entre com o primeiro valor: ”); leia(n1); escreva(“entre com o segundo valor: ”); leia(n2); se (n1>n2) então escreva(“o valor maior é: ”, n1); senão escreva(“o valor maior é: ”, n2); fim {1} {2} {3} {4} {5} {6} {7} 6 Estruturas de Controle de Fluxo ❖ Exercício - Faça dois testes de mesa para o problema anterior. No primeiro teste, considere que o primeiro número digitado pelo usuário é maior que o segundo. No segundo teste, considere que o segundo número digitado é maior que o primeiro Estruturas de Controle de Fluxo Algoritmo Iguais_Diferentes_versao1 var n1, n2, n3: inteiro; início escreva(“entre com o primeiro valor: ”); leia(n1); escreva(“entre com o segundo valor: ”); leia(n2); escreva(“entre com o terceiro valor: ”); leia(n3); se (n1=n2 e n2=n3) então escreva(“Os três números são iguais”); se (n1<>n2 e n1<>n3 e n2<>n3) então escreva(“Não há valores iguais”); se (n1=n2 e n1<>n3) ou (n1=n3 e n1<>n2) ou (n2=n3 e n1<>n2) então escreva(“Há dois valores iguais e um diferente”); escreva(“Fim do programa”); fim Estruturas de Controle de Fluxo ❖ Condições compostas ◗ As condições vistas até agora sempre foram únicas ◗ Entretanto, para problemas mais complexos, torna-se necessária a utilização de condições mais elaboradas. ❖ Por exemplo, suponha que tenhamos que criar um algoritmo que leia três números e determine quantos são iguais... Estruturas de Controle de Fluxo ❖ Erros comuns ◗ Tentativa de fazer comparação com 3 elementos  Se (n1 = n2 = n3) então {ERRADO} ◗ Sintaticamente está incorreta, devendo ser feita sempre por meio de conectivos lógicos  se (n1=n2 e n1=n3 e n2=n3) então  se (n1=n2 e n2=n3) então {melhor ainda que a de antes} 7 Estruturas de Controle de Fluxo ❖ Exercício proposto ◗ Faça três testes de mesa referentes ao algoritmo Iguais_Diferentes_versao1. Estruturas de Controle de Fluxo ❖ Comandos de condição encadeados ◗ Vejamos novamente a estrutura do comando se: … se () então  Primeiro teste: três números diferentes  Segundo teste: primeiro e terceiro são iguais e segundo diferente [senão  Terceiro teste: três números iguais ] ... ❖ As sequências de comandos podem conter qualquer tipo de instrução, inclusive comandos de decisão ❖ Quando as sequências de comando subordinadas ao se-senão contém outros comandos se-senão, temos o encadeamento (ou aninhamento) de comandos de decisão Estruturas de Controle de Fluxo Estruturas de Controle de Fluxo ❖ Como a sequencia se-senão-se pode ser muito grande, a endentação pode deixar muito poluído. Neste caso, convenciona-se manter os comandos se na mesma coluna 8 Estruturas de Controle de Fluxo Estruturas de Controle de Fluxo ❖ Esse tipo de construção é muito útil quando sabemos que em um conjunt de condições apenas uma delas será verdadeira. Vejamos a nova implementação para o problema de comparação de números... Estruturas de Controle de Fluxo ❖ Observamos que: ◗ A última condição (dois números iguais e um diferente) não foi colocada  Não há necessidade de se averiguar essa possibilidade porque as outras já foram testadas anteriormente ❖ Acompanhemos o teste de mesa para as duas versões, considerando os três valores iguais Estruturas de Controle de Fluxo Algoritmo Iguais_Diferentes_versao1 var n1, n2, n3: inteiro; início escreva(“entre com o primeiro valor: ”); leia(n1); escreva(“entre com o segundo valor: ”); leia(n2); escreva(“entre com o terceiro valor: ”); leia(n3); se (n1=n2 e n2=n3) então escreva(“Os três números são iguais”); se (n1<>n2 e n1<>n3 e n2<>n3) então escreva(“Não há valores iguais”); se (n1=n2 e n1<>n3) ou (n1=n3 e n1<>n2) ou (n2=n3 e n1<>n2) então escreva(“Há dois valores iguais e um diferente”); escreva(“Fim do programa”); fim 9 Estruturas de Controle de Fluxo Estruturas de Controle de Fluxo ❖ Observaç Observações ◗ A condiç condição do primeiro comando se (linha 7) foi verdadeira, poré porém isso não evitou que as condiç condições das linhas 9 e 10 fossem testadas, apesar de não poderem ser verdadeiras, visto que os nú números eram iguais Estruturas de Controle de Fluxo Estruturas de Controle de Fluxo 10 Estruturas de Controle de Fluxo ❖ Observaç Observações ◗ O algoritmo executa menos instruç instruções (11 da primeira contra 9 da segunda versão) ◗ Condiç Condições não são testadas desnecessariamente ❖ Podemos determinar quantos nú números são iguais e diferentes de uma outra forma. Vejamos a seguir. Estruturas de Controle de Fluxo ❖ Exercí Exercícios propostos ◗ Faç Faça dois testes de mesa referentes ao algoritmo Iguais_Diferentes_Versão2  Primeiro teste: dois dos três nú números são iguais Estruturas de Controle de Fluxo ❖ Observaç Observações ◗ Não foram usadas condiç condições compostas ◗ Tivemos que usar uma sé série de comandos de decisão encadeados Estruturas de Controle de Fluxo ❖ Comando de Seleção Múltipla (Comando caso) ◗ Em algumas situações ao chegarmos a uma determinada instrução de um algoritmo devemos selecionar um dentre alguns trechos a seguir, tendo como base para esta escolha um conjunto de valores.  Segundo teste: todos os nú números são diferentes ◗ Faç Faça o mesmo para o algoritmo Iguais_Diferentes_Versão3. Compare o nú número de instruç instruções executadas em cada versão ◗ Para lidar com casos deste tipo foi criado o comando de seleção múltipla. ◗ Comando caso, pode ser visto como uma especializaç especialização do se. 11 Estruturas de Controle de Fluxo ❖ Possuindo a sintaxe: ... Estruturas de Controle de Fluxo ❖ O comando anterior equivale à sequência de comandos se caso seja: : : ... default: Estruturas de Controle de Fluxo Estruturas de Controle de Fluxo ❖ Problema – Vejamos um algoritmo capaz de identificar se um nú número é igual a 1, 5 ou 10. Caso não seja nenhum desses valores ele retorna a mensagem: Valor invá inválido. 12 Estruturas de Controle de Fluxo Estruturas de Controle de Fluxo ❖ Problema – Faç Faça um algoritmo capaz de identificar se um nú número é: 1. Par ou ímpar 2. Positivo, negativo ou zero 3. Um ano bissexto – considere que para ser bissexto basta que seja divisí divisível por 4 e não ser divisí divisível por 100. Faç Faça uma condiç condição composta que englobe todas as regras para a definiç definição de ano bissexto ◗ Caso não tenha nenhuma das opç opções anteriores o algoritmo deve retornar uma mensagem informando ao usuá usuário que a operaç operação solicitada não é válida Estruturas de Controle de Fluxo ❖ Variações de sintaxe: ❖ Exemplo: ◗ O pseudocódigo a seguir informa com base no nome de um time fornecido, se este trata-se de um time carioca, paulista ou de outro estado. 13 Exercícios ❖ Exercí Exercícios da pá página 55 14