algoritmos

63
 .: NAPRO:. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Introdução aos algoritmos Cristian Koliver Bruno Tonet CAXIAS DO SUL, MARÇO DE 2004 ELABORADO POR BRUNO TONET & CRISTIAN KOLIVER 1

Transcript of algoritmos

.: NAPRO:. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

Introduo aos algoritmosCristian Koliver Bruno Tonet

CAXIAS DO SUL, MARO DE 2004

ELABORADO POR BRUNO TONET & CRISTIAN KOLIVER 1

.: NAPRO:. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

NDICE GERAL1.Introduo aos Algoritmos............................................................................................................................. 3 1.1 Algoritmos No Computacionais .......................................................................................................... 3 1.2 Algoritmos Computacionais................................................................................................................... 4 2.Linearizao de Expresses.......................................................................................................................... 6 3.Forma Geral de um Algoritmo, Variveis e E/S............................................................................................. 9 3.1 Variveis.............................................................................................................................................. 10 3.2 Operador de Atribuio ....................................................................................................................... 12 3.3 Funes de E/S (Entrada/Sada) ........................................................................................................ 12 4.Construindo os Primeiros Algoritmos: Estruturas seqnciais ........................................................................................................................................................................ 14 5.Estrutura Condicional.................................................................................................................................. 16 5.1 Testando o Algoritmo........................................................................................................................... 23 6.Estrutura de Repetio................................................................................................................................ 24 6.1 Comando Enquanto ... faca ................................................................................................................ 28 6.2 Comando para ... faca ........................................................................................................................ 28 6.3 Aninhamento de Laos........................................................................................................................ 30 7.Variveis Compostas Homogneas............................................................................................................ 33 7.1 Variveis Indexadas Unidimensionais ................................................................................................ 33 7.2 Variveis Indexadas Bidimensionais (Matrizes) ................................................................................. 35

ELABORADO POR BRUNO TONET & CRISTIAN KOLIVER 2

.: NAPRO:. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

1.INTRODUO AOS ALGORITMOSUm algoritmo uma seqncia finita de instrues e ordenada de forma lgica para a execuo de uma determinada tarefa ou a resoluo de um determinado problema. So exemplos de algoritmos instrues de montagem, receitas, manuais de uso, etc. Um algoritmo no a soluo do problema, pois, se assim fosse, cada problema teria um nico algoritmo; um algoritmo um caminho para a soluo de um problema. Em geral, existem muitos (seno infinitos) caminhos que levam a uma soluo satisfatria.

1.1 Algoritmos No ComputacionaisUm algoritmo no computacional um algoritmo cuja seqncia de passos, a princpio, no pode ser executada por um computador. Abaixo apresentado um algoritmo no computacional cujo objetivo usar um telefone pblico. Provavelmente voc executou" o algoritmo deste exemplo diversas vezes. O termo algoritmo est muito ligado Cincia da Computao, mas, na realidade, ele pode ser aplicado a qualquer problema cujo caminho da soluo possa ser decomposto em um grupo de instrues.

Exemplo 1.1 Algoritmo para telefonar em um orelho". 1. Tirar o fone do gancho 2. Esperar o sinal de linha 3. Introduzir o carto 4. Teclar o nmero desejado 5. Se escutar sinal de chamada, ento 5.1 Aguardar at atender 5.2 Conversar 5.3 Desligar 5.4 Retirar Carto 6. Seno voltar para 4.

Um outro exemplo tpico de algoritmo uma receita culinria, como no exemplo abaixo.

Exemplo 1.2 Algoritmo para preparar um bolo de fub: Ingredientes: 5 ovos 250 gramas de margarina cremosa 2 xcaras (ch) de acar 1 xcara (ch) de farinha de trigo 1 xcara (ch) de fub 200 gramas de coco ralado 1 copo de leite 1 colher (sopa) de fermento 1. Bata a margarina, as gemas e o acar por 15 minutos 2. Junte o leite, o coco e a farinha e continue batendo por mais 15 minutos 3. Acrescente 20 g de fermento e, por ltimo, as claras em neve 4. Unte uma forma com manteiga e leve ao forno para assar por 30 minutos

