2. ALGORITMOS Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Ministrado por: Prof. André Amarante
Problemas: Unesp-Campus de Guaratinguetá 2 - Algoritmo Como fazer um depósito em um banco? Mas, por onde começar? Como fritar um ovo? Solução = Algoritmo! Algoritmos 2
2 - Algoritmo 2.1: Introdução Antes de se utilizar uma linguagem de computador, é necessário organizar as ações (instruções) a serem tomadas pela máquina de forma organizada e lógica, sem se preocupar com as regras rígidas da sintaxe de uma linguagem. Para isto utiliza-se uma forma de escrever tais ações, conhecida como algoritmo, ou pseudo-código. Algoritmos 3
2 - Algoritmo 2.2 - Definição Um algoritmo é uma seqüência ordenada e finita de etapas, cuja execução passo a passo resolve um determinado problema. Pessoas tem inteligência e habilidade racional fazem perguntas para se esclarecer. Computador não tem senso próprio deve receber instruções explícitas (algoritmos) Algoritmos 4
2- Algoritmos Um algoritmo correto deve possuir 3 qualidades: 1- Deve ser preciso: com indicação clara da ordem bem como da forma de realização de cada passo. Cada passo do algoritmo deve ser uma instrução que possa ser realizada. 2- Deve estar bem definido: se seguido duas vezes, deve produzir sempre o mesmo resultado. A ordem dos passos deve ser precisamente determinada. 3- Deve ser finito: ao ser seguido, deve terminar num dado instante de tempo (tem que ter um fim). Algoritmos 5
2- Algoritmos Um algoritmo correto tem 3 partes: 1- Entrada de dados; 2- Processamento; 3- Saída de resultados. Algoritmos 6
2- Algoritmos Voltando ao problema do depósito... SOLUÇÃO: 1) Ao chegar na agência, pegue um envelope próprio para depósito em dinheiro. 2) Escreva o número da agência, da conta e o valor do depósito. 3) Coloque o dinheiro dentro do envelope e feche o mesmo. 4) Dirija-se a um caixa eletrônico, procure a tecla para "depósito sem cartão". 5) Siga as instruções da tela do caixa, inserindo os números de acordo com as solicitações. 6) Verifique se os dados estão corretos. 7) Após confirmar os dados, coloque o envelope no local indicado. 8) Aguarde a impressão do recibo. Algoritmos 7
2- Algoritmos E como fica fritar um ovo? SOLUÇÃO: 1) Pegue uma frigideira e coloque sobre o fogão; 2) Pegue o óleo ou manteiga e coloque na frigideira; 3) Ligue a chama do fogão abaixo da frigideira. 4) Pegue um ovo e quebre sobre a frigideira, sem deixar cair a casca. 5) Espere o ovo fritar, retire com a escumadeira em um prato. 6) Desligue a chama do fogão abaixo da frigideira. INGREDIENTES Algoritmos 8
2- Algoritmos Escapando de um labirinto Instruções Possíveis Problema Robô E S Problema Encontrar uma seqüência de instruções acerca dos movimentos do Robô tal que o mesmo seja capaz de entrar e sair do labirinto. Algoritmos 9 F I
2 - Algoritmos Algoritmo Conjunto finito de instruções que permitem a realização de uma tarefa. Solução/Algoritmo do Labirinto I F Leitor I E Instruções Possíveis F S Algoritmos 10 F I
2 - Algoritmo 2.4 - Pseudo código 1 : Método usual de representação de algoritmos. Outros são: fluxograma, fórmulas, etc.. Características dos Algoritmos em Pseudocódigo: Utiliza certas palavras-chave, que indicam a natureza da operação a ser realizada; Utiliza tabulação 2 no começo de cada passo, para ressaltar a estrutura do algoritmo 1- Português Estruturado ou Portugol 2- Indentação Algoritmos 11
2.4 - Pseudo código Os algoritmos terão a seguinte estrutura: ALGORITMO <Nome do algoritmo> <definições> INÍCIO <Comandos> FIM Algoritmos 12
2 - Algoritmo 2.3 - Fluxo de Execução Para o algoritmo ser funcional, deve existir uma relação lógica na execução das ações. Essa relação lógica determina a ordem em que os passos do algoritmo é executado Essa ordem é chamada de Fluxo de Execução. Todo algoritmo possui um Fluxo de Execução e; Estruturas de Controle do Fluxo de Execução Algoritmos 13
2.3 - Fluxo de Execução As Estruturas de controle do Fluxo de Execução do algoritmo podem ser de três tipos: I. Estrutura elementar ou seqüencial; Nesta estrutura, o conjunto de ações elementares é executado de modo linear; de cima para baixo e da esquerda para a direita. Na linguagem C as ações (instruções) são seguidas por ponto-e vírgula (;), com o objetivo do computador diferenciar entre uma ação e outra. Algoritmos 14
2.3 - Fluxo de Execução II. Estrutura de seleção (decisão) ou condicional; Permitem escolher um conjunto de ações (bloco) a serem realizadas. A escolha depende de uma condição ser ou não satisfeita. A condição é representada por expressões lógicas ou relacionais. Essas estruturas podem ser de: Seleção simples. Seleção composta. Seleção encadeada. Algoritmos 15
2.3 - Fluxo de Execução III. Estrutura de repetição. São estruturas de controle de fluxo que permitem repetir uma seqüência de comandos. Os trechos repetidos são chamados de: LAÇOS DE REPETIÇÃO. Algoritmos 16
2.4 - Pseudo código Exemplo de algoritmo Algoritmo: Soma_dois_números Início Fim <Nome do algoritmo> Pegar primeiro número Pegar segundo número Somar o primeiro com o <Comandos> segundo número Mostrar o resultado Algoritmos 17
2.4 - Pseudo código 2.4.1 Apresentação das Estruturas de Algoritmos EX1: ALGORITMO PARA TROCAR PNEU DE UM CARRO Início Trocar Pneu Fim E se o estepe estiver vazio? Isto traz a necessidade de uma decisão entre dois cursos Algoritmos 18
2.4 - Pseudo código ESTRUTURA CONDICIONAL Início se <o estepe está vazio> então Chamar borracheiro senão Trocar o pneu fim se Fim Seleção simples A atividade de Trocar o pneu pode ser mais detalhada Algoritmos 19
2.4 - Pseudo código ESTRUTURA SEQUENCIAL Início se <o estepe está vazio> então Chamar borracheiro senão desparafusar a roda levantar o carro remover a roda colocar o estepe abaixar o carro parafusar a roda fim se Seleção composta Fim Indentação Repare na Algoritmos 20
ESTRUTURA SEQUENCIAL Início se <o estepe está vazio> então Chamar borracheiro senão desparafusar a roda ser levantar maiso detalhada carro remover a roda colocar o estepe abaixar o carro fim se Fim 2.4 - Pseudo código A atividade de desparafusar a roda pode A atividade de parafusar a roda pode ser mais parafusar detalhada a roda Algoritmos 21
2.4 - Pseudo código ESTRUTURA SEQUENCIAL Início se <o estepe está vazio> então chamar borracheiro senão desparafusar o 1 o parafuso desparafusar o 2 o parafuso desparafusar o 3 o parafuso desparafusar o 4 o parafuso levantar o carro remover a roda colocar o estepe abaixar o carro parafusar o 1 o parafuso parafusar o 2 o parafuso parafusar o 3 o parafuso parafusar o 4 o parafuso fim se Fim Esta repetição é inconveniente Esta repetição é inconveniente Algoritmos 22
2.4 - Pseudo código ESTRUTURA DE REPETIÇÃO Início se <o estepe está vazio> então chamar borracheiro senão enquanto houver parafuso para desapertar faça desparafusar a roda fim enquanto levantar o carro remover a roda colocar o estepe abaixar o carro enquanto houver parafuso para apertar faça parafusar a roda fim do enquanto fim se Algoritmos Fim 23
2.4 - Pseudo código EX 2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO Início pegue a lâmpada nova remova a lâmpada queimada coloque a lâmpada nova Fim Algoritmos 24
2.4 - Pseudo código EX 2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO Início pegue a lâmpada nova remova a lâmpada queimada coloque a lâmpada nova Fim E se não tiver lâmpada nova? Algoritmos 25
2.4 - Pseudo código EX 2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO Início se <tiver lâmpada nova da mesma potência> então pegue a lâmpada nova remova a lâmpada queimada coloque a lâmpada nova senão <anotar na agenda para comprar lâmpada> fim se Fim 26 Algoritmos 26
2.4 - Pseudo código EX 2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO Início se <tiver lâmpada nova da mesma potência> então pegue a lâmpada nova remova a lâmpada queimada coloque a lâmpada nova senão queimada? <anotar na agenda para comprar lâmpada> fim se Fim O que é necessário para remover a lâmpada 27 Algoritmos 27
2.4 - Pseudo código EX 2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até que se solte Algoritmos 28
2.4 - Pseudo código EX 2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO Início se <tiver lâmpada nova da mesma potência> então pegue a lâmpada nova remova a lâmpada queimada coloque a lâmpada nova senão <anotar na agenda para comprar lâmpada> fim se Fim 29 Algoritmos 29
2.4 - Pseudo código EX 2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO Início se <tiver lâmpada nova da mesma potência> então pegue a lâmpada nova O remova que é necessário a lâmpada queimada para colocar a lâmpada nova? coloque a lâmpada nova senão <anotar na agenda para comprar lâmpada> fim se Fim 30 Algoritmos 30
2.4 - Pseudo código EX 2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada Algoritmos 31
Início se <tiver lâmpada da mesma potência> então pegue a lâmpada posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até que se solte remova a lâmpada queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada senão <anotar na agenda para comprar lâmpada> fim se Fim 2.4 - Pseudo código EX2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO Algoritmos 32 32
EX2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO Início se <tiver lâmpada da mesma potência> então pegue a lâmpada posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até que se solte remova a lâmpada queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada senão <anotar na agenda para comprar lâmpada> fim se Fim 2.4 - Pseudo código Diversos passos deste algoritmo implicam em operações mais elaboradas que devem ser expressas explicitamente Algoritmos 33 33
Início se <tiver lâmpada da mesma potência> então pegue a lâmpada posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até que se solte remova a lâmpada queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada senão <anotar na agenda para comprar lâmpada> fim se Fim 2.4 - Pseudo código EX2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO enquanto <não alcançar a lâmpada> faça suba um degrau da escada fim enquanto Algoritmos 34 34
Início se <tiver lâmpada da mesma potência> então pegue a lâmpada posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até que se solte remova a lâmpada queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada senão <anotar na agenda para comprar lâmpada> fim se Fim 2.4 - Pseudo código EX2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO enquanto <a lâmpada não soltar> faça gire a lâmpada no sentido anti-horário fim enquanto Algoritmos 35 35
Início se <tiver lâmpada da mesma potência> então pegue a lâmpada posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até que se solte remova a lâmpada queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada senão <anotar na agenda para comprar lâmpada> fim se Fim 2.4 - Pseudo código EX2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO enquanto <a lâmpada não prender> faça gire a lâmpada no sentido horário fim enquanto Algoritmos 36 36
2.4 - Pseudo código EX2. ALGORITMO PARA TROCAR UMA LÂMPADA NO TETO Início se <tiver lâmpada da mesma potência> então selecione a lâmpada posicione a escada debaixo da lâmpada queimada enquanto <não alcançar a lâmpada> faça suba um degrau da escada fim enquanto enquanto <a lâmpada não soltar> faça gire a lâmpada no sentido anti-horário fim enquanto remova a lâmpada queimada posicione a nova lâmpada no soquete enquanto <a lâmpada não prender> faça gire a lâmpada no sentido horário fim enquanto desça da escada senão <anotar na agenda para comprar lâmpada> fim se Fim Algoritmos 37 37
2 - Algoritmo 2.5 - Desenvolvimento do Algoritmo Começamos com uma afirmação genérica da solução do problema e prosseguimos até o algoritmo final, aumentando sistematicamente o nível de detalhamento. Como saber se já temos um nível suficiente de detalhes no algoritmo? Algoritmos 38
2.5 - Desenvolvimento do Algoritmo Isso depende do agente que irá executar o algoritmo Os computadores têm um conjunto muito limitado de instruções e o algoritmo deve ser expresso nos termos dessas instruções. Algoritmos 39
2.5.1 Metodologia de Desenvolvimento de Algoritmos Como o cliente explicou Como o chefe do projeto entendeu Como o desenhista desenhou Como o programador fez Como o vendedor o 40 descreveu Algoritmos 40
2.5.1 Metodologia de Desenvolvimento de Algoritmos Como o projeto foi documentado Como as operações foram feitas Pelo o que o cliente pagou Algoritmos 41 Como foi dado suporte O que o cliente realmente precisava 41
2.5 - Desenvolvimento do Algoritmo 2.5.1 Metodologia de Desenvolvimento de Algoritmos Passo 1:ler cuidadosamente a especificação do problema até o final. Passo 2: se depois de ler várias vezes, ainda não entender o problema, pergunte ao professor até entender. Passo 3: levantar e analisar todas as saídas exigidas na especificação do problema. Passo 4: levantar e analisar todas as entradas citadas na especificação do problema. Algoritmos 42
2.5 - Desenvolvimento do Algoritmo Passo 5: verificar se é necessário gerar valores internamente ao algoritmo e levantar as variáveis necessárias e os valores iniciais de cada uma. Passo 6: levantar e analisar todas as transformações necessárias para, dadas as entradas e valores gerados internamente, produzir as saídas especificadas. Algoritmos 43
2.5 - Desenvolvimento do Algoritmo Passo 7: testar cada passo do algoritmo, verificando se as transformações intermediárias executadas estão conduzindo aos objetivos desejados. Utilizar, sempre que possível, valores de teste que permitam prever os resultados. Passo 8: fazer uma reavaliação geral, elaborando o algoritmo através da integração das partes. Algoritmos 44
2.6 - Algoritmos Numéricos Agora, vamos considerar problemas envolvendo cálculos numéricos EX 1: Dados vários cartões numerados escolha o que tem maior número. Algoritmo: maior_numero Início pegue um cartão e guarde. repita pegue um cartão se o número deste for > que o do cartão guardado então guarde este cartão e descarte o anterior senão descarte esse e conserve o anterior até que se acabem os cartões mostre o cartão guardado Fim Algoritmos 45 45
2.6 Algoritmos Numéricos Ex2: Verificar se um número N1 é divisível por N2 Algoritmo: divisivel Início {algoritmo} pegue os números N1 e N2 se N1 < N2 então escreva não é divisível senão divida N1 por N2 e pegue a parte inteira da divisão {INT (N1/N2)} faça Resto N1 ( N2*INT(N1/N2)) se Resto 0 então escreva não é divisível senão escreva é divisível fim se Algoritmos 46 Fim {algoritmo}
2. ALGORITMOS FIM Aula 2 Referências dos slides Curso de Programação de Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Algoritmos 47 Prof. Décio Mourão Prof. Galeno Sena