You are on page 1of 9

1 Algoritmos

No se aprende algoritmos copiando algoritmos e estudando algoritmos. S se aprende algoritmos construindo algoritmos e testando algoritmos.

A automao o processo em que uma tarefa deixa de ser desempenhada pelo homem e passa a ser realizada por mquinas, sejam estas dispositivos mecnicos (como as mquinas industriais), eletrnicos (como os computadores), ou de natureza mista (como os robs). Para que a automao de uma tarefa seja bem-sucedida necessrio que a mquina que passa a realiz-la seja capaz de desempenhar cada uma das etapas constituintes do processo a ser automatizado com eficincia e de modo a garantir a sua repetibilidade. O algoritmo a estratgia utilizada para especificar com clareza e exatido o que deve ser realizado em cada uma das fases do processo a ser automatizado e a seqncia em que estas fases devem ser realizadas.

Algoritmo a especificao da seqncia ordenada de passos que deve ser seguida para a realizao de uma tarefa, garantindo a sua repetibilidade. um conjunto finito de regras bem definidas e conhecidas para a soluo de um problema com um nmero finito de passos.
Podemos compreender um algoritmo como qualquer procedimento computacional bem definido que toma algum conjunto de valores como entrada e produz algum conjunto de valores como sada. Todo algoritmo deve sempre possuir um resultado, normalmente chamado de sada, e satisfazer a propriedade da efetividade, isto , todas as operaes especificadas no algoritmo devem ser suficientemente bsicas para que possam ser executadas de maneira exata e num tempo finito. O algoritmo uma ferramenta de grande valor na estruturao do raciocnio lgico j que exige a definio exata da sequncia de passos necessrios resoluo de um dado problema. Por esta caracterstica, apresentam ampla utilizao em diversas reas de conhecimento. A matemtica emprega algoritmos na definio de mtodos de clculo e operaes eliminando a possibilidade de ambiguidades. A engenharia utiliza-os para a automao industrial e o desenvolvimento de tecnologias modernas. A administrao emprega algoritmos na definio de procedimentos de operao nas organizaes e a cincia da computao utiliza-os na modelagem e desenvolvimento de sistemas de software. Um programa de computador (software) simplesmente um algoritmo escrito num formato que a mquina compreende. Durante sua concepo trabalhamos com algoritmos. Aps o projeto finalizado, realizamos a traduo do algoritmo para alguma linguagem de programao, de acordo com os requisitos tcnicos do software.

Exemplo 1 Algoritmo para Solicitao de Compra de Materiais


Existem vrias representaes possveis para um algoritmo. Iniciamos apresentando um fluxograma1.

Ilustrao 1 - Fluxograma para solicitao de compra de materiais.


incio Preenche formulrio de compras Encaminha ao gestor
no

Ao lado apresentamos o primeiro algoritmo deste texto. Trata-se da modelagem de um fluxo para solicitao de compras de materiais de uma organizao hipottica. De acordo com este fluxo, a solicitao de compras de materiais tem incio com o preenchimento do formulrio de compras. Aps preenchido, o formulrio deve ser encaminhado ao gestor do solicitante. O gestor pode aprovar ou reprovar a solicitao. Caso o gestor reprove, o fluxo encerrado e nenhuma compra realizada. Caso o gestor aprove, a solicitao encaminhada ao setor financeiro para avaliao da disponibilidade oramentria. Caso o financeiro reprove, o fluxo encerrado e nenhuma compra realizada. Caso o financeiro aprove, a compra ser processada e o fluxo de solicitao termina.

Aprovado?

sim

Encaminha ao financeiro

Aprovado?

no

sim

Processa compra

fim

Todo algoritmo sempre comea no estado incio e sempre termina no estado fim. Deve existir apenas um nico incio e fim para cada algoritmo. O algoritmo de solicitao de compras cita quatro outros processos, a saber: Preenche formulrio de compras; Encaminha ao gestor; Encaminha ao financeiro; Processa compra.
1

Um diagrama que representa um fluxo chamado de fluxograma.

Cada um destes processos deve ser especificado de forma a garantir que qualquer indivduo seja capaz de ler e executar o algoritmo sem qualquer dvida, podendo inclusive dar origem a novos algoritmos. Abaixo apresentamos o mesmo algoritmo, desta vez representado sobre a forma de portugus estruturado ou pseudocdigo.

