Sei sulla pagina 1di 19

Introduo a Programao __________________________________________________________________________________________________

1- ALGORITMOS
4. 1- Introduo
A palavra algoritmo, como citada na unidade de sistemas de numerao, apresenta o mesmo radical da palavra algarismo. Embora esteja intimamente vinculada ao universo da computao estamos a todo o momento fazendo o uso constante dos algoritmos em nosso cotidiano. Podemos observar que na realizao de nossas tarefas dirias seguimos uma srie de passos, que embora em seus detalhes apresentem peculiaridades, mas no geral so constitudas de passos comuns para grande maioria das pessoas. Podemos citar alguns exemplos: Sada para um dia de trabalho; Executar uma operao em uma calculadora; Fazer caf; Tomar banho; Na verdade qualquer atividade realizada por uma pessoa pode ser descrita atravs de um conjunto de passos e a isto associamos a palavra algoritmo. Existem vrias definies formais para algoritmo, algumas associadas ao cotidiano e outras ao universo da programao: a descrio de um conjunto de comandos que, obedecidos, resultam numa sucesso finita de aes. [1] Um conjunto finito de regras que prov uma seqncia de operaes para resolver um tipo de problema especfico. KNUTH [2] Seqncia ordenada, e no ambgua, de passos que levam soluo de um dado problema TREMBLAY Embora existam diversas definies todas elas devem atender algumas consideraes bsicas para ser considerada um algoritmo: O algoritmo deve possuir um incio e fim bem definido; Todo passo ou ao tem que possuir um agente que consiga realiz-lo; Todo passo ou ao deve ser passvel de execuo em tempo finito. Estamos tratando basicamente do que vem a ser algoritmo, entretanto porque estamos falando deste assunto? Vamos observar que no s na programao, mas tambm no dia a dia os algoritmos nos apresentam uma forma organizada de estruturar a realizao de uma tarefa. Destina-se a resoluo de um problema atravs da fixao de um padro de comportamento e uma norma de execuo a serem seguidos. Vamos comear apresentando alguns exemplos: O primeiro caso trata-se da troca de um pneu furado. Embora cada pessoa apresente particularidades nas aes de troca de um pneu furado podemos assumir que todos iro executar no mnimo estes passos: 1 Levantar o carro com o macaco 2 Retirar os parafusos da roda 3 Retirar a roda 4 Colocar o pneu sobressalente 5 Recolocar os parafusos 6 Baixar o carro do macaco. Outros detalhes poderiam ser acrescidos neste algoritmo, mas os passos acima descritos do idia geral do que deve ser feito. Caso fossemos montar um algoritmo matemtico com certeza teramos que ser mais precisos ao citar cada passo dado. Embora o algoritmo anterior apresente uma seqncia de passos, representado de forma descritiva, ele tambm pode ser escrito atravs de um diagrama chamado de fluxograma.

4. 2- Fluxograma
O fluxograma conta com diversos smbolos para representar os passos ou etapas do processo. Existem diversas ferramentas grficas utilizadas na construo de fluxograma e entre elas so encontradas pequenas variaes simblicas para representao de alguns passos. A Tabela 4. 1 apresenta um conjunto bsico de smbolos que estaremos utilizando no desenvolvimento de nossos fluxogramas.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 1

Introduo a Programao __________________________________________________________________________________________________

Incio e fim do fluxograma (elipse). Ao/passo a ser realizado. Tambm possvel inserir em um nico retngulo mais de uma ao/passo (retngulo). Tomada de deciso. Neste caso s teremos duas possveis respostas Falso ou Verdadeiro (losango). Representa uma chamada a um outro algoritmo, ou seja, possvel que um algoritmo contenha outros algoritmos (retngulo com delimitadores laterais). Faz a ligao entre duas partes do algoritmo dentro de uma pgina. Evita a poluio do fluxograma com linhas ao longo do diagrama (crculo). Tambm trabalha na conexo de pontos s que utilizado para indicar uma conexo fora da pgina corrente (retngulo em formato de seta). Interliga duas figuras do fluxograma e indica o fluxo da seqncia (seta). Operaes de entrada de dados. Operaes de sada de dados.
Tabela 4. 1 Smbolos Bsicos de um Fluxograma.

conector

conector

