Вы находитесь на странице: 1из 10

Universidade Federal de Santa Maria Prof.

Cesar Tadeu Pozzer Disciplina: Algoritmo e Programao 27/09/2010

Lgica de Programao
1 Algoritmo Algoritmo pode ser definido como um mtodo para a soluo de um determinado problema. Em termos de programao, este mtodo deve ser estruturado, ordenado e formal, de modo que no apresente ambiguidades, que defina com clareza as operaes que devem ser realizadas e seja finito. A granularidade das operaes vai depender da linguagem de programao que se estiver usando. Linguagens de baixo nvel, como assembly, possuem comandos muito elementares, como somar, comparar e desviar. Linguagens como o C e C++ podem ser vistas como linguagens de nvel mdio, pois combinam elementos de linguagens de alto nvel com o assembly, que de baixo nvel. A linguagem de nvel mais alto, se existisse, seria igual a linguagem natural. Pode-se dizer que o algoritmo um passo intermedirio entre o problema e o programa para solucion-lo. Como exemplo introdutrio de um algoritmo, pode-se descrever as operaes necessrias para tomar um copo de gua na cozinha:
Se voc no estiver na cozinha faa v at a cozinha Pegue um copo encha de gua tome a gua

Este algoritmo descreve aes complexas, que no podem ser compreendidas por um computador, que somente sabe realizar operaes aritmticas e lgicas. Detalhando um pouco mais este exemplo, pode-se definir um novo algoritmo:
Se voc no estiver na cozinha faa enquanto no chegar a cozinha repita de um passo em direo a cozinha, desviando de obstculos enquanto no encontrar um copo repita procure um copo mova a mo at o copo pegue o copo leve o copo em baixo da torneira abra a torneira enquanto o copo no estiver cheio repita espere feche a torneira tome a gua.

Este algoritmo ainda no pode ser compreendido por um computador. A tarefa de tomar gua, para um computador, muito complexa e exigiria milhares de linhas de cdigo para ser executada. Geralmente, operaes que para os humanos so triviais, para um computador so muito complexas seno impossveis. Entretanto, clculos complexos podem ser facilmente compreendidos por um computador. 1

2 Variveis Todo o processamento lgico de um algoritmo baseado em variveis. As variveis em algoritmos, semelhante s usadas em equaes matemticas, so usadas para guardar valores. As variveis podem conter nmeros inteiros, reais, texto, dados mais complexos, etc, como nos seguintes exemplos.
Var: contador, soma, nome, endereo contador = 10 nome = ler( ) endereco = Avenida Presidente Vargas soma = contador + 20

As variveis podem receber valores de duas formas distintas: informadas pelo usurio, pelo comando ler( ), ou atribudas por meio do operador de atribuio =, como visto nos exemplos acima. Antes de se utilizar uma varivel, deve-se declar-la, com o uso da palavra Var:. Ao se utilizar uma linguagem de programao, alm da declarao, deve-se tambm definir um tipo, que pode ser inteiro, real, texto, etc. Deve-se tomar o cuidado de atribuir um valor a varivel antes de ler (acessar) seu contedo. No exemplo acima, se a varivel contador no tivesse sido inicializada com o valor 10, a expresso soma = contador + 20 seria invlida, visto que no se saberia o valor da expresso. A varivel endereco foi inicializada com o texto Avenida Presidente Vargas e a varivel nome com uma informao fornecida pelo usurio, atravs do comando ler(). A varivel soma foi inicializada com o valor de uma expresso. Neste exemplo, seria invlido fazer a atribuio soma = endereco + contador, visto que as variveis endereco e contador armazenam valores de tipos diferentes.

2 Expresses Condicionais Todo algoritmo ou programa baseado em expresses condicionais. por meio delas que se pode tomar decises em desvios condicionais e laos de repetio. Uma expresso condicional ou verdadeira ou falsa. No existe valor intermedirio.
Se j uma hora da tarde ento V para o trabalho Seno V assistir televiso Fim se

Expresses condicionais podem tambm ser compostas de vrios argumentos, conectados por operadores lgicos E, OU e NO, com no seguinte exemplo.
Se (j uma hora da tarde) E (o dia estiver ensolarado) ento V para o trabalho Fim se