Ilustrao 2 - Pseudocdigo para solicitao de compras.


INCIO Preenche formulrio de compras; Encaminha ao gestor; SE aprovado ENTO INCIO Encaminha ao financeiro; SE aprovado ENTO INCIO Processa compra; FIM FIM FIM Esta representao utiliza a forma textual para apresentar os passos necessrios definio da atividade. So utilizadas as clusulas de incio e fim para indicar um bloco de instrues. A clusula se ento utilizada para estruturar o teste condicional e ser detalhada mais a frente. Neste tipo de representao, a profundidade do texto utilizada para indicar o nvel de cada bloco de instrues, visto que existem blocos aninhados (contidos em outros blocos).

Para a soluo de um dado problema podemos propor diversos algoritmos. Isto possvel pois algoritmo o caminho que leva a soluo do problema. E raros so os problemas que possuem apenas uma nica soluo. Na prtica no importante ter-se apenas um algoritmo, mas sim, um bom algoritmo. O mais importante de um algoritmo a sua corretude, isto , ele deve resolver adequadamente o problema proposto.

Principais caractersticas de um algoritmo:


Presena de um nico estado inicial; Presena de um nico estado final; Estado final sempre atingido para quaisquer entradas e num nmero finito de passos; Cada passo precisamente definido, sem ambigidades; Existncia de uma ou mais sadas.

Como principais maneiras de se representar um algoritmo temos a linguagem natural, pseudocdigo e fluxograma2.

Linguagem Natural
A representao de algoritmos atravs da linguagem natural a forma mais espontnea. As aes (passos) so descritas utilizando nosso linguajar cotidiano de forma similar a um texto tpico. Suponha o seguinte problema: Calcular a mdia de todos os alunos que cursaram uma disciplina X, a partir da leitura das notas da 1a e 2 prova. Aps a mdia calculada devemos anunciar se aluno foi aprovado ou reprovado. Somente sero aprovados alunos com mdia maior ou igual a 5,0.

Ilustrao 3 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 5,0, ento o aluno est aprovado, seno o aluno est reprovado. Fazer para o prximo aluno. O problema da representao por linguagem natural que, quanto maior a complexidade do problema, maior a dificuldade de entendermos o texto que procura descrever os passos do algoritmo pois no se emprega nenhum recurso diagramtico e no h uma rigidez na estruturao das aes.

Existe tambm o diagrama de Chapin que no ser apresentado por ser raramente utilizado. Sua construo muito similar a um fluxograma com smbolos distintos.

Portugus Estruturado (pseudocdigo)


O Portugus Estruturado vem sendo amplamente utilizado por projetistas de software e programadores para a modelagem de sistemas pois obriga o uso de estruturas que facilitam o entendimento do algoritmo. Tambm recebe outros nomes como pseudocdigo e portugol. Abaixo apresentamos o algoritmo para clculo da nota mdia redigido em portugus estruturado.

Ilustrao 4 Representao do algoritmo em portugus estruturado.


INCIO ENQUANTO no for fim da lista de alunos FAA INCIO Leia nota1; Leia nota2; mdia = (nota1 + nota2) / 2; SE mdia >= 5,0 ENTO INCIO Escreva Aluno aprovado; FIM SENO INCIO Escreva Aluno reprovado; FIM FIM FIM Como no temos condio de saber a priori as notas de cada aluno, precisamos represent-las atravs dos identificadores nota1 e nota2. O primeiro passo do algoritmo a leitura destes valores do mundo exterior (via digitao de usurio, arquivo em disco ou mesmo um banco de dados) e sua atribuio a estes identificadores. Este um recurso que permite a programao de processamentos para situaes em que os valores no so previamente conhecidos. Ao longo de todo o algoritmo podemos referenciar estes valores atravs dos identificadores. Este identificador chamado de varivel (pois os valores armazenados podem mudar ao longo do algoritmo). A varivel atua como um repositrio de valores e este tpico ser abordado mais a frente neste documento. O pseudocdigo vem sendo amplamente utilizado por projetistas de software e programadores, pois obriga o uso de estruturas que facilitam seu entendimento e sua transformao em programas de computador.