Vamos modelar o exemplo anterior atravs do fluxograma. Passo 1: Todos os fluxogramas apresentam de forma bem clara seus pontos de incio e fim e eles so representados atravs de elipse (Figura 4. 1). A elipse indicativa de incio pode ser nomeada com a palavra Incio ou apresentar o termo que define a tarefa que ser executada pelo algoritmo (Troca de Pneu).

Figura 4. 1 - Delimitadores

Cada ao (Figura 4. 2) ou conjunto de aes (Figura 4. 3) do fluxograma representado atravs de um retngulo. Para executarmos este fluxograma basta partir de seu incio e seguir a seta que indicar sempre a nova etapa que ser executada, este procedimento deve ser seguido at que se encontre o indicativo de fim.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 2

Introduo a Programao __________________________________________________________________________________________________

Figura 4. 2 - Ao

Figura 4. 3 - Conjunto de Aes.

Este fluxograma pode no atender completamente o procedimento de troca de pneu, pois situaes no previstas podem surgir durante a troca do pneu ficando o fluxograma sem soluo. Neste caso alguns refinamentos devem ser feitos para solucionar tais situaes. Um exemplo de inconsistncia deste fluxograma poderia ser observado caso o pneu sobressalente estivesse vazio. Deveremos, desta forma, verificar antes mesmo da troca do pneu se tudo que necessitamos encontra-se presente. Para atender esta situao ser necessrio novo elemento (losango) que representa uma tomada de deciso (Figura 4. 4). Observe que caso o pneu esteja cheio o processo seguir normalmente, executando a caixa pontilha que representa todos os procedimentos para a troca de pneu. Caso o pneu esteja vazio um novo procedimento deve ser tomado para que o problema seja resolvido.

Figura 4. 4 - Tomada de Deciso.

Retornando a Figura 4. 2 podemos observar que cada retngulo apresenta uma ao que poder ser detalhada evitando assim a ocorrncia de situaes sem soluo. Vamos analisar a primeira ao: Levantar o carro com o macaco (1). A Figura 4. 5 apresenta um detalhamento das aes necessrias para fazer o levantamento do carro com o macaco. O grau de detalhamento do fluxograma tem como objetivo elucidar possveis dvidas durante a execuo da tarefa. importante ressaltar que nem sempre quem escreve o fluxograma ser responsvel pela sua codificao. Desta forma, fundamental que exista o mnimo possvel de ambigidades. Podemos observar tambm na Figura 4. 5 o segundo losango no
__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 3

Introduo a Programao __________________________________________________________________________________________________

apresenta para cada uma de suas possveis sadas a indicao de falso e verdadeiro. Isto s possvel, pois numa tomada de deciso existem apenas duas respostas. Como j indicamos a resposta verdadeira a falsa ficar subentendida.

F Tem macaco

Tem chave de roda V Afrouxar parafusos Colar macaco Levantar o carro

Chama o Borracheiro

Figura 4. 5 - Levantar o carro com o macaco.

Vamos detalhar mais uma das aes presentes no fluxograma: Retirar parafusos (2). Para detalhar esta ao vamos considerar que este fluxograma ir atender a princpio carros de passeio com quatro parafusos por roda. A primeira possibilidade de representao apresentada na Figura 4. 6. Neste caso, estamos fazendo uma abordagem bem especfica, ou seja, quatro rodas. Como ficaria caso desejssemos fazer um algoritmo mais abrangente onde o nmero de parafusos fosse um elemento varivel e no constante? Poderamos agora adotar a soluo da Figura 4. 7.

Figura 4. 6 - Retirar parafusos.

Figura 4. 7 - Estrutura de repetio.

Neste caso est sendo utilizada uma estrutura de repetio que constituda de um retngulo (ao ou conjunto de aes) e um losango (tomada de deciso). Mas s podemos utilizar tal estrutura quando na caixa de ao desejamos que uma determinada ao ou um conjunto de aes sejam executados a cada repetio do processo. Por outro lado seremos obrigados a utilizar tal estrutura quando desejamos que uma determinada ao ou um conjunto de aes sejam executados um nmero grande de vezes. No podemos criar um fluxograma, como da Figura 4. 6, onde a ao aparea repetida mais que umas cinco vezes, pois isto poluiria o fluxograma, tornando-o muito grande, e nem to pouco representar este nmero grande de repetio atravs de reticncias, que seria uma forma totalmente imprecisa. No saberamos de fato qual o nmero de repeties necessrias para que o processo seja executado corretamente. A Figura 4. 8 apresenta o fluxograma final da troca de pneu.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 4