Neste exemplo, a expresso somente ser verdadeira se (hora > 13) e (dia ensolarado). Caso qualquer um dos argumentos for falso, toda expresso ser falsa. As seguintes tabelas mostram o resultado da expresso para os 3 operadores.

Conjuno E Condio 1 F F

Condio 2 F V

Resultado Lgico F F 2

V V Conjuno Ou Condio 1 F F V V

F V

F V

Condio 2 F V F V

Resultado Lgico F V V V

Conjuno No Condio Resultado Lgico V F F V Geralmente os testes lgicos so aplicados sobre variveis do algoritmo, como nos seguintes exemplos.
Inicio Var: a, b, c a = 10 b = Ler( ) c = a + b Se (a > b ) ento Escrever(a > b) Seno Escrever ( b ) Fim se Se ( b = 10 E b < c) ento Escrever (b vale, b) Fim se Fim

3 Laos de Repetio Quando precisamos que alguma operao seja realizada vrias vezes, devemos fazer uso de laos de repetio. Da mesma forma como um teste condicional, um lao de repetio est associado a um bloco de comandos que deve ser executado enquanto a condio for verdadeira, com no seguinte exemplo: V ao shopping Enquanto tiver dinheiro Compre Pague Fim enquanto V para casa Neste exemplo, as operaes comprar e pagar so executadas sequencialmente enquanto a pessoa tiver dinheiro. Quando o dinheiro acabar, a pessoa deve ir para casa. Um exemplo simples e prtico da utilizao de laos de repetio apresentado no seguinte exemplo, que imprime os nmeros inteiros de 0 a N, sendo N informado pelo usurio.

Inicio Var: N, cont N = Ler( ) Cont = 0 Enquanto cont <= N faa Escrever( cont ) Cont = cont + 1 Fim enquanto Fim

O seguinte programa faz a soma dos N primeiros nmeros inteiros, sendo N informado pelo usurio.
Inicio Var: N, cont, soma N = Ler( ) Cont = 0 Soma = 0 Enquanto cont < N faa Soma = soma + cont Cont = cont + 1 Fim enquanto Escrever( soma ) Fim

Pode-se tambm utilizar a estrutura de repetio para de forma similar.


Inicio Var: N, cont, soma N = Ler( ) Soma = 0 Para cont = 0 at N faa Soma = soma + cont Cont = cont + 1 Fim enquanto Escrever( soma ) Fim

4 Notaes Formais para Representao de Algoritmos Para que um algoritmo genrico seja traduzido para um algoritmo computacional, ele deve ser traduzido para dados e comandos. Um comando uma primitiva que pode ser compreendida por um computador ou pela linguagem em que se de deseja implementar o algoritmo. Dados so representaes formais de alguma informao, como um nmero, um caractere, um texto ou combinao destes. Existem vrias formas de representao formais de algoritmos. Nas prximas sees sero apresentadas resumidamente alguma delas.

4.1 Pseudo-Linguagem (Portugus Estruturado) Nesta forma de representao, j muito prxima de uma linguagem de programao, porm sem muito formalismo, deve-se definir as variveis e usar um conjunto limitados de comandos (ler, escrever, comparar, atribuir, operaes aritmticas, laos). O seguinte exemplo mostra um algoritmo para ler e calcular a rea de um quadrado e dizer se esta rea maior ou menor que 30. Neste exemplo, base, altura e rea so variveis que armazenam valores numricos. Deve-se observar a endentao dos comandos no caso de desvios condicionais e laos de repetio. 4

Incio Var: base, altura Ler base, altura area = base * altura Se area < 30 Ento Escrever a rea menor que 30 e vale , area Seno Escrever a rea maior que 30 Fim se Fim.

Pode-se fazer encadeamentos grandes com a estrutura se-seno, como no seguinte exemplo. Observe que o ltimo caso no possui teste condicional; este caso considerado default. Caso nenhum teste seja verdadeiro, ser executado este caso:
Inicio Var: media Ler media Se media > 9 ento Escreva conceito A Seno se media > 8 ento Escreva conceito B Seno se media > 7 ento Escreva conceito C Seno Escreva conceito D Reprovado Fim se fim