Observe que ambos os algoritmos acima so informalmente descritos, uma vez que a linguagem utilizada no rgida, dando margem a ambigidades (mais de uma interpretao para a mesma sentena). Alm disso, seu correto entendimento depende da experincia da pessoa que o executar (por exemplo, no descrito no algoritmo se o forno dever estar baixo, mdio ou alto). Assim, para que um algoritmo possa ser til, necessrio que quem o executar conhea os termos utilizados nas instrues. O algoritmo do exemplo acima s ser til para algum que seja fluente na lngua portuguesa e que conhea o significado dos verbos bater, juntar, acrescentar e untar, assim como dos substantivos utilizados

ELABORADO POR BRUNO TONET & CRISTIAN KOLIVER 3

.: NAPRO:. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO no contexto de uma receita culinria. Em outras palavras, preciso que a linguagem utilizada para descrever o algoritmo seja conhecida tanto por quem o escreveu quanto por quem vai execut-lo. Um algoritmo no , necessariamente, descrito de forma textual. Podemos utilizar tambm figuras para descrev-lo. Uma forma comum para tal atravs de um fluxograma. O algoritmo do exemplo 1.1, atravs de um fluxograma, teria a seguinte forma: Tirar o fone do gancho Esperar o sinal de linha Introduzir o carto Teclar o nmero desejado Sim Sinal de chamada? No ... Aguardar at atender

Retirar o carto

Fim Figura 1.1 Fluxograma. Uma forma de representao de algoritmo estritamente formal atravs de formalismo matemtico. Tal forma, contudo, restringe a representao classe de problemas matemticos.

1.2 Algoritmos ComputacionaisO computador, a princpio, no executa nada. Para que ele faa uma determinada tarefa - calcular uma folha de pagamento, por exemplo - , necessrio que ele execute um programa. Um programa um conjunto de milhares de instrues que indicam ao computador, passo a passo, o que ele tem que fazer. Logo, um programa nada mais do que um algoritmo computacional descrito em uma linguagem de programao. Uma linguagem de programao contm os comandos que fazem o computador escrever algo na tela, realizar clculos aritmticos, receber uma entrada de dados via teclado, e milhares de outras coisas, mas estes comandos precisam estar em uma ordem lgica e contribuir, cada um, para a realizao da tarefa em questo. O termo processamento de dados muitas vezes utilizado em conjunto com computadores, pois, em geral, isto o que eles fazem: processar dados. Da podemos extrair os dois componentes bsicos de um algoritmo (de agora em diante, esta palavra sempre utilizada no contexto de algoritmos computacionais): dados e cdigo. Dados so os valores (nmeros, nomes, etc.) de que precisamos para resolver o problema, e cdigo so os comandos ou instrues que usaremos para manipular e "processar" os dados. Para que o algoritmo possa ser executado por uma mquina importante que as instrues sejam corretas e sem ambigidades. Neste documento, utilizaremos uma linguagem para descrio de algoritmos computacionais semelhante ao Portugus, porm bem mais restrita com relao ao vocabulrio e smbolos e com uma definio clara e precisa de como utilizar esse vocabulrio e conjunto de smbolos. Essa linguagem conhecida como Portugus Estruturado (s vezes tambm chamada de Portugol). O Portugus Estruturado , na verdade, uma simplificao extrema do Portugus, limitada a umas poucas palavras e estruturas que tm um significado muito bem definido. Ao conjunto de palavras e regras que

ELABORADO POR BRUNO TONET & CRISTIAN KOLIVER 4