Introduo a Programao __________________________________________________________________________________________________

Figura 4. 8 - Troca de Pneu.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 5

Introduo a Programao __________________________________________________________________________________________________

Aps a montagem do nosso primeiro fluxograma podemos observar que este modelamento no est necessariamente vinculado programao. Vamos apresentar um segundo exemplo que envolve a operao de uma linha telefnica (Figura 4. 9 e Figura 4. 10). Ambos os casos esto tratando de uma operao com uma linha telefnica. Embora no caso da Figura 4. 9 o processo seja feito de forma manual e na Figura 4. 10 seja forma automtica eles apresentam caractersticas muito parecidas. Um outro aspecto importante que ambos necessitam executar uma discagem. Para isto foi criado um procedimento conhecido como subrotina que ir detalhar como executada uma discagem. Desta forma nos dois casos poderemos fazer uso do mesmo procedimento sem que seja necessrio escrever um fluxograma para cada situao.

Figura 4. 9 - Chamada Telefnica.

Figura 4. 10 - Comunicao de dados.

O processo de discagem (Figura 4. 11) ser feito de forma independente do processo que faz a solicitao. Se desejado, a subrotina de discagem poder informar o status da operao de discagem ao processo que a chamou.

Figura 4. 11 - Discagem __________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 6

Introduo a Programao __________________________________________________________________________________________________

Um outro fato importante para destacar que neste caso o fechamento do fluxograma da discagem no mais ser identificado com a palavra fim, mas sim com o rtulo Retorno. Pois nesta situao sabemos que aps o processo de discagem o fluxograma principal continuar executando suas atividades. Quando utilizamos o recurso de subrotina estamos trabalhando no refinamento do sistema. Isto nos permitir uma maior compreenso do mesmo. Este refinamento poder se estender at o ponto em que definirmos como suficiente para a compreenso do sistema. Os sistemas na sua grande maioria sero ento constitudos de um fluxograma principal que ser responsvel pela chamada das subrotinas. Observando o fluxograma da Figura 4. 11 podemos identificar que o sistema ficar esperando o tom de discagem na linha. Caso no ocorra, o sistema ficar preso sem retornar ao procedimento que o chamou. Este um caso tpico de uma falha de projeto que levar o sistema a uma condio de anormalidade durante o processo de discagem. No universo da programao uma situao como esta denominada bug do sistema. Para resolver este caso bastaria colocar uma temporizao mxima em que o sistema permaneceria esperando um tom de discagem. Caso o tom no acontecesse dentro deste intervalo de tempo o processo de discagem sinalizaria a ocorrncia de uma falha. Este procedimento denominado timeout, ou seja, estourou o tempo de espera de sinal de linha. Como o processo de discagem apresenta mais duas possveis fontes de falhas: sem tom de discagem e destinatrio ocupado, poderamos fazer distino entre elas. Bastaria para isto criar um cdigo especfico para cada tipo de falha existente dentro do processo. Este artifcio denominado parmetro de retorno, ou seja, o procedimento principal fica sabendo o que aconteceu na subrotina e baseado nesta informao ele identificar se poder ou no seguir os prximos passos. Desta forma o processo principal teria que ser remodelado. Nesta nova situao um teste deve ser feito aps a discagem (Figura 4. 12). Suponha que por algum motivo o processo de discagem no possa ser realizado. Ex.: o equipamento (telefone ou modem) no est conectado a rede. Uma nova falha ocorrer, pois o processo ficaria preso na discagem (Discagem OK) e o usurio no saberia o que est acontecendo. Podemos utilizar uma tcnica parecida com timeout, s que neste caso ao invs de computarmos um tempo, colocaremos um contador de tentativas de discagem (Figura 4. 13). Se aps trs tentativas de discagem o sistema no obtiver sucesso, o processo de comunicao ser interrompido, podendo assim ser informado ao usurio a impossibilidade de comunicao. Observe que o fluxograma no faz mgica, ou seja, ele no vai conseguir resolver uma falha na rede, mas ele ser capaz de informar ao usurio a existncia de falha.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 7

Introduo a Programao __________________________________________________________________________________________________


Comunicao Telefnica Conectar linha Tentativas 3 F F Discar Tentativas =0

Discagem OK

Tentativas Tentativas -1

Transmitir dados

Desconectar linha

Fim

Falha de Comunicao

Figura 4. 12 - Tratamento do parmetro de retorno.