Fluxograma
uma representao grfica de algoritmos onde formas geomtricas diferentes implicam aes (instrues, comandos) distintas. Essa propriedade facilita o entendimento das idias contidas nos algoritmos. De modo geral, o fluxograma se resume a um nico smbolo inicial, por onde a execuo do algoritmo comea, e um ou mais smbolos finais, que so pontos onde a execuo do algoritmo se encerra. Partindo do smbolo inicial, h sempre um nico caminho orientado a ser seguido, representando a existncia de uma nica seqncia de execuo das instrues. Apesar de vrios caminhos poderem convergir para uma mesma figura do diagrama, h sempre um nico caminho saindo desta figura. Excees a esta regra so os smbolos finais, dos quais no h nenhum fluxo saindo, e os smbolos de deciso, de onde pode haver mais de um caminho de sada (normalmente dois caminhos), representando uma bifurcao no fluxo. Abaixo apresentam-se os principais smbolos usados na representao de fluxogramas (ateno pois existem variaes na simbologia empregada).

Ilustrao 5 Principais smbolos para representao de fluxogramas.

Abaixo apresentamos o fluxograma para o algoritmo de clculo da mdia de duas notas.

Ilustrao 6 Fluxograma para algoritmo de clculo de mdia de notas.

Exemplo 2 Algoritmo para soma de 2 parcelas com 2 algarismos.


Este exemplo apresenta um algoritmo para a realizao de uma soma simples envolvendo apenas 2 parcelas, cada parcela contendo apenas dois algarismos representadas pelas letras AB + CD = EF. AB + CD -------------EF AB representa a primeira parcela da soma. A representa o algarismo da dezena enquanto que B a unidade. O mesmo raciocnio vale para CD e EF. O algoritmo recebe como entrada as duas parcelas a serem somadas, isto AB e CD. Sua sada o nmero EF que representa o resultado da soma entre AB e CD.

Como A, B, C e D so parmetros de entrada, o algoritmo inicia sua execuo realizando a leitura destes valores. Ou seja, o algoritmo foi projetado para operar de forma independente dos valores A, B, C e D. Para quaisquer valores destas variveis, o algoritmo deve ser capaz de atingir o estado de fim oferecendo valores corretos como resposta. Em seguida, o algoritmo atribui para a varivel F o valor referente soma de B e D. Pode ocorrer desta soma gerar um resultado maior ou igual a 10. Neste caso, deve ocorrer o chamado vai um, ou seja, devemos transbordar uma dezena para o valor final de E e atribuir para F somente o valor referente ao algarismo da unidade. A ltima instruo do algoritmo a impresso do resultado da soma.

Ilustrao 7: Algoritmo de soma para parcelas de 2 algarismos. 3.1 Fluxograma.


incio
AB CD

3.2 - Pseudocdigo.
INCIO F = B + D; SE F >= 10 ENTO INCIO F = F 10; VaiUm = 1; FIM SENO INCIO VaiUm = 0; FIM E = A + C + VaiUm; Imprima Resultado: EF; FIM

F = B+D

F >= 10?

sim

F = F - 10 VaiUm = 1

no

VaiUm = 0

E = A + C + VaiUm
Resultado: EF

fim

Para verificar o funcionamento do algoritmo, basta execut-lo com papel e lpis e escohendo um valor aleatrio para cada letra (A, B, C e D). Suponhamos: A=1 B=2 C=4 D=9 Neste caso o algoritmo realizar a soma de 12 (AB) com 49 (CD). Ao final da execuo temos a impresso de Resultado: 61 e as variveis com os seguintes valores: E=6 F=1 VaiUm = 1

Estruturas Bsicas para a Construo de Algoritmos


Existem trs estruturas bsicas para a construo de algoritmos: sequencial, seleo e repetio. A combinao destas trs estruturas permite-nos a construo de algoritmos para a resoluo de problemas complexos.

Estrutura Sequencial
Imagine a seguinte situao: precisamos elaborar um algoritmo para trocar uma lmpada. Uma estrutura sequencial caracteriza-se por possuir uma nica seqncia de aes, que executada apenas uma vez.