.: NAPRO:. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO definem o formato das sentenas vlidas chamamos sintaxe da linguagem. Durante este texto, a sintaxe do Portugus Estruturado ser apresentada progressivamente e a utilizaremos em muitos exerccios de resoluo de problemas. Aprender as palavras e regras que fazem parte dessa sintaxe fundamental; no entanto, no o maior objetivo deste curso. O que realmente exigir um grande esforo por parte do estudante aprender a resolver problemas utilizando a linguagem. Para isso, h somente um caminho: resolver muitos problemas. O processo semelhante ao de tornar-se competente em um jogo qualquer: aprender as regras do jogo (a sintaxe) s o primeiro passo, tornar-se um bom jogador (programador) exige tempo, muito exerccio e dedicao. Embora o Portugus Estruturado seja uma linguagem bastante simplificada, ela possui todos os elementos bsicos e uma estrutura semelhante a de uma linguagem tpica para programao de computadores. Alm disso, resolver problemas com Portugus Estruturado, pode ser uma tarefa to complexa quanto a de escrever um programa em uma linguagem de programao qualquer. Portanto, neste curso, estaremos na verdade procurando desenvolver as habilidades bsicas que sero necessrias para adquirir-se competncia na programao de computadores.

ELABORADO POR BRUNO TONET & CRISTIAN KOLIVER 5

.: NAPRO:. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

2.LINEARIZAO DE EXPRESSESUma classe muito comum de algoritmos computacionais envolve a resoluo de problemas matemticos. Para a construo de algoritmos que realizam clculo matemticos, todas as expresses aritmticas devem ser linearizadas, ou seja, colocadas em linhas, devendo tambm ser feito o mapeamento dos operadores da aritmtica tradicional para os do Portugus Estruturado. No Exemplo 2.1 mostrada uma expresso matemtica utilizando a representao usual e a mesma expresso usado os smbolos do Portugus Estruturado.

Exemplo 2.1 A expresso

equivale ((2/3-(5-3))+1)*5

{

2 [ 53 ]1 5 3

}

As tabelas seguintes mostram os operadores aritmticos disponveis no Portugus Estruturado. Operadores Aritmticos Adio Subtrao Multiplicao Diviso Diviso Inteira Exponenciao Mdulo (resto da diviso) Portugus Estruturado + * / \ ^ %

Os quatro primeiros operadores tm uma semntica trivial; o operador de diviso inteira (\) retorna o nmero de vezes que o divisor cabe no dividendo; o operador de resto da diviso retorna o resto da diviso inteira entre seus dois operandos; o operador de exponenciao retorna o resultado do primeiro operando (base) elevado ao segundo (expoente).

Exemplo 2.2 20/7 resulta 2.8571 20\7 resulta 2 7\20 resulta 0 20%7 resulta 6 7%20 resulta 7 4^3 resulta 64 4^0.5 resulta 2 j que

4 4 4=20.5 1/2

Os operadores relacionais realizam a comparao entre dois operandos ou duas expresses e resultam em valores lgicos (VERDADEIRO ou FALSO). Operadores Relacionais Maior Menor Maior ou igual Menor ou igual Igual Portugus Estruturado > < >= 4 resulta VERDADEIRO 33 resulta FALSO

Os operadores lgicos atuam sobre expresses e tambm resultam em valores lgicos VERDADEIRO ou FALSO. Operadores Lgicos Multiplicao lgica Adio lgica Negao Ou exclusivo Portugus Estruturado e ou nao xou Significado Resulta VERDADEIRO se ambas as partes forem verdadeiras. Resulta VERDADEIRO se uma das partes verdadeira. Nega uma afirmao, invertendo o seu valor lgico: se for VERDADEIRO torna-se FALSO, se for FALSO torna-se VERDADEIRO. Resulta em VERDADEIRO se as partes forem diferentes, e em FALSO se forem iguais.

A tabela abaixo chamada tabela-verdade mostra os resultados da aplicao dos operadores lgicos conforme os valores dos operandos envolvidos. A VERDADEIRO VERDADEIRO FALSO FALSO B VERDADEIRO FALSO VERDADEIRO FALSO A e B VERDADEIRO FALSO FALSO FALSO A ou B VERDADEIRO VERDADEIRO VERDADEIRO FALSO nAo A FALSO FALSO VERDADEIRO VERDADEIRO no B FALSO VERDADEIRO FALSO VERDADEIRO A xou B FALSO VERDADEIRO VERDADEIRO FALSO