Figura 4. 13 - Eliminando situaes de falhas.

Diversas so a situaes que poderemos modelar atravs de fluxograma, mas porque utilizar este modelo? Vamos retornar na unidade III onde apresentamos algumas formas de modelamento de problemas (Figura 4. 14). Neste caso temos trs tipos de modelamentos e podemos utilizar trs linguagens distintas para codificarmos em alto nvel. Entretanto, para que possamos codificar em baixo nvel necessitamos de um detalhamento maior do que as tcnicas de modelamento apresentadas podem nos oferecer. Necessitamos de um modelamento intermedirio entre o modelo inicial (Mquina de estados) e a linguagem (Assembly). Desta forma o fluxograma uma excelente ferramenta para o interfaceamento desta situao.

Figura 4. 14 - Codificando em Alto nvel.

Figura 4. 15 - Codificando em Baixo nvel.

4. 3- Algoritmos Numricos
Como nosso objetivo final a construo de algoritmos que possam ser codificados e posteriormente executados em computadores partiremos agora para o estudo dos algoritmos numricos. Comearemos nosso estudo para solucionar um problema matemtico que consiste em acharmos os termos da seqncia de Fibonacci. Nesta seqncia os dois primeiros termos so dados 0 e 1 e os demais devem ser encontrados a partir dos mesmos. A regra bsica para se descobrir o prximo termo que ele seja a soma dos dois anteriores. Partindo dos dois primeiros construiremos a seguinte seqncia: 0,1,1,2,3,5,8,13,21,34,55,.. tendo como limite superior o valor 1000. Poderamos propor uma soluo manual ou atravs de um algoritmo que nos garantisse a gerao correta da

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 8

Introduo a Programao __________________________________________________________________________________________________

seqncia. Antes de escrever o fluxograma que execute tal tarefa faremos primeiro a anlise do problema como se fossemos calcular manualmente. O primeiro passo definir as variveis envolvidas no problema. Com base no enunciado para que eu ache o novo termo da seqncia necessito somar o penltimo e o ltimo termo da seqncia. Sero utilizadas trs variveis sendo que cada uma ir conter a informao dos itens sublinhados. Na Tabela 4. 2 podemos observar que os termos 1 e 2 apresentam respectivamente os valores 0 e 1. Para calcularmos o terceiro termo (novo) da seqncia devemos atribuir as variveis os seus respectivos contedos. Observando a linha 3 temos que o penltimo termo o termo 1(0) e o ltimo termo o termo 2 (1). Aps a soma de ambos teremos o terceiro termo(1). Como a seqncia ganhou um novo termo temos que atualizar o penltimo e ltimo termos e repetirmos o processo at atingir o limite desejado. Termo Penltimo termo ltimo termo Novo termo 1 0 2 1 3 0 1 1 4 1 1 2 5 1 2 3 6 2 3 5 7 3 5 8 8 5 8 13 9 8 13 21
Tabela 4. 2 - Seqncia de Fibonacci.

A Figura 4. 16 apresenta o fluxograma na forma descritiva capaz de gerar tal seqncia. Embora esta representao seja clara no a mais indicada para que possamos fazer a codificao de um programa.
Fibonacci

Penltimo ltimo

0 (0) 1 (1)

Novo

Penltimo + ltimo (2)

Novo > 100 (3) F Penltimo ltimo

Fim

ltimo (4) Novo (5)

Figura 4. 16 - Linguagem Descritiva.

Figura 4. 17 - Linguagem Formal.

A Figura 4. 17 apresenta o fluxograma em linguagem formal o que mais se aproxima de um problema matemtico ou de um programa de computador. Vamos destacar aluns pontos importantes que devem ser considerados na escrita de um fluxograma na linguagem formal: Sempre que necessitarmos de uma varivel em nosso fluxograma, devemos associar seu nome a sua funo no algoritmo. Ao contrrio da formulao matemtica, aqui o nome da varivel um elemento fundamental no entendimento do problema. Nunca colocar nomes como: X, Y ou Z para uma varivel. Aps nomear uma varivel necessitamos, em alguns casos, colocar uma valor inicial nesta mesma varivel. Para isto utilizamos um seta ( ) que representa uma atribuio, ou seja, o termo a esquerda da expresso ter o seu valor
__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 9

Introduo a Programao __________________________________________________________________________________________________