Ilustrao 8: Demonstrao da estrutura sequencial.


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 Observe que este algoritmo resolve o problema da troca de lmpada. No entanto, trata-se de um algoritmo simples que no certifica de que a lmpada a ser trocada realmente est queimada e nem que a nova lmpada funciona.

Estrutura de Seleo (ou condicional)


Antes de trocarmos a lmpada devemos nos certificar de que ela realmente esteja queimada. Este teste pode ser obtido atravs da utilizao de 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).

Ilustrao 9: Demonstrao da estrutura de seleo.


INCIO ligue o interruptor; SE a lmpada no acender, ENTO 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 FIM A estrutura de seleo possui um bloco de cdigo que ser executado se a lmpada no acender. Este bloco tambm delimitado pelas palavras incio e fim e tambm deve ser recuado em relao ao bloco original. Repare que a estrutura SE realiza um teste lgico atravs da expresso lmpada no acender. Um teste lgico possui como caracterstica sempre poder ser avaliado como verdadeiro ou falso. Nesta condio o algoritmo garante que somente sero trocadas lmpadas que no acendam. Como melhoramento, o algoritmo pode verificar se a nova lmpada instalada realmente acende. Caso contrrio dever proceder a troca desta lmpada at que seja instalada uma em perfeitas condies. Isto pode ser obtido atravs da estrutura de repetio.

Estrutura de Repetio
Vamos utilizar a estrutura de repetio para verificar se a nova lmpada instalada realmente acende aps a instalao.

Ilustrao 10: Demonstrao da estrutura de repetio.


INCIO ligue o interruptor; SE a lmpada no acender, ENTO: INCIO pegue uma escada; coloque-a embaixo da lmpada; ENQUANTO a lmpada no acender FAA INCIO busque uma lmpada nova; suba na escada com a lmpada nova; retire a lmpada velha; coloque a lmpada nova; desa da escada; FIM FIM FIM Neste algoritmo somente iremos parar de trocar a lmpada quando colocarmos uma lmpada que acenda. Portanto, um conjunto de aes (bloco de instrues) 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. importante salientar que existem vrias formas de se construir um algoritmo, pois as pessoas pensam de formas diferentes. Finalmente, note que a estrutura ENQUANTO realiza um teste lgico atravs da expresso lmpada no acender.

Variveis e Constantes
Variveis e constantes so conceitos fundamentais para a construo de algoritmos e programas de computadores, pois so atravs deles que um algoritmo guarda os dados do problema. Todo dado que tem a possibilidade de ser alterado (portanto, sofrer variao) no decorrer do tempo, dever ser tratado como uma varivel do problema, e portanto dever ser definido como tal no algoritmo a ser desenvolvido. Quando um dado no tem nenhuma possibilidade de variar com o decorrer do tempo, ele dever ser tratado como uma constante, e dessa forma definido e tratado como tal no algoritmo. Por exemplo, considere o desenvolvimento de um algoritmo para o seguinte problema: calcular as reas de cinco tringulos com medidas diferentes. Sabemos que a frmula para o clculo da rea de um tringulo bxh/2, onde b o valor da base e h o valor da altura do tringulo. Sendo assim, b e h so dados que iro variar no decorrer do tempo de execuo do algoritmo, portanto devero ser tratados como variveis. J o nmero 2 da frmula um dado constante e no sofrer variao no decorrer do tempo de execuo do algoritmo, portanto deve ser tratado como uma constante. Para manipularmos adequadamente os dados do problema no algoritmo, temos que identific-los corretamente dentro deste. Para isso, devemos atribuir nomes a eles. Estes nomes so chamados de identificadores. Seguiremos as seguintes regras para a formao de identificadores: Devem comear por um caractere alfabtico; Podem ser seguidos por mais caracteres alfabticos e/ou numricos; No permitido o uso de caracteres especiais, como: @, #, &, *, +, ? etc.

Exemplos de identificadores vlidos:


a) X b) X3 c) base d) altura1 e) teste_11 a1b2c3 Todo dado a ser tratado num algoritmo deve pertencer a algum tipo que ir determinar o domnio de seu contedo. Os tipos mais comuns de dados so conhecidos como tipos primitivos de dados, so eles: inteiro, real, caractere e lgico. Inteiro: todo e qualquer dado numrico que pertena ao conjunto de nmeros inteiros relativos (negativo, nulo ou positivo). Exemplo: 15. Real: todo e qualquer dado numrico que pertena ao conjunto de nmeros reais (negativo, nulo ou positivo). Exemplo: 125,3. Caractere: todo e qualquer dado composto por um conjunto de caracteres alfanumricos (nmeros, letras e caracteres especiais). Exemplos: Confirma a excluso ?. Lgico: todo e qualquer dado que s pode assumir duas situaes. Exemplo: 0 e 1.

1.1

Comandos de Atribuio

Um comando (ou instruo) pode ser definido como sendo uma ao a ser executada num dado momento pelo algoritmo. O comando de atribuio permite-nos atribuir um valor para uma certa varivel onde o tipo do dado atribudo para a varivel deve ser compatvel com o tipo declarado para a varivel. A sintaxe utilizada ser: identificador = expresso;

Exemplo
Inicio Var X, Y: inteiro; lgico : Z; X = 0; Y = 10 + 7; Z = verdadeiro; Fim

1.2

Entrada de Dados

Na prtica de construo de programas ser muito comum o uso de comandos que proporcionam a entrada de dados para o computador. Assim, devemos ter uma representao correspondente em nvel de algoritmo para a entrada de dados. Utilizaremos o comando leia para efetuar a entrada de dados para o algoritmo, conforme sintaxe abaixo. leia (varivel); onde varivel receber um valor vindo de fora do algoritmo para que algum processamento ocorra.

Exemplo
Inicio inteiro: X; leia(X); Fim

1.3

Comando de Sada de Dados

Na prtica de construo de programas ser muito comum o uso de comandos que proporcionam a sada de dados gerados pelo computador. Assim devemos ter uma representao correspondente em nvel de algoritmo para a sada de dados. Utilizaremos o comando escreva para esta finalidade. escreva (identificador); onde o algoritmo mostrar os valores de variveis, constantes e/ou expresses.

Exemplo
Incio caractere : nome; inteiro : idade; escreva(Entre com o nome da pessoa:); leia(nome); escreva(Entre com a idade da pessoa:); leia(idade); escreva(Nome: , nome, Idade: , idade); Fim

Exerccios Lista 1
Nome Turma

1.

Suponha uma gaveta cheia de meias de cores diversas. Proponha um algoritmo (fluxograma) para encontrar um par de meias vermelhas dado que voc somente pode olhar a cor da meia aps ter retirado-a da gaveta. Suponha uma tv por assinatura de 100 canais. Joo sabe que neste momento est passando um filme que ele deseja assistir, mas no se lembra do nmero do canal. Proponha um algoritmo (fluxograma) para que Joo encontre o canal desejado. Suponha que Joo tenha decidido encontrar o canal atravs de tentativas aleatrias. Como voc avalia a estratgia de Joo? Qual o risco desta estratgia? Apresente um fluxograma que realize a leitura de dois nmeros reais e imprima sua soma. Elabore o fluxograma para imprimir os 50 primeiros nmeros naturais (inteiros). Elabore um algoritmo para o seguinte problema: ler as notas da primeira prova, segunda prova e pontos de exerccios de um aluno. Caso a soma destas trs notas seja igual ou superior a 70 pontos, o algoritmo deve emitir a sada Aluno Aprovado. Caso contrrio, o algoritmo deve imprimir Aluno em Exame Especial. Elabore um algoritmo para o seguinte problema: calcular a remunerao a ser paga para um vendedor. A remunerao composta pelo salrio fixo mais a comisso. A comisso calculada como 2% do montante de vendas que excede a meta mensal do vendedor. Este algoritmo recebe como entradas o salrio fixo, a meta de vendas e o volume vendido no ms pelo vendedor. A sada do algoritmo a remunerao deste ms para o vendedor. Elabore um algoritmo para ler as notas da primeira prova, segunda prova e pontos de exerccios de um aluno. Caso a soma destas trs notas seja igual ou superior a 70 pontos, o algoritmo deve emitir a sada Aluno Aprovado. Caso contrrio, o algoritmo deve imprimir Aluno em Exame Especial.

2.

3.

4. 5. 6.

7.

8.

You might also like