De acordo com a necessidade, as expresses podem ser unidas pelos operadores lgicos.

Exemplo 2.4 (2+5>4) e (33) resulta FALSO pois VERDADEIRO e FALSO resulta FALSO

A modularizao a diviso de uma expresso em partes, proporcionando maior compreenso e definindo prioridades para a resoluo da mesma. Como pde ser observado no Exemplo 2.1, em expresses computacionais utilizamos somente parnteses "()" para modularizao. Na sintaxe do Portugus Estruturado podemos ter parnteses dentro de parnteses, como seriam os colchetes e as chaves na matemtica. Os parnteses indicam quais sub-expresses, dentro de uma expresso, sero executadas primeiro. A princpio, a execuo da esquerda para direita, mas alm dos parnteses, existem prioridades entre os operadores envolvidos na expresso. Tais prioridades so mostradas nas tabelas seguintes. Operador Aritmtico *, \, /, %, ^ +, Prioridade 2 (maior) 1 (menor)

Exemplo 2.5 (2 + 2)/2 resulta 2 e 2 + 2/2 resulta 3

ELABORADO POR BRUNO TONET & CRISTIAN KOLIVER 7

.: NAPRO:. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Operador Lgico nao ou, e, xou Prioridade 2 1

Entre os operadores relacionais, no h precedncia. Uma expresso lgica, se correta, resultar sempre em VERDADEIRO ou FALSO; uma expresso aritmtica s pode resultar em um valor numrico.

Exemplo 2.6 nao(((4>=3 e 3=3.1) ou (5>4))) ou (4>=3)(2 + 2)/2 resulta FALSO (20+20)/4*3 + (20%7) + 7 - 2.0 + 7/2 + (19\4) resulta 48.5

ELABORADO POR BRUNO TONET & CRISTIAN KOLIVER 8

.: NAPRO:. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

3.FORMA GERAL DE UM ALGORITMO, VARIVEIS E E/SNessa seo vamos conhecer os primeiros elementos que compem o Portugus Estruturado e escrever alguns algoritmos. A estrutura geral de um algoritmo : algoritmo "" var < declarao de variveis> inicio < lista de comandos> fimalgoritmo onde as palavras algoritmo e fimalgoritmo fazem parte da sintaxe da linguagem e sempre delimitam o incio e fim de um algoritmo; a < declarao de variveis> a seo ou parte do algoritmo onde descrevemos os tipos de dados que sero usados na lista de comandos. Por exemplo, poderamos definir que fruta um tipo de dado que pode assumir apenas os valores ma, pra, banana, abacaxi e outras frutas, sobre os quais podemos efetuar as operaes comparar, comprar, comer e servir; inicio indica o fim das declaraes e o incio da seo de comandos; < lista de comandos > apenas uma indicao de que entre as palavras inicio e fimalgoritmo podemos escrever uma lista com uma ou mais instrues ou comandos. importante salientar que, quando um algoritmo executado", as instrues ou comandos de um algoritmo so sempre executados na ordem em que aparecem, (a princpio, de cima para baixo). As palavras que fazem parte da sintaxe da linguagem so palavras reservadas, ou seja, no podem ser usadas para outro propsito em um algoritmo que no seja aquele previsto nas regras de sintaxe. A palavra algoritmo, por exemplo, uma palavra reservada. Neste texto, as palavras reservadas sempre aparecero em negrito. Os comentrios so textos que que servem para explicar determinadas instrues do algoritmo, servindo apenas para fins de documentao. Antes de um comentrio aparecem duas barras normais (//). Todo o texto que voc digitar aps as duas barras at o final da linha ser comentrio.

Exemplo 3.1 algoritmo "Soma dois" var op1, op2, op3: numerico inicio // Este algoritmo coloca em uma varivel op3