substitudo pelo termo da direita ou pelo resultado da expresso da direita. Nunca utilizar o sinal de igualdade, pois poderemos cair em uma inconsistncia matemtica como neste caso soma = soma +1 Aps a criao do fluxograma passaremos para fase de teste ou validao onde descobriremos se o seu funcionamento encontra-se correto. Para execuo do teste deve-se fazer o Chins, processo em que percorremos linha a linha do fluxograma executando seus comandos. Utilizamos neste ensaio um pequeno conjunto de dados hipotticos. Vamos aplicar o processo utilizando as indicaes dos comando presentes na caixa de processamento. Consideremos para efeito do chins que ele ser executado at que o novo termo seja menor que 25. Passo Comando Penltimo ltimo Novo 1 0e1 0 1 2 2 1 3 3 < 25 4 4e5 1 1 5 2 2 6 3 < 25 7 4e5 1 2 8 2 3 9 3 < 25 10 4e5 2 3 11 2 5 12 3 < 25 13 4e5 3 5 14 2 8 15 3 < 25 16 4e5 5 8 17 2 13 18 3 < 25 19 4e5 8 13 20 2 21 21 3 < 25 22 4e5 13 21 23 2 44 24 3 > 25
Tabela 4. 3 - Passo a passo do chins.

Aps aplicado o chins podemos observar que o fluxograma obteve o valor esperado. Estendendo o ensaio para enquanto novo termo for menor que 1000, tambm funcionar. Vamos observar como este algoritmo seria processado caso utilizssemos um computador. Vamos voltar ao modelo de John von Newmann (Figura 4. 18), que embora no seja o nico, mas ser de grande utilidade para o entendimento deste problema.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 10

Introduo a Programao __________________________________________________________________________________________________

Figura 4. 18 - Arquitetura de John von Newmann.

Esta arquitetura apresenta trs elementos bsicos: CPU (Unidade de Processamento Central) responsvel pelo controle e processamento dos dados do sistema. capaz de acessar, ler e escrever, os dados presentes na memria e I/O. O processador possui uma pequena memria local denominada registradores. Memria retm informaes escritas pela CPU ou por outros dispositivos para que futuras leituras possam ser realizadas. I/O (Input/Output) dispositivos que possibilitam a troca de informaes entre CPU e os elementos externos ao sistema. Embora no esteja explicitado na Figura 4. 18 a troca de informaes entre CPU e memria ou I/O feita atravs de vias (fios) denominados barramentos que interligam todo o sistema. A quantidade de memria presente no sistema fundamental para definir o tamanho do programa que o sistema poder executar assim como a quantidade de informaes que o mesmo poder armazenar. Embora sendo menos crtico, a quantidade de I/Os tambm um problema, pois um nmero reduzido de I/Os ir limitar o nmero de elementos externos que podero se conectar ao sistema. Sabendo-se que o sistema possui uma grande quantidade de memrias e I/Os, como ser possvel a identificao de um destes elementos? Para cada elemento de memria e I/O ser associado um Endereo, sendo este, o elemento identificador. possvel observar na Figura 4. 19 que em cada endereo de memria ou I/O existir uma lacuna denominada Contedo que ser responsvel pelo armazenamento de uma informao.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 11

Introduo a Programao __________________________________________________________________________________________________

Figura 4. 19 - Estrutura de um Sistema Microprocessado.

Retornando ao fluxograma da seqncia de Fibonacci apresentaremos duas possibilidades distintas de representao de um mesmo fluxograma, sendo as representaes distintas definidas pela forma de armazenamento das variveis. Para o caso apresentado na Figura 4. 17 foram utilizadas as memrias locais da CPU, ou seja, os registradores. Desta forma ao codificarmos este fluxograma associamos para cada varivel um registrador. Na nova soluo que apresentada na Figura 4. 20, embora o resultado final do problema seja o mesmo, as referncias feitas no fluxograma sofrero mudanas. Neste caso vamos associar a cada varivel um endereo de memria. Supondo que as variveis: penltimo, ltimo e novo corresponda respectivamente aos endereos 1000H, 1001H e 1002H, teremos que indicar no fluxograma atravs das trs primeiras atribuies realizadas na primeira caixa de processamento. Devemos encarar agora o nome da varivel novo, por exemplo, como o apelido do endereo de memria 1002H. Pois muito mais fcil compreender o que significa o termo novo do que ao endereo 1002H. Sabendo-se agora que a varivel Penltimo=1000H, sendo Penltimo o apelido da memria 1000H, para que seja possvel colocar na memria 1000H o valor 0 necessrio colocar o termo Pentimo entre parnteses (Penltimo) 0. Da mesma forma caso seja necessrio atribuir o valor do ltimo ao penltimo teremos que coloc-los entre parnteses (Penltimo) (ltimo). Vamos acompanhar o fluxograma da Figura 4. 20 observar as alteraes ocorridas.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 12

