Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos, Pseudocódigo e Ciclo de Desenvolvimento INF1005 – Programação I – 33B Prof. Gustavo Moreira gmoreira@inf.puc-rio.br 1 algoritmos, pseudocódigo e ciclo de desenvolvimento tópicos algoritmo – definições representação e resolução de problemas representação de programa pseudocódigopseudocódigo fluxograma construções entrada e saída condicionais repetições ciclo de desenvolvimento 2 algoritmosalgoritmos 3 algoritmo - definições especificação precisa (não ambígua) de um comportamento que visa resolver um problema bem definido sequência finita de instruções precisas que podem ser sequência finita de instruções precisas que podem ser executadas mecanicamente num período de tempo finito e com uma quantidade de esforço finito programa de computador algoritmo codificado em uma linguagem de programação 4 algoritmo - definições especificação precisaprecisaprecisaprecisa ((((nãonãonãonão ambíguaambíguaambíguaambígua) ) ) ) de um comportamento que visa resolver um problema bem definido Uma receita culinária é um algoritmo?Uma receita culinária é um algoritmo? � "sal a gosto" vs. "1/4 colher (chá) de sal" � "bata bem" vs. "bata até a massa ficar homogênea" � "forno médio" vs. "forno a 220°C" 5 algoritmo – definições especificação precisa (não ambígua) de um comportamento que visa resolver um problemaproblemaproblemaproblema bembembembem definidodefinidodefinidodefinido condições iniciais (estado de problema) � como as coisas são objetivos (estado desejado) � como as coisas deveriam ser recursos � meios ou métodos para transformar um estado de problema desde as condições iniciais até os objetivos ex: movimentos possíveis em um jogo 6 exemplo Escreva um algoritmo com objetivo de matar a fome “na rua” 1. ______________________________________________ EX. 01 algoritmopessoa com fome pessoa sem fome 2. ______________________________________________ 3. ______________________________________________ 4. ______________________________________________ 5. ______________________________________________ 6. ______________________________________________ 7 exemplo – isto é um algoritmo? objetivo: matar a fome “na rua” 1. decidir onde comer, conforme tempo e dinheiro disponível 2. ir até o local escolhido 3. decidir o que comer, conforme cardápio, tempo e dinheiro disponíveldisponível 4. fazer o pedido 5. pagar 6. aguardar o pedido 7. comer 8 resolver o problema antes de programar Qual é a situaçãosituaçãosituaçãosituação inicialinicialinicialinicial? Já temos todos os dados de dados de dados de dados de entradaentradaentradaentrada? Esses dados são específicos a uma única situação ou podemos generalizar? Existe alguma notação para representar de forma sucinta os dados e os estados intermediários? Qual é o objetivoobjetivoobjetivoobjetivo? / Quais são os objetivos? Há um único objetivo, ou são vários? Cada objetivo pode ser dividido em sub-objetivos, ou não? Os (sub-)objetivos são independentes, ou não? Há obstáculos a serem vencidos? Como podem ser vencidos? Há restrições na elaboração da solução? (tempo, espaço em memória, custo) Quais são os recursosrecursosrecursosrecursos (movimentos, operações, procedimentos, regras, transformações)? Para cada recurso, há restrições ou pré-condições para sua aplicação? Há outros recursos mais simples que satisfaçam essas pré-condições? Quando você aplica um recurso, o que muda? (variantesvariantesvariantesvariantes) Quando você aplica um recurso, o que permanece igual? (invariantesinvariantesinvariantesinvariantes) Há outros recursos mais poderosos para resolver esse problema? 9adaptado de Blank & Barnes (1998) The Universal Machine. exemplo – Como chegar ao destino? Rua 5 Rua 4 10 Av.2 Av.3 Av.4 Rua 7 Rua 6 Av.1 problemas e soluções � um problema pode ter várias soluções � algumas soluções são melhores do que outras � um problema pode ter soluções parciais � restrições no espaço de problema podem ajudar na busca por uma solução 11 representação do espaço de problema descrição do “mundo”: ruas: [4,7] avenidas: [1,4] convenções de representação: posição: (r,a) Rua 7 Rua 6 Rua 5 Rua 4 posição: (r,a) obstáculo: (r1,a1,r2,a2) condições iniciais: posição: (7,1) obstáculos: { (6,2,7,2), (4,2,5,2), (5,3,6,3), (6,4,7,4) } objetivo: posição: (4,3) 12 Av.2 Av.3 Av.4Av.1 Quais as consequências dessa representação? algoritmo - exemplo objetivo: verificar se um aluno está aprovado (média das 3 notas >= 5.0) ou reprovado (caso contrário) 13 como representar um algoritmo 1. Obter as três notas das provas do aluno 2. Calcular a média aritmética das três notas 3. Se a média for maior ou igual a 5, escrever “aprovado” 4. Caso contrário, escrever “reprovado” linguagem natural fluxograma início leia (nota1, nota2, nota3); media ← (nota1+nota2+nota3)/3; 14 variáveisvariáveisvariáveisvariáveis media, nota1, nota2, nota3 inícioinícioinícioinício leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) então escreva “aluno aprovado” senão escreva “aluno reprovado” fim-se fimfimfimfim pseudocódigo (nota1+nota2+nota3)/3; media >= 5.0? escreva (“aprovado”); fim escreva (“reprovado”); sim não algoritmo em pseudocódigo variáveisvariáveisvariáveisvariáveis media, nota1, nota2, nota3 inícioinícioinícioinício leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) então escreva “aluno aprovado” 15 escreva “aluno aprovado” senão escreva “aluno reprovado” fim-se fimfimfimfim algoritmo em pseudocódigo variáveisvariáveisvariáveisvariáveis media, nota1, nota2, nota3 inícioinícioinícioinício leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) então escreva “aluno aprovado” variáveis armazenam valores (dados, informações) necessários à solução do problema: � dados de entrada: nota1, nota2, nota3 � dados utilizados no processamento: média � dados de saída 16 escreva “aluno aprovado” senão escreva “aluno reprovado” fim-se fimfimfimfim algoritmo – exemplo objetivo: a partir de três notas de um aluno, verificar se ele está: aprovado (média >= 5.0) em prova final (média < 5.0 e média >= 3.0) ou reprovado (média < 3)reprovado (média < 3) 17 fluxograma (com defeito) início leia (nota1, nota2, nota3); media ← (nota1+nota2+nota3)/3; objetivo: a partir de três notas de um aluno, verificar se ele está: aprovado (média >= 5.0) em prova final (média < 5.0 e média >= 3.0) ou reprovado (média < 3) sim 18 (nota1+nota2+nota3)/3; media >= 5.0? escreva (“aprovado”); fim escreva (“reprovado”); sim não escreva (“em prova final”); media > 3.0? não fluxograma (com defeito) início leia (nota1, nota2, nota3); media ← (nota1+nota2+nota3)/3; objetivo: a partir de três notas de um aluno, verificar se ele está: aprovado (média >= 5.0) em prova final (média < 5.0 e média >= 3.0) ou reprovado (média < 3) sim 19 (nota1+nota2+nota3)/3; media >= 5.0? escreva (“aprovado”); fim escreva (“reprovado”); sim não escreva (“em prova final”); media > media > media > media > 3.0?3.0?3.0?3.0? não fluxograma (corrigido) início leia (nota1, nota2, nota3); media ← (nota1+nota2+nota3)/3; objetivo: a partir de três notas de um aluno, verificar se ele está: aprovado (média >= 5.0) em prova final (média < 5.0 e média >= 3.0) ou reprovado (média < 3) sim20 (nota1+nota2+nota3)/3; media >= 5.0? escreva (“aprovado”); fim escreva (“reprovado”); sim não escreva (“em prova final”); media >= media >= media >= media >= 3.0?3.0?3.0?3.0? não algoritmo em pseudocódigo variáveisvariáveisvariáveisvariáveis media, nota1, nota2, nota3 inícioinícioinícioinício leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) então escreva “aluno aprovado” variáveisvariáveisvariáveisvariáveis media, nota1, nota2, nota3 inícioinícioinícioinício leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) então escreva “aluno aprovado” 21 escreva “aluno aprovado” senão se (media >= 3) então escreva “aluno em prova final” senão escreva “aluno reprovado” fim-se fim-se fimfimfimfim escreva “aluno aprovado” senão se (media >= 3) então escreva “aluno em prova final” senão escreva “aluno reprovado” fim-se fimfimfimfim entrada e saída 22 entrada e saída variáveisvariáveisvariáveisvariáveis media, nota1, nota2, nota3 inícioinícioinícioinício leialeialeialeia nota1, nota2, nota3nota1, nota2, nota3nota1, nota2, nota3nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) então escrevaescrevaescrevaescreva ““““alunoalunoalunoaluno aprovadoaprovadoaprovadoaprovado”””” senão escrevaescrevaescrevaescreva ““““alunoalunoalunoaluno reprovadoreprovadoreprovadoreprovado”””” fim-se pseudocódigo 23 fim-se fim exercício Escreva o pseudocódigo ou desenhe o fluxograma de um programa que leia do teclado uma temperatura em Fahrenheit e escreva na tela a temperatura equivalente em Celsius (tempC = (tempF-32)/1.8). EX. 02 ______________________________________________________________________ ______________________________________________________________________ 24 ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ condicionaiscondicionais 25 controle de execução: condicionais variáveisvariáveisvariáveisvariáveis media, nota1, nota2, nota3 inícioinícioinícioinício leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5media >= 5media >= 5media >= 5) então escrevaescrevaescrevaescreva ““““alunoalunoalunoaluno aprovadoaprovadoaprovadoaprovado”””” senão escrevaescrevaescrevaescreva ““““alunoalunoalunoaluno reprovadoreprovadoreprovadoreprovado”””” fim-se pseudocódigo fluxograma início leia (nota1, nota2, nota3); media ← (nota1+nota2+nota3)/3; 26 fim-se fimfimfimfim (nota1+nota2+nota3)/3; media >= media >= media >= media >= 5.0?5.0?5.0?5.0? escrevaescrevaescrevaescreva (“(“(“(“aprovadoaprovadoaprovadoaprovado”);”);”);”); fim escrevaescrevaescrevaescreva (“(“(“(“reprovadoreprovadoreprovadoreprovado”);”);”);”); simsimsimsim nãonãonãonão ………… se (condiçãocondiçãocondiçãocondição) então instruçãoinstruçãoinstruçãoinstrução V1V1V1V1 instruçãoinstruçãoinstruçãoinstrução V2V2V2V2 ………… instruçãoinstruçãoinstruçãoinstrução VnVnVnVn senão instruçãoinstruçãoinstruçãoinstrução F1F1F1F1 instruçãoinstruçãoinstruçãoinstrução F2F2F2F2 ………… instruçãoinstruçãoinstruçãoinstrução FnFnFnFn fim-se instruções executadas se a condiçãocondiçãocondiçãocondição for verdadeiraverdadeiraverdadeiraverdadeira instruções executadas se a condiçãocondiçãocondiçãocondição for falsafalsafalsafalsa dúvidas?dúvidas? 27 exercício Escreva o pseudocódigo ou desenhe o fluxograma de um programa que leia do teclado a probabilidade de chuva e escreva na tela “sol”, caso a probabilidade seja menor que 60%; e “chuva”, caso contrário. EX. 03 ______________________________________________________________________ ______________________________________________________________________ 28 ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ condicionais – expressões booleanas uma condição é representada por uma expressão booleana, que resulta em um valor verdadeiro ou falso exemplos: media > 5 maior que media >= 5maior ou igual amedia >= 5maior ou igual a media < 5 menor que media <= 5menor ou igual a media == 5 igual a media != 5 diferente de 29 condicionais – combinando expressões se (media < 5 eeee media >= 3) escreva (“em prova final”) fim se (nota1 == 10 ouououou nota2 == 10) escreva (“excelente!”) fim conjunçãoconjunçãoconjunçãoconjunção (E)(E)(E)(E) � resultado só é verdadeiro se ambos os valores forem verdadeiros disjunçãodisjunçãodisjunçãodisjunção (OU)(OU)(OU)(OU) � resultado só é falso se ambos os valores forem falsos 30 AAAA BBBB A A A A eeee BBBB V V V V F F F V F F F F AAAA BBBB A A A A ouououou BBBB V V V V F V F V V F F F verdadeiros exercício Escreva o pseudocódigo ou desenhe o fluxograma de um programa que obtém as 3 notas de um aluno, calcula sua média e, caso o aluno tenha sido aprovado, escreva na tela “aprovado”. O aluno é aprovado se ele teve média maior ou igual a 5 e nenhuma nota menor que 3. EX. 04 ________________________________________________________________ 31 ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ repetiçõesrepetições 32 controle de execução: repetições variáveisvariáveisvariáveisvariáveis num, media, nota1, nota2, nota3 inícioinícioinícioinício leia num enquantoenquantoenquantoenquanto (numnumnumnum > 0> 0> 0> 0) faça leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) então escreva “aluno aprovado” senão escreva “aluno reprovado” fim-se pseudocódigo fluxograma início leia (nota1, nota2, nota3); fimnumnumnumnum > 0?> 0?> 0?> 0? leia num sim não 33 fim-se numnumnumnum= = = = numnumnumnum –––– 1111 fimfimfimfim----enquantoenquantoenquantoenquanto fimfimfimfim media ← (nota1+nota2+nota3)/3; media >= 5.0? escreva (“aprovado”); escreva (“reprovado”); sim não ………… enquanto (condiçãocondiçãocondiçãocondição) faça instruçãoinstruçãoinstruçãoinstrução V1V1V1V1 ………… instruçãoinstruçãoinstruçãoinstrução VnVnVnVn fim-enquanto … instruções executadas enquantoenquantoenquantoenquanto a condiçãocondiçãocondiçãocondição for verdadeiraverdadeiraverdadeiraverdadeira instruçõesexecutadas quando a condiçãocondiçãocondiçãocondição éééé ou se se se se tornatornatornatorna falsafalsafalsafalsa numnumnumnum = = = = numnumnumnum ---- 1111 exercício Qual é a saída dos seguintes programas? EX. 05 variáveisvariáveisvariáveisvariáveis num inícioinícioinícioinício num = 0 enquanto (num < 3) faça escreva num num= num + 1 fim-enquanto fimfimfimfim variáveisvariáveisvariáveisvariáveis num inícioinícioinícioinício num = 0 enquanto (num < 3) faça escreva num num= num - 1 fim-enquanto fimfimfimfim 34 _______________________________ _______________________________ _______________________________ _______________________________ fimfimfimfim fimfimfimfim _______________________________ _______________________________ _______________________________ _______________________________ valor de num a cada iteração I0 I1 I2 I3 I4 I5 I6 I7 I8 num saída saída valor de num a cada iteração I0 I1 I2 I3 I4 I5 I6 I7 I8 num exercício EX. 06 Escreva o pseudocódigo de um programa que lê o número de alunos de uma turma e, para cada aluno, lê as suas três notas, escreve sua média e, no final, escreve a média da turma. ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ 35 ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ exercício EX. 06 Escreva o pseudocódigo de um programa que lê o número de alunos de uma turma e, para cada aluno, lê as suas três notas, escreve sua média e, no final, escreve a média da turma. variáveisvariáveisvariáveisvariáveis num_alunos, i media, media_turma, nota1, nota2, nota3 inícioinícioinícioinício leia num_alunos Em que situações este programa falha? 36 leia num_alunos i = 0 media_turma = 0 enquanto (i < num_alunos) faça leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 escreve media media_turma = media_turma + media i = i + 1 fim-enquanto media_turma = media_turma / num_alunos escreva media_turma fimfimfimfim exercício EX. 07 Escreva o pseudocódigo ou desenhe o fluxograma de um programa que lê um número não negativo e escreve na tela o seu fatorial. Lembrando: n! = n x (n-1) x ... x 1 ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ 37 ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ exercício EX. 07 Escreva o pseudocódigo de um programa que lê um número não negativo e escreve na tela o seu fatorial. Lembrando: n! = n x (n-1) x ... x 1 variáveisvariáveisvariáveisvariáveis f, n inícioinícioinícioinício leia n Em que situação esse programa falha? 38 leia n f = 1 enquanto (n > 1) faça f = f * n n = n - 1 fim-enquanto escreva f fimfimfimfim dúvidas?dúvidas? 39 ciclo de desenvolvimento 40 ciclo de desenvolvimento simplificado desenvolvimento editor de texto correção em caso de erros de compilação correção em caso de erros de exeçucão programa em C (código fonte: arq2.c) programa em C (código fonte: arq1.c) 41 testes saída programa executável (arq.exe) compiladorcompilação saída saída entrada entrada entrada dúvidas?dúvidas? 42 Prof. Gustavo Moreira gmoreira@inf.puc-rio.br
Compartilhar