muito comum tambm o uso de testes condicionais encadeados, como no seguinte exemplo
Inicio Var: A, B, C, D A = 10 Ler B, C, D Se A > B ento Escreva A maior que B Se B > C ento Escreva B Neste caso impresso o valor de B Se B = D ento Escreva B igual a D Fim se Fim se Enquanto A > B faa A = A - 1 Fim enquanto Escreva Agora A igual a B Fim se Escreva fim do programa Fim

Deve-se cuidar para no confundir a impresso de mensagens (entre ) com a impresso de valores. O seguinte programa usado para imprimir os nmeros inteiros entre 0 e um valor mximo, com incremento varivel.
Inicio

Var: contador, incremento, max Ler max Ler incremento Contador = 0 Enquanto contador < Max faa Escreva contador Contador = contador + incremento Fim enquanto Escrever terminou impresso fim

Pode-se tambm utilizar operadores lgicos dentro de testes condicionais. O seguinte exemplo ilustra um programa para tentar descobrir com 5 tentativas um valor predefinido. O smbolo # usado para indicar comentrios.
Inicio Var: valor, tentativa, Max_tentativas, Num_tentativas Max_tentativas = 5 Num_tentativas = 0 Valor = 20 #valor que o usurio devera tentar descobrir Ler tentativa Enquanto tentativa != valor E Num_tentativas < Max_tentativas faa Ler tentativa Num_tentativas = Num_tentativas + 1 Fim enquanto Se tentativa == valor ento Escrever voc acertou o numero Seno Escrever voc no acertou o numero Fim se Fim.

Agora vamos transformar o algoritmo de copras no shopping apresentado no Captulo 3 em uma pseudolinguagem. Para isso, devemos transformar os dados utilizados em variveis. De imediato, devemos ter a varivel dinheiro, que armazena a quantidade de dinheiro que a pessoa possui. Esse valor deve ser lido de algum lugar (teclado, banco de dados, etc), pois o programa no pode adivinhar quanto dinheiro uma pessoa qualquer possui. Uma primeira verso muito simplificada e incompleta do algoritmo pode ser a seguite:
Inicio Ler dinheiro Enquanto dinheiro > 0 faa Compre item Pague pelo item Fim enquanto Fim.

Neste exemplo, as operaes comprar e pagar no podem ser compreendidas por um programa de computador. A operao pagar deve alterar a quantidade de dinheiro que a pessoa possui. A operao comprar somente pode ser realizada caso a pessoa tiver dinheiro suficiente para comprar o determinado item, seno pode ficar no negativo, o que no permitido neste problema. Agora, uma verso um pouco mais correta. Observe neste exemplo a endentao entre os blocos se e enquanto.

Inicio Var: dinheiro, Valor_item Escrever va ao shopping Ler dinheiro Enquanto dinheiro > 0 faa Ler valor_item Se dinheiro >= valor_item entao Escrever compre o item dinheiro = dinheiro valor_item Fim se Fim enquanto Escrever va para casa Fim.

Cada vez que algo for comprado, faz-se uma diminuio do valor da varivel dinheiro igual ao valor do item a ser comprado, que tambm deve ser lido de algum lugar. Neste programa, o comando Ler abstrai esta leitura. Este algoritmo est quase correto, pois uma caracterstica de um algoritmo que ele sempre deve ser finito. O que aconteceria se o valor de todos os itens de uma loja fosse maior que o dinheiro que a pessoa possui, ou se no existisse nenhum item que custasse exatamente o dinheiro que a pessoa possui? Para estes casos, que so muito comuns de ocorrer, o algoritmo no terminaria nunca. Para isso, usa-se a expresso Entrou em Loop. Para solucionar este problema, uma estratgia simples seria finalizar o programa aps um determinado nmero de tentativas de compra no realizadas. Eis uma verso desta estratgia, que aps 10 tentativas invlidas, finaliza a execuo. Observe que a varivel contador foi inicializada com valor zero.
Inicio Var: dinheiro, valor_item, contador Escrever va ao shopping Ler dinheiro Contador = 0 Enquanto (dinheiro > 0 E contador < 10) faa Ler valor_item Se dinheiro >= valor_item entao Escrever compre o item dinheiro = dinheiro valor_item Seno contador = contador + 1 Fim se Fim enquanto Escrever va para casa Fim.

