Você está na página 1de 3

O Conceito de Algoritmo

Programar basicamente Construir Algoritmos. A programao estruturada a arte ou tcnica de construir e formular algoritmos de forma sistemtica. [Niklaus Wirth] Segundo Wirth, programas so formulaes concretas de algoritmos abstratos, baseados em representaes e estruturas especficas de dados. Decises sobre a estruturao dos dados no podem ser feitas sem conhecimento dos algoritmos aplicados a eles e vice-versa: a estrutura e a escolha dos algoritmos depende muitas vezes, fortemente, da estrutura dos dados. Num algoritmo e em particular num programa, devemos distinguir claramente dois aspectos complementares: Aspecto Esttico: A formulao de um algoritmo consiste em um texto contendo comandos que devem ser executados na ordem prescrita. Este texto uma representao concreta do algoritmo e tem um carter esttico. Aspecto Dinmico: Cada execuo de um algoritmo um evento dinmico. Os efeitos atingidos (gerados) por sua execuo no tempo, dado um conjunto de valores iniciais, so o resultado do evento dinmico. Uma Ao um evento que ocorre num perodo de tempo finito, estabelecendo um efeito intencionado e bem definido. Exemplos: - Ligar a TV - Descascar uma laranja - Escrever no quadro - Caminhar at a sala de aula No nos interessam aqui aes de efeito imprevisvel. fundamental que a ao seja executada num perodo de tempo finito (incio no instante t0e fim no instante t1). Quando consideramos um evento como uma seqncia temporal de aes, cujo efeito acumulado igual ao efeito do evento total, falamos de um Processo Seqencial, ou apenas de um Processo. Um evento pode ser considerado como uma ao primitiva (comando) ou como um processo (um algoritmo), dependendo do nosso interesse, se ns estamos interessados no evento total (estados inicial e final) ou em um ou vrios estados intermedirios. Descreveremos ento um evento na forma de um relato de um observador. O evento total ler o jornal, poderia ser escrito por uma sucesso dos seguintes eventos intermedirios por parte do agente (quem executa o evento total): - Abrir a porta; - Apanhar o jornal no cho; - Entrar em casa; - Fechar a porta; - Sentar no sof; - Ler os assuntos de interesse. Observemos que existe um smbolo de seqenciamento (;) indicando que as aes devem ocorrer na mesma ordem em que aparecem. Exemplo: Qual o Padro de Comportamento (seqncia de aes) utilizado para gerar a seqncia1,4,7,10,13,16,19,22? Definio de Algoritmo Um algoritmo a descrio de um padro de comportamento, expressado em termos de um repertrio bem definido e finito de aes primitivas, as quais damos por certo que podem ser executadas. [Guimares/Lages.] Um algoritmo tem um carter imperativo no qual a ocorrncia do nome de uma ao tambm chamada de comando. Em outras palavras, um algoritmo uma norma executvel para atingir um certo efeito desejado (obter uma soluo para certo tipo de problema). Exemplos de algoritmos (na vida prtica): - Manuais de uso - Instrues de montagem - Receitas de cozinha - Informaes de como chegar a um lugar

Um algoritmo DEVE ser determinstico, ou seja, dadas as mesmas condies iniciais deve produzir, depois de executado, os mesmos resultados. Principais Conectivos ou Tipos de Comandos Para exemplificar os tipos de comandos utilizados nos algoritmos e basicamente em toda linguagem de programao, analisemos um algoritmo usado por um cozinheiro para descascar batatas para o jantar: 1) Seqncia Simples de Comandos: Trazer a cesta de batatas da despensa; Trazer a panela do armrio; Descascar batatas; Devolver a cesta despensa. E se algumas vezes ele colocar um avental aps buscar a panela e antes de descascar as batatas ? 2) Insero de Comandos: Trazer a cesta de batatas da despensa; Trazer a panela do armrio; Colocar o avental; Descascar batatas; Devolver a cesta despensa. E se a colocao do avental s ocorrer quando o cozinheiro estiver de roupa branca? 3) Conectivo Condicional: Trazer a cesta de batatas da despensa; Trazer a panela do armrio; SE roupa branca ENTO Colocar o avental; Descascar batatas; Devolver a cesta despensa. A execuo da ao colocar avental depende, em cada vez que o algoritmo executado, do resultado (verdadeiro ou falso) da inspeo se a roupa branca. E se em um dia o cozinheiro tiver que descascar 10 quantidades batatas? 4) Conectivo Repetitivo: Trazer a cesta de batatas da despensa; Trazer a panela do armrio; SE roupa branca ENTO Colocar o avental; 10 Descascar batatas; Devolver a cesta despensa. Podemos ver ainda que, desta forma, difcil sabermos determinar se o nmero de batatasescolhido (n de repeties de Descascar...) foi suficiente para o jantar. Precisamos ento introduzir outro tipo de comando: 5) Conectivo Repetitivo Condicional: Trazer a cesta de batatas da despensa; Trazer a panela do armrio; SE roupa branca ENTO Colocar o avental ENQUANTO nmero de batatas insuficiente FAA Descascar batatas Devolver a cesta despensa. Com isto vemos o poder do conceito de algoritmo. Um texto esttico, capaz de cobrir toda uma classe de acontecimentos, escrito no mesmo nvel de detalhes do relato de um observador. Programas e Estruturas de Dados O computador uma mquina capaz de seguir uma certa espcie de algoritmos chamados Programas. Possui uma memria para armazenar dados e uma unidade aritmtica capaz de causar mudanas nos dados armazenados na memria. Os computadores s entendem os algoritmos escritos em linguagem de mquina (de leitura difcil para ns). Para podermos fazer com que o computador entenda uma linguagem prxima da linguagem natural, utilizaremos programas chamados Compiladores.

