Semana 7 -24.03.2014 1 Algoritmos Definio: uma seqncia de passos (aces) que devem ser executados para se alcanar um determinado objectivo. Um algoritmo pode ser comparado como uma receita culinria. Se obedecermos passo a passo as instrues da receita, chegamos sempre ao mesmo resultado. 2 Os algoritmos que devem expressar de forma objetiva e clara (legibilidade) a forma de resolvermos o problema. Do algoritmo desenvolvido fica fcil construir o programa, basta conhecer a linguagem de programao que se pretende adotar. Um mesmo algoritmo, pode ser transportado para qualquer linguagem de programao, dando uma flexibilidade para a efetiva implementao do programa. 3 Existem trs estruturas bsicas para a construo de algoritmos: sequenciao, seleo e repetio. A combinao das 3estruturas permite a construo de algoritmos para a resoluo de problemas extremamente complexos. A programao estruturada se baseia nestas trs estruturas bsicas. 4 Para a situao onde precisamos elaborar um algoritmo para trocar uma lmpada, Incio - pegue uma escada; - coloque-a embaixo da lmpada; - busque uma lmpada nova; - suba na escada com a lmpada nova; - retire a lmpada velha; - coloque a lmpada nova; - desa da escada. Fim Trata-se de um algoritmo bastante simples, que utiliza apenas a estrutura de sequenciao, ou seja, nenhuma seleco ou repetio de procedimentos aparece no algoritmo. Uma estrutura de seqncia, caracteriza-se por possuir uma nica seqncia de aes, que executada apenas uma vez. 5 No entanto, antes de trocarmos a lmpada devemos nos certificar de que ela realmente esteja queimada, para ento troc-la. Assim, podemos melhorar o nosso algoritmo. Incio - ligue o interruptor; - se a lmpada no acender, ento: - pegue uma escada; - coloque-a embaixo da lmpada; - busque uma lmpada nova; - suba na escada com a lmpada nova; - retire a lmpada velha; - coloque a lmpada nova; - desa da escada. Fim 6 O nosso algoritmo, alm da estrutura de seqncia, passa a utilizar uma estrutura de seleo. Na estrutura de seleo, uma condio deve ser analisada, a partir do resultado da anlise, um caminho do algoritmo ser executado. Em outras palavras, uma estrutura de seleo seleciona aes a serem executadas a partir de uma condio (que pode ser simples ou composta). 7 Embora nosso algoritmo tenha melhorado, ainda podemos deix-lo mais completo. Quando verificamos que a lmpada est queimada, subimos para troc-la, mas no consideramos a hiptese da lmpada nova de tambm esta, estar queimada, e se isso ocorrer, precisaremos executar algumas aes novamente, at que possamos efetivamente resolver nosso problema. 8 Incio - ligue o interruptor; - se a lmpada no acender, ento: - pegue uma escada; - coloque-a embaixo da lmpada; - enquanto a lmpada no acender, faa: - busque uma lmpada nova; - suba na escada com a lmpada nova; - retire a lmpada velha; - coloque a lmpada nova; - desa da escada. Fim Neste algoritmo somente iremos parar de trocar a lmpada quando colocarmos uma lmpada que acenda. Portanto, um conjunto de aes ser executado repetidamente enquanto a condio de repetio for verdadeira. Assim, inserimos uma estrutura de repetio no nosso algoritmo, que passa a trabalhar com as trs estruturas bsicas de construo de algoritmos. 9 importante salientar que existem vrias formas de se construir um algoritmo, pois as pessoas pensam de formas diferentes, no entanto, devemos sempre buscar a forma mais otimizada possvel (dentro dos limites impostos pela situao). 10 Formas de Representao de Algoritmo. Existem vrias ferramentas que podem ser utilizadas para a representao de algoritmos, entre elas: linguagem natural, pseudocdigo, diagrama de Nassi-Shneiderman (ou Chapin), fluxograma etc.. Estas ferramentas procuram padronizar formas de representao, facilitando a posterior transformao do algoritmo para um conjunto de cdigos . 11 Linguagem Natural Esta a forma mais espontnea de representao de algoritmos, pois descrevemos os passos do algoritmo utilizando a linguagem quotidiana, escrevendo o algoritmo como um texto simples. Por exemplo, queremos resolver o seguinte problema: Calcular a mdia de todos os alunos de uma disciplina X, a partir da leitura das notas da 1a e 2a prova, passando por um clculo de mdia aritmtica. Aps a mdia calculada, devemos anunciar se aluno foi aprovado ou reprovado por nota. Somente esto aprovados alunos com mdia maior ou igual a 10,0. 12 Representao do algoritmo em linguagem natural: Para todos os alunos da disciplina X, faa: ler as notas da 1a e 2a prova, somar as notas e dividir por dois, chegando assim, ao resultado da mdia do aluno. Se a mdia do aluno for maior ou igual a 10,0, ento o aluno est aprovado, seno o aluno est reprovado. Fazer o mesmo para o prximo aluno. 13 O problema da representao de algoritmos com linguagem natural que quanto maior a complexidade do problema maior a dificuldade de entendermos o texto que procura descrever os passos do algoritmo. 14 Pseudocdigo O pseudocdigo vem sendo amplamente utilizado por projectistas de software e programadores, pois obriga o uso de estruturas que facilitam o entendimento do algoritmo, e tambm facilitam a transformao do mesmo em cdigos reais. O pseudocdigo tambm recebe outros nomes, como: portugus estruturado, PDL (Program Design Language), pascalide etc.. 15 Incio real: nota1, nota2, media; Enquanto no for fim da lista de alunos, faa Incio Leia nota1; Leia nota2; mdia = (nota1 + nota2) / 2; Se mdia >= 10,0 ento Incio Escreva Aluno aprovado; Fim Seno Incio Escreva Aluno reprovado; Fim Fim Fim 16 No pseudocdigo, de forma a estruturar e organizar melhor os passos do algoritmo, somos obrigados a utilizar as estruturas bsicas de controle seqncia, seleo e, Repetio 17 17 Diagrama de Nassi-Shneiderman Tambm conhecido como diagrama Chapin. Oferece grande clareza para representao das estruturas (sequenciao, seleo e, repetio) utilizando-se de uma simbologia prpria. Aidia bsica : representar as aces de um algoritmo dentro de um nico retngulo, subdividindo-o em retngulos menores, Representando diferentes blocos de sequncia de aces . 18 19 Exemplo 20 Embora os diagramas N-S ofeream uma representao muito clara do algoritmo, medida que os algoritmos vo se tornando mais complexos, fica difcil realizar os desenhos necessrios numa nica pgina, prejudicando a sua visualizao. 21 Fluxograma O fluxograma foi utilizado por muito tempo para a representao de algoritmos. O fluxograma utiliza smbolos especficos para a representao de algoritmos. Existe uma certa variao na simbologia empregada. 22 23 24 Estruturas de controle Servem para direccionar o fluxo de execucao do Algoritmo Permite representar a complexidade dos cenrios do dia a dia. 25 Estruturas de controle Oferece grande clareza para representao da: sequenciao, seleo e, Repetio 26 Estruturas de controle Sequenciao: As aes so executadas, uma por vez, de forma encadeada, na ordem definida no programa. Ex: 27 Estruturas de controle Seleo: a partir da verificao de uma condio, o programa realiza ou no uma ao e volta sequncia do programa. Ex: 28 Estruturas de controle Seleo Exemplo: 29 Estruturas de controle Reptio Exemplo: Devem ser sempre n inteiros 30 Exerccios de Raciocnio para algoritmos usando: linguagem natural pseudocodigos diagrmas de nassi Fluxograma 1) Um homem precisa atravessar um rio com um barco que possui capacidade de transportar apenas ele e mais uma de suas trs cargas, que so: um cachorro, uma galinha e um saco de milho. O que o homem deve fazer para conseguir atravessar o rio sem perder as suas cargas ? 31 2) Uma Torre de Hani formada por trs discos sobrepostos transpassados por uma haste. Tendo mais duas hastes e podendo mover um disco por vez, mas nunca deixando um disco maior sobre um disco menor, como podemos passar os discos para uma outra haste ? 3) Trs jesutas e trs canibais precisam atravessar um rio, no entanto dispem apenas de um barco com capacidade para duas pessoas. Por medida de segurana no se permite que em alguma das margens do rio a quantidade de jesutas seja inferior quantidade de canibais. Qual a seqncia de viagens necessrias para a travessia do rio com segurana para os jesutas ? 32