Neste exemplo, a varivel contador usada para armazenar o nmero de vezes que a compra no foi realizada. Quando chegar a 10 ou quando no tiver mais dinheiro, o programa finaliza a execuo. Observe que no teste condicional do enquanto utilizado o operador E. Analise o que aconteceria se fosse usado o operador OU. Como exerccio, altere este algoritmo para que ele somente pare aps 10 tentativas invlidas consecutivas de compra de algum item, ou seja, entre as tentativas invlidas no pode haver nenhuma compra.

4.2 Notao grfica (fluxograma) A notao grfica faz uso de fluxogramas para descrever as aes do algoritmo. Setas indicam em qual direo a execuo deve seguir. O caminho a ser seguido definio por desvios condicionais. Os principais elementos desta representao so o de tomada de decises e laos de repetio, mostrados na sequncia. Outros elementos desta representaes podem ser encontradas em [1]. 7

Se Condio verdadeira Ento Executar BlocoVerdadeiro Seno Executar Bloco Falso Fim Se

V
Comandos caso condio for verdadeira

Condio

Comandos caso condio for falsa

Incio
Var: A, B, C

Fim

B = 10

Condio

F
A

V
Comandos

Enquanto Condio Faa Comandos Fim Enquanto

A, B

Fim

4.3 Diagrama de Nassi-Shneiderman Esse diagrama permite uma viso estruturada e hierrquica do programa. Faz uso de um nico retngulo, que pode ser subdivido em retngulos menores. Permite a representao de comandos, seleo e laos de repetio.
Commando 1 Commando 2 Commando n Enquanto condio Faa Commando 1 Commando n

condio V Commandos F Commandos

Var: A, B, C Ler A, B, C Enquanto A < B faa V B < C F

Commando 1 Commando n Repetir at condio

B = B + 1 Escreva B Escreva Fim do programa

5 Funes Para melhor estruturar o algoritmo e facilitar reutilizao de cdigo, uma boa prtica o uso de subalgoritmos (procedimentos ou funes). Uma funo nada mais que outro algoritmo que chamado por um algoritmo para desempenhar uma tarefa especfica. No seguinte exemplo, define-se a funo mdia, que retorna a mdia de dois nmeros.
Funo Mdia(n1, n2) Var: M M = (n1+n2)/2 Retornar M Fim Funo Incio Var: A, B Ler A, B C = Media(A, B) D = Media(30, 11) Escrever C, D Fim.
Comandos ... chamada do subalgorito ... comandos Subalgoritmo Comandos Retorno Fim

6 Vetores Muitas vezes necessrio fazer o processamento de muitos dados. Suponha o caso de encontrar o maior valor lido de um conjunto de 5 valores. O seguinte algoritmo resume esse problema
Incio Var: A, B, C, D, E Ler A, B, C, D, E Se( A > B e A > C e Escreva( A ) Seno Se( B > A e B Escreva( B ) Seno Se( C > A e C Escreva( C ) Seno Se( D > A e D Escreva( D ) Seno Escreva ( E ) Fim se Fim.

A > D e A > E ) ento > C e B > D e B > E) ento > B e C > D e C > E) ento > B e D > C e D > E ) ento

Imagine como ficaria esse exemplo se fosse necessrio encontrar o maior valor de um conjunto de 100 valores. Para tratar esse problema, faz-se de uso de vetores. Um vetor semelhante a uma varivel, porm pode armazenar vrios valores, que so indexados por um ndice inteiro. A notao para definio de um vetor chamado vet com 100 elementos : Var: vet[100]. Neste caso, vet[0] representa a primeira posio e vet[99] a ltima.

Um algoritmo genrico para achar o maior valor de um conjunto com um tamanho qualquer (neste caso 10.000 elementos) o seguinte:
Incio Var: vet[10000], maior, cont Cont = 0 Enquanto( cont < 10000 ) faa Vet[cont] = ler() Cont = cont + 1 Fim enquanto Maior = vet[0] Para cont = 1 ateh 10000 faa Se( vet[cont] > maior) faa Maior = vet[cont] Fim se Cont = cont + 1 Fim para Escrever ( maior ) Fim.

7 Referncias Bibliogrficas [1] Guimares, A. M., Lages, N. A. C. Algoritmos e estrutura de dados. Livros Tcnicos e cinentficos. RJ. 216p. 1985.

10

Вам также может понравиться