Introduo a Programao __________________________________________________________________________________________________

Figura 4. 20 - Operando com a memria.

Vamos analisar o mesmo problema considerando que uma equipe fosse contratada para resolver este problema [3]. Esta equipe composta por trs funcionrios denominados: Computador Mestre, Leitor e Atribuidor (Figura 4. 21).

Figura 4. 21 - Unidade de Processamento Central e Memria.

Suponha que para a memria do sistema fossem utilizadas pequenas caixas (Figura 4. 21) onde cada uma delas significa um endereo de memria. Faa cada endereo de memria (caixa) representar uma varivel da srie de Fibonacci. Dentro de cada caixa existe um papel onde nele est escrito o valor de cada varivel. A caixa provida de uma tampa que poder ser removida para que um outro papel, com um novo valor, seja colocado na mesma. Existe tambm uma janela de vidro nesta caixa para que a leitura do valor seja feito sem que se abra a caixa. Isto elimina o risco de alterao do valor contido na mesma em uma simples operao de leitura. Sobre a mesa do mestre existe o fluxograma da seqncia de Fibanacci indicando o que deve ser feito pelo computador. Partiremos de um determinado ponto onde o fluxograma esteja em plena execuo. Neste momento o computador acabou de atribuir ao ltimo termo da seqncia o valor obtido na varivel Novo. Nesta situao teremos as caixas com os respectivos contedos apresentados na Figura 4. 22 que corresponde ao passo 19 do chins (Tabela 4. 3). Neste momento o mestre pega a prxima comando (2) do fluxograma (Figura 4. 17) onde est indicado que seja executada a soma dos dois ltimos termos. Para processar a soma o primeiro passo fazer a leitura dos dois ltimos termos (Figura 4. 22). O mestre passa a tarefa para o leitor e este a executa fazendo a anotao dos valores e entregando de volta ao mestre.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 13

Introduo a Programao __________________________________________________________________________________________________

Figura 4. 22 - Leitura das variveis.

Com os valores na mo o mestre faz a soma obtendo o valor 21. O mestre passa ao atribuidor o novo valor que deve ser colocado na caixa Novo (Figura 4. 23).

Figura 4. 23 - Atribuidor

Como apresentado anteriormente podemos observar que toda operao de leitura preserva o contedo da varivel enquanto na operao de escrita o valor anterior perdido. Podemos tambm observar que um endereo de memria como a caixa onde guardamos a informao. J est informao o valor presente no pedao de papel corresponder ao dado, tambm chamado de contedo de memria, que manipulamos nos computadores. Nesta altura do campeonato voc deve estar se perguntando para que tanto complicao na utilizao de fluxograma com memria, porque no ficar com a soluo anterior que era to mais simples. Na verdade a simplicidade da primeira soluo se aplica somente a problemas mais simples, pois medida que o volume de dados aumenta no mais possvel armazen-los somente nos registradores. O nmero de registros presentes nas CPU da ordem de unidades e em alguns casos na ordem de unidades dezenas. Para fixar a utilizao de memrias nos fluxogramas vamos trabalhar um novo exemplo. Faa o clculo da mdia de idade de um grupo de 100 pessoas. Suponha que estas mdias estejam presentes na memria do computador sendo que a primeira idade encontrase no endereo de apelido END_INCIO e as demais idades nos endereos subseqentes. Para resoluo deste e dos demais fluxogramas faremos uma considerao importante e que ser aprofundada em um outro momento do nosso curso. Para cada endereo de memria existe nico byte associado, ou seja, o maior valor possvel armazenado em uma lacuna de memria o valor 255 ou 0FFh. Vamos aproveitar o momento da construo do novo fluxograma e fazer algumas recomendaes gerais e depois apresentar alguns passos bsicos para a construo de um fluxograma [4]. Recomendaes gerais: Lembre-se que voc no est escrevendo um fluxograma s para o seu entendimento. Caso voc esteja em sala de aula, tenha pena de seu professor e contribua com o resultado de sua nota. Caso voc esteja no trabalho,

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 14