Compiladores so programas que traduzem os algoritmos escritos em uma linguagem de programao para a linguagem de mquina, alm de verificar a corretude dos programas escritos. Uma Linguagem de Programao uma tcnica de notao para programar, com a inteno de: - Expressar raciocnio algortmico; - Permitir a execuo de um algoritmo por um computador. Programao Estruturada Consiste em uma Metodologia de Projeto de Programao, visando: - Facilitar a escrita dos programas; - Facilitar a leitura (entendimento) dos programas; - Facilitar a verificao a priori dos programas; - Facilitar a manuteno e modificao dos programas. Maior problema em grandes sistemas de software: Complexidade dos Sistemas A Complexidade de um Sistema pode ser vista com uma medida do nmero dos seus componentes e do grau de interao entre eles. A Arte de programar consiste na arte de organizar e dominar a complexidade. [Dijkstra] A idia bsica da Programao Estruturada reduzir a complexidade em trs nveis: I) Desenvolvimento do programa em diferentes fases por Refinamento Sucessivo (Desenvolvimento Top-Down); II) Decomposio do programa total em Mdulos Funcionais, organizados de preferencia num Sistema Hierrquico; III) Uso, dentro de cada mdulo, de um nmero limitado de Estruturas Bsicas de Fluxo de Controle. Principais Caractersticas da Programao Estruturada Desenvolvimento Top-Down Processo de raciocnio que leva de uma anlise do problema dado, passando por um algoritmo simples at um algoritmo detalhado, que consiste em uma seqncia de passos simples que podem ser diretamente expre ssos em termos de comandos, numa linguagem de programao. Cada nova fase desse desenvolvimento de cima para baixo obtida por refinamento da fase anterior, at chegar a um nvel de detalhamento que permita implementar o algoritmo diretamente na linguagem de programao. Algoritmo simples -> Refinamentos -> Algoritmo Detalhado -> Refinamentos -> Programa Modularizao Durante a fase de projeto descrita acima, a soluo do problema total vai sendo fatorada em solues e subproblemas, o que permite geralmente dividir o programa de forma natural em mdulos com subfunces claramente delimitadas, que podem ser implementados separadamente por diversos programadores de uma equipe. Estruturas de Controle Deve-se usar, tanto quanto possvel, as estruturas bsicas de fluxo de controle (o comando condicional e os comandos repetitivos) que correspondem a formas de raciocnio simples. Documentao Na programao tradicional a documentao consiste habitualmente em Fluxograma e Comentrios (que so dispensveis execuo do programa e podem ser feitos a posteriori). A programao estruturada ataca o problema propondo mtodos de desenvolvimento que produzem simultaneamente o programa e sua documentao, ou melhor, procuram tornar cdigo e documentao aspectos indivisveis de um mesmo produto, que ficam forosamente prontos ao mesmo tempo. Fluxo de Controle O conceito que relaciona os aspectos Esttico (algoritmo no papel) e Dinmico (execuo) de uma algoritmo o fluxo de controle, que determina em cada passo da execuo qual o prximo comando a ser executado. A ordem de execuo dos comandos geralmente bem diferente da sua ordem na folha de papel. Precisamos compreender a ordem das aes que ocorrem durante a execuo, baseando-nos simplesmente na descrio esttica do texto do algoritmo. A ordem de execuo dos comandos muda, em geral, de uma execuo para outra, dependendo dos dados de entrada. Ento, devemos considerar, de fato, no somente um processo, mas toda uma classe de diferentes processos possveis que o algoritmo pode evocar. Entender um algoritmo (a sua lgica) significa compreender (visualizar) essa classe de processos de execuo. - Fonte: professor Adrian