• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Cap03
 

Cap03

on

  • 816 views

 

Statistics

Views

Total Views
816
Views on SlideShare
816
Embed Views
0

Actions

Likes
0
Downloads
9
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Cap03 Cap03 Document Transcript

    • Capítulo 3ALGORITMOS O uso de algoritmos é quase tão antigo quanto a matemática. Com o passar do tempo,entretanto, ele foi bastante esquecido pela matemática. Com o advento das máquinas de calculare mais tarde os computadores, o uso de algoritmos ressurgiu com grande vigor, como uma formade indicar o caminho para a solução dos mais variados problemas. Algoritmo não é a solução do problema, pois, se assim fosse, cada problema teria um únicoalgoritmo. Algoritmo é o caminho para a solução de um problema, e em geral, os caminhos quelevam a uma solução são muitos. Ao longo dos anos surgiram muitas formas de representar os algoritmos, alguns utilizandolinguagens semelhantes às linguagens deprogramação e outras utilizando formasgráficas. O aprendizado de algoritmos nãose consegue a não ser através de muitosexercícios.1. CONCEITO DE ALGORITMO A automação é o processo em que uma tarefa deixa de ser desempenhada pelo homem epassa a ser realizada por máquinas, sejam estas dispositivos mecânicos (como as máquinasindustriais), eletrônicos (como os computadores), ou de natureza mista (como os robôs). Para que a automação de uma tarefa seja bem-sucedida é necessário que a máquina quepassará a realizá-la seja capaz de desempenhar cada uma das etapas constituintes do processo aser automatizado com eficiência, de modo a garantir a repetibilidade do mesmo. Assim, énecessário que seja especificado com clareza e exatidão o que deve ser realizado em cada uma dasfases do processo a ser automatizado, bem como a seqüência em que estas fases devem serrealizadas. À especificação da seqüência ordenada de passos que deve ser seguida para a realização deuma tarefa, garantindo a sua repetibilidade, dá-se o nome de algoritmo. Embora esta definição de algoritmo seja correta, podemos definir algoritmo, de maneirainformal e completa como: Informalmente, um algoritmo é qualquer procedimento computacional bem definido quetoma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto devalores como saída.
    • Um algoritmo deve sempre possuir pelo menos um resultado, normalmente chamado desaída, e satisfazer a propriedade da efetividade, isto é, todas as operações especificadas noalgoritmo devem ser suficientemente básicas para que possam ser executadas de maneira exata enum tempo finito. Na prática não é importante ter-se apenas um algoritmo, mas sim, um bom algoritmo. Omais importante de um algoritmo é a sua correção, isto é, se ele resolve realmente o problemaproposto e o faz exatamente. Para se ter um algoritmo, é necessário:  Que se tenha um número finito de passos  Que cada passo esteja precisamente definido, sem possíveis ambigüidades  Que existam zero ou mais entradas tomadas de conjuntos bem definidos  Que existam uma ou mais saídas  Que exista uma condição de fim sempre atingida para quaisquer entradas e num tempo finito. Para que um computador possa desempenhar uma tarefa é necessário que esta sejadetalhada passo a passo, numa forma compreensível pela máquina, utilizando aquilo que sechama de programa. Neste sentido, um programa de computador nada mais é que um algoritmoescrito numa forma compreensível pelo computador.2. FORMAS DE REPRESENTAÇÃO DE ALGORITMOS Existem diversas formas de representação de algoritmos, mas não há um consenso comrelação à melhor delas. Algumas formas de representação de algoritmos tratam dos problemas apenas em nívellógico, abstraindo-se de detalhes de implementação muitas vezes relacionados com algumalinguagem de programação específica. Por outro lado, existem formas de representação dealgoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer aidéia principal, o algoritmo, dificultando seu entendimento. Dentre as formas de representação de algoritmos mais conhecidas, sobressaltam:  a Descrição Narrativa  o Fluxograma Convencional  o Diagrama de Chapin  o Pseudocódigo, também conhecido como Linguagem Estruturada ou Portugol2.1. DESCRIÇÃO NARRATIVA Nesta forma de representação, os algoritmos são expressos diretamente em linguagemnatural. Como por exemplo, têm-se os algoritmos seguintes: Troca de um pneu furado:  Afrouxar ligeiramente as porcas  Suspender o carro  Retirar as porcas e o pneu
    •  Colocar o pneu reserva  Apertar as porcas  Abaixar o carro  Dar o aperto final nas porcas Cálculo da média de um aluno:  Obter as notas da primeira e da segunda prova  Calcular a média aritmética entre as duas  Se a média for maior ou igual a sete, o aluno foi aprovado, senão ele foi reprovado Esta representação é pouco usada na prática porque o uso de linguagem natural muitasvezes dá oportunidade a más interpretações, ambigüidades e imprecisões. Por exemplo, a instrução “afrouxar ligeiramente as porcas” no algoritmo da troca de pneusestá sujeita a interpretações diferentes por pessoas distintas. Uma instrução mais precisa seria:“afrouxar a porca, girando-a de 30º no sentido anti-horário”.2.2. FLUXOGRAMA CONVENCIONAL OU DIAGRAMA DE BLOCOS É uma representação gráfica de algoritmos onde formas geométricas diferentes implicamações (instruções, comandos) distintas. Tal propriedade facilita o entendimento das idéiascontidas nos algoritmos. Nota-se que os fluxogramas convencionais preocupam-se com detalhes de nível físico daimplementação do algoritmo. Por exemplo, figuras geométricas diferentes são adotadas pararepresentar operações de saída de dados realizadas em dispositivos distintos, como uma unidadede armazenamento de dados ou um monitor de vídeo. A figura abaixo mostra as principais formasgeométricas usadas em fluxogramas. Início e final do fluxograma Decisão Operação de entrada de dados Seta de Fluxo de Dados Conector utilizado quando é preciso Operação de saída de dados em particionar o diagrama, colocando impressora uma letra ou número no símbolo para identificar os pares da conexão Operação de saída de dados em Conector específico para indicar vídeo conexão do fluxo de execução em outra página Operações de atribuição e Preparação – operações que utilizam chamada ou retorno de uma chave que modifica a execução subalgoritmo do programaPrincipais formas geométricas usadas em fluxogramas
    • De modo geral, o fluxograma se resume a um único símbolo inicial, por onde a execução doalgoritmo começa, e um ou mais símbolos finais, que são pontos onde a execução do algoritmo seencerra. Partindo do símbolo inicial, há sempre um único caminho orientado a ser seguido,representando a existência de uma única seqüência de execução das instruções. Isto pode sermais bem visualizado pelo fato de que, apesar de vários caminhos poderem convergir para umamesma figura do diagrama, há sempre um único caminho saindo desta. Exceções a esta regra sãoos símbolos finais, dos quais não há nenhum fluxo saindo, e os símbolos de decisão, de onde podehaver mais de um caminho de saída (normalmente dois caminhos), representando uma bifurcaçãono fluxo. Um diagrama de blocos é uma forma de fluxograma usada e desenvolvida por profissionaisda programação, tendo como objetivo descrever o método e a seqüência do processo dos planosnum computador. Pode ser desenvolvido em qualquer nível de detalhe que seja necessário.Quando se desenvolve um diagrama para o programa principal, por exemplo, seu nível dedetalhamento pode chegar até as instruções. Esta ferramenta usa diversos símbolos geométricos,os quais estabelecerão as seqüências de operações a serem efetuadas em um processamentocomputacional. Após a elaboração do diagrama de bloco, é realizada a codificação do programa. A figura a seguir mostra a representação do algoritmo de cálculo da média de um aluno soba forma de um fluxograma.2.3. DIAGRAMA DE CHAPIN O diagrama foi criado por Ned Chapin a partir de trabalhos de Nassi-Shneiderman, os quaisresolveram substituir o fluxograma tradicional por um diagrama que apresenta uma visãohierárquica e estruturada da lógica do programa. A grande vantagem de usar este tipo dediagrama é a representação das estruturas que tem um ponto de entrada e um ponto de saída esão compostas pelas estruturas básicas de controle de seqüência, seleção e repartição. Enquantoé difícil mostrar o embutimento e a recursividade com o fluxograma tradicional, torna-se maissimples mostrá-lo com o diagrama de Chapin, bem como codificá-lo futuramente na conversão decódigo português estruturado ou pseudocódigos. A figura abaixo apresenta um exemplo do tipode diagrama de Chapin para o algoritmo de cálculo da média de um aluno.
    • 2.4. PSEUDOCÓDIGO Esta forma de representação de algoritmos, também conhecida como portuguêsestruturado ou portugol, é bastante rica em detalhes e, por assemelhar-se bastante à forma emque os programas são escritos. Ela encontra muita aceitação, sendo, portanto a forma derepresentação de algoritmos que utilizaremos nesta disciplina. Na verdade, esta representação é suficientemente geral para permitir que a tradução deum algoritmo nela representado para uma linguagem de programação específica sejapraticamente direta.Representação de Um Algoritmo na Forma de Pseudocódigo A representação de um algoritmo na forma de pseudocódigo é a seguinte:algoritmo <nome_do_algoritmo><declaração_de_variáveis><subalgoritmos>inicio <corpo_do_algoritmo>fim. onde:  Algoritmo é uma palavra que indica o início da definição de um algoritmo em forma de pseudocódigo.  <nome_do_algoritmo> é um nome simbólico dado ao algoritmo com a finalidade de distingui-lo dos demais.  <declaração_de_variáveis> consiste em uma porção opcional onde são declaradas as variáveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos.  <subalgoritmos> consiste de uma porção opcional do pseudocódigo onde são definidos os subalgoritmos.  Início e Fim são respectivamente as palavras que delimitam o início e o término do conjunto de instruções do corpo do algoritmo. Como exemplo, a seguir é mostrado a representação do algoritmo de cálculo da média deum aluno na forma de um pseudocódigo.
    • algoritmo media_alunovar N1, N2, mediainicio leia N1, N2 media <- (N1+N2)/2 se media >= 7 entao escreva “Aprovado” senao escreva “Reprovado”fim3. UM AMBIENTE PARA DESCREVER ALGORITMOS Descreveremos uma máquina hipotética para a qual escreveremos nossos algoritmos. Onosso computador hipotético apresentará a seguinte organização: Cada uma das partes constituintes da figura acima tem os seguintes significados: (1) Dispositivo de entrada (o teclado): meio pelo qual os dados que serão trabalhados pelo algoritmo vão ser introduzidos em nosso computador hipotético; (2) Unidade Lógica e Aritmética (ULA): parte responsável pelas operações matemáticas e avaliações lógicas; (3) Unidade de Controle: exerce controle sobre as demais partes do nosso computador. É uma verdadeira gerente que distribui tarefas às outras unidades; (4) Memória: guarda o algoritmo a ser executado e os dados a serem utilizados pelo mesmo. Todo dado fornecido ao computador e o resultado de suas operações ficam guardados na memória; (5) Dispositivo de Saída (vídeo e impressora): meio que se dispõe para apresentação dos resultados obtidos.
    • 3.1. FUNCIONAMENTO DO NOSSO COMPUTADOR Todos os computadores, independentemente dos seus tamanhos, são conceitualmentesemelhantes ao esquema da figura anterior (há algumas diferenças, mas não trataremos aqui doscasos especiais). Resumidamente, podemos afirmar que existem 4 (quatro) operações básicas que qualquercomputador pode executar: a) operações de entrada e saída: ler dados do teclado e escrever dados na tela são exemplos destas operações. Elas servem para introduzir dados na memória do nosso computador e exibir dados que já estejam lá armazenados; b) operações aritméticas: são utilizadas na realização de operações matemáticas (adição, subtração, multiplicação e divisão); c) operações lógicas e relacionais: têm aplicabilidade em comparações, testes de condições lógicas (2>6 ? X=Y ?); d) movimentação de dados entre os vários componentes: as operações aritméticas são executadas na Unidade Lógica e Aritmética, necessitando da transferência dos dados para essa unidade e da volta do resultado final para ser guardado na memória.3.2. RESOLVENDO UM PROBLEMA Suponha que queiramos resolver o seguinte problema: a partir de dois números que serãoinformados, calcular a adição dos mesmos. Se você fosse encarregado de efetuar essa tarefa, seriabem provável que utilizasse os passos a seguir: a) saber quais são os números; b) calcular a soma dos números; c) responder à questão com o valor do resultado. Vejamos como seria resolvido esse mesmo problema em termos das operações básicascitadas anteriormente: a) operação de entrada de dados dos números ; b1) movimento do valor dos números entre a memória e a ULA; b2) operação aritmética de somar os 2 números; b3) movimentação do resultado da ULA para guardar na memória; c) operação de saída do resultado, que está guardado na memória, para o dispositivo de saída desejado. Deve-se salientar que os passos b1 e b3, normalmente, ficam embutidos na operaçãomatemática, não sendo explicitados. Em resumo, pode-se dizer que escrever algoritmos ou, em última análise, programarconsiste em dividir qualquer problema em muitos pequenos passos, usando uma ou mais dasquatro operações básicas citadas. Esses passos que compõem o algoritmo são denominados de comandos. Os comandos deuma linguagem de programação podem estar mais próximos da máquina (linguagens de baixonível) ou serem mais facilmente entendidos pelo homem (linguagens de alto nível). A seqüência de
    • operações básicas, dada anteriormente, para resolver o problema de adicionar dois números, estáem uma linguagem de baixo nível para o nosso computador hipotético. Em uma linguagem de altonível teríamos um resultado assim:Leia X,YSOMA X + YEscreva SOMAEXERCÍCIOS PROPOSTOSQuestão 01:Crie uma seqüência lógica para tomar banho. Construa um fluxograma para seu algoritmo.Questão 02:Faça um algoritmo para somar dois números e multiplicar o resultado pelo primeiro número.Construa um fluxograma para seu algoritmo.Questão 01:Faça um algoritmo para trocar uma lâmpada. Descreva com detalhes. Construa um fluxogramapara seu algoritmo.