Introduo a Programao __________________________________________________________________________________________________

provavelmente este fluxograma poder ter sua codificao realizada por outra pessoa de sua equipe. Escolha sempre nomes representativos para suas variveis. Evite escrever mais de uma ao por linha, pois a legibilidade do seu fluxograma se tornar pior. Aps prova, no adianta conferir com o colega, pois no existe uma nica soluo. Passos bsicos: Passo 1 Leia cuidadosamente a especificao do problema. No comece a escrita do fluxograma sem ter a certeza do entendimento do que foi solicitado. Caso contrrio voc poder escrever um fluxograma, at correto sobre o aspecto lgico, mas que no faz o que foi solicitado. Passo 2 Identifique as variveis envolvidas no problema. Observe se estas variveis necessitam de um. Se valor inicial necessrio, estas variveis sero carregadas na primeira caixa de processamento do fluxograma. No se preocupe caso alguma varivel passe despercebida, pois durante a escrita do fluxograma correes sero feitas. Para evitar baguna no fluxograma sempre faa a primeira caixa de processamento um pouco maior que o necessrio, neste primeiro momento, pois provavelmente voc ter que inserir mais algumas variveis. Passo 3 Primeiro apresente uma soluo para depois pensar na otimizao. Lembre-se que no existe um nico caminho para escrever um fluxograma. Desta forma um fluxograma poder ser mais eficiente que outro, mas primeiro devemos dar uma soluo para que a partir desta soluo possamos implementar possveis melhorias. Passo 4 Podero surgir variveis auxiliares ao longo do fluxograma, fique a vontade, pois podero ser criadas ao qualquer momento. Passo 5 Ao definir uma determinada ao voc dever lembrar que uma CPU resolve problemas por etapa e que esta ao talvez tenha que ser subdividida em um conjunto de aes menores. Passo 6 Se um conjunto de aes comea a se repetir ao longo do fluxograma sinal que voc est se deparando com uma subrotina. Defina este conjunto de aes com nome e crie um fluxograma especfico para estas aes. Dividir o problema em subproblemas torna nossa tarefa mais simples. Passo 7 Quer nota boa, faa o chins. No d mole para que o professor descubra o seu erro. Ache voc mesmo e garanta um bom resultado. Passo 8 Otimizao, a soluo foi boa ou devo melhorar? Neste momento voc poder verificar se cabe melhoria no seu fluxograma. Qual o ganho que voc obter caso implemente mudanas. Se deciso for uma mudana no fluxograma j escrito aplique as devidas mudanas e retorne ao passo 4 j se a deciso for pela escrita de novo fluxograma retorne ao passo 1 para uma anlise mais detalhada do problema. Vamos comear aplicar as dicas e construir o novo fluxograma. Passo 1 Identificando o problema
MEMRIA ENDEREO CONTEDO 0000 20 END_INICIAL 37 14 01 18 XXXX 28
NUM_PESSOAS=100 TOTAL= IDADES MDIA=TOTAL/NUM_PESSOAS

Figura 4. 24 - Problema da mdia de idades.

Passo 2 Variveis: AptIdades Ir indicar em que posio da memria est carregada a lista das idades das pessoas. Total Responsvel por acumular a soma parcial das idades. Cont Contador que indicar se j foi somado todas as idades. Passo 3 Primeira soluo:

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 15

Introduo a Programao __________________________________________________________________________________________________

Mdia

AptIdades END_INICIAL Total 0 Cont 0 (1)

Total

Total + (AptIdades) Cont Cont +1 (2)

Cont = V NUM_PESSOAS (3)

Mdia

Total / NUM_PESSOAS (5)

AptIdades

AptIdades + 1 (4)

Fim

Figura 4. 25 - Fluxograma da Mdia.

Passo 4: A varivel Mdia s surgiu no final do fluxograma e foi devidamente inserida. Passo 5: Dependendo do processador para o qual tenhamos que codificar este fluxograma no existe a instruo nativa de diviso. Supondo que este fosse o caso, vamos aplicar para esta ao (5) a subdiviso em um conjunto de aes. Passo 6: Embora no seja um conjunto de aes que e repetem ao longo do fluxograma principal, vamos transformar este conjunto de aes em uma subrotina, ou seja, um novo fluxograma.

Figura 4. 26 - Mdia e subrotina Diviso.

Passo 7: Vamos fazer o chins considerando um nmero limitado de dados (Figura 4. 27).

Figura 4. 27 - Condio para o Chins.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 16

Introduo a Programao __________________________________________________________________________________________________

Baseado na condio de teste teremos a mdia=4 com resto 3. Passo Comando AptIdades Total Cont 1 1 1000 0 0 2 2 07 1 3 3 =4 4 4 1001 5 2 10 2 6 3 =4 7 4 1002 8 2 11 3 9 3 =4 10 4 1003 11 2 19 4 12 3 =4 Chins da Diviso Dividendo Divisor Quoc 1 1 19 4 0 2 2 OK 3 3 15 1 4 2 OK 5 3 11 2 6 2 OK 7 3 7 3 8 2 OK 9 3 3 4 10 2 NOK 11 4 RESTO=3 Passo 8: possvel melhorar? A melhoria ir trazer algum ganho significativo? Se as duas respostas forem verdadeiras partir para implementao. Na Figura 4. 28 apresentada uma outra possibilidade que no deve ser encarado como uma boa otimizao visto que o ganho obtido muito pequeno. Foi suprimida a varivel contador e o teste de finalizao feito atravs do AptIdades.

Figura 4. 28 - Supresso da varivel Cont.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 17

Introduo a Programao __________________________________________________________________________________________________

4. 4- Exerccios
1. Escreva um fluxograma da receita abaixo. Ingredientes: 1 xcara de nozes partidas 250g de chocolate em p 250g de passas 3 xcaras de acar Meia xcara de leite condensado Meia xcara de leo de milho 1 colher das de ch de baunilha 250g de manteiga 1 colher de ch de sal Ponha o leite, o leo, o acar, o chocolate e o sal em uma panela e leve ao fogo, mexendo constantemente, at a fervura. Reduza o fogo e continue a ferver em fogo brando, mexendo sempre, at ficar em ponto de caramelo. Retire do fogo e deixe esfriar por 10 minutos. Em seguida bata com manteiga e baunilha, at a mistura ficar homognea. Acrescente as nozes. Distribua as passas no fundo de uma frma grande untada de manteiga. Derrame a massa sobre essas passas. Deixe esfriar por 10 minutos, corte em pedaos e o bolo est pronto para servir. 2. Suponha duas listas com 6 nmeros cada com os respectivos endereos END_L1 e END_L2. Faa um fluxograma que troque o contedo destas listas. 3. Faa um fluxograma para tratar a soma de dois vetores de tamanho igual 5 que esto carregados na memria a partir dos endereos END_VET1 e END_VET2 respectivamente e coloque o resultado num terceiro vetor com incio no endereo END_VETS. 4. Faa um fluxograma que calcule o nmero de alunos que ficaram com mdia>=6.0, 6.0>mdia>=4.0 e mdia<4.0. As mdias dos N alunos esto carregadas na memria a partir do endereo END_MDIAS. 5. Suponha uma lista de 10 nmeros no endereo END_L. Faa um fluxograma que ache o maior e o menor nmero entre eles. 6. Suponha uma lista de 10 nmeros no endereo END_L. Faa um fluxograma que coloque esta lista em ordem crescente. 7. Faa uma subrotina que calcula o fatorial de um nmero introduzido pelo teclado pelo usurio e apresente a resposta no monitor de vdeo. 8. Para poder dar desconto ao comprador na hora da venda um comerciante coloca o preo da mercadoria e junto do mesmo imprime uma codificao que traduz o preo de compra da mercadoria. Este cdigo constitudo de um conjunto de letras onde cada letra corresponde a um valor. J O V E M T U R C A 0 1 2 3 4 5 6 7 8 9 Faa um algoritmo que converta o valor da mercadoria para o cdigo correspondente.

__________________________________________________________________________________________________ jkssbh@deii.cefetmg.br 18

Introduo a Programao __________________________________________________________________________________________________

[1] Algoritmos Estruturados Ed. Guanabara Dois


1985 Ferrer Becker Faria Matos Santos e Maia ISBN 85-7030-056-5

[2] Linguagens e Tcnicas de Programao


Andr Aparecido Milito Site: www.apostilando.com

[3] Cincia de Computadores Ed. LTC


1972 - Forsythe, Keenan, Organick e Stenbe [ ] Algoritmos Estruturados de Dados Ed. LTC 1985 Guimares, ngelo Moura e Lages, Newton, Alberto de Castilho ISBN 85-216-0378-9
4

19

Potrebbero piacerti anche