You are on page 1of 34

# FIT - Faculdade de Informtica de Taquara Curso de Sistemas de Informao

Maro de 2007

## Apostila de Lgica de Programao - Algoritmos

Sumrio Pgina
1 INTRODUO ..................................................................................................................................................................3 2 FORMAS DE REPRESENTAO DE ALGORITMOS ..............................................................................................5 2.1 DIAGRAMA NASSI-SHNEIDERMAN .................................................................................................................................5 2.2 FLUXOGRAMA ................................................................................................................................................................6 2.3 PORTUGUS ESTRUTURADO ...........................................................................................................................................7 3 CONCEITOS IMPORTANTES .......................................................................................................................................8 3.1 CONSTANTES .................................................................................................................................................................8 3.2 VARIVEIS .....................................................................................................................................................................8 3.3 ATRIBUIO ..................................................................................................................................................................9 4 INSTRUO ESCREVER .............................................................................................................................................10 5 OPERADORES ARITMTICOS...................................................................................................................................11 6 INSTRUO LER...........................................................................................................................................................12 7 HORIZONTALIZAO.................................................................................................................................................12 8 ALGORITMOS COM SELEO .................................................................................................................................13 8.1 ESTRUTURA DE SELEO ANINHADA ..........................................................................................................................13 8.2 ESTRUTURA DE SELEO CONCATENADA ...................................................................................................................14 9 OPERADORES RELACIONAIS ...................................................................................................................................15 10 OPERADORES LGICOS...........................................................................................................................................16 11 ALGORITMOS COM REPETIO...........................................................................................................................18 11.1 ESTRUTURA DE REPETIO: REPITA-AT..............................................................................................................19 11.2 ESTRUTURA DE REPETIO: ENQUANTO-FAA...................................................................................................20 11.3 ESTRUTURA DE REPETIO: PARA-AT-FAA .....................................................................................................21 12 DIZER SIM PARA CONTINUAR OU NO PARA FINALIZAR ...........................................................................21 13 CONTADORES E ACUMULADORES.....................................................................................................................22 13.1 CONTADORES .............................................................................................................................................................22 13.2 ACUMULADORES (OU SOMADORES)...........................................................................................................................23 14 DETERMINAO DO MAIOR E/OU MENOR VALOR EM UM CONJUNTO DE VALORES .......................24 15 REPETIO ANINHADA ...........................................................................................................................................25 16 VETORES .......................................................................................................................................................................26 16.1 COMO LER UM VETOR (PREENCHER)........................................................................................................................27 16.2 COMO ESCREVER UM VETOR..................................................................................................................................28 17 RESPOSTAS DOS EXEMPLOS ..................................................................................................................................29 REFERNCIAS BIBLIOGRFICAS................................................................................................................................34

## Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

1 Introduo Nesta apostila estudaremos Lgica de Programao e, para isto, importante ter uma viso geral do processo de desenvolvimento de programas (softwares), visto que o objetivo final ter um bom embasamento para a prtica da programao de computadores [MAR03]. Para o desenvolvimento de qualquer programa, deve-se seguir basicamente as seguintes etapas, conhecidas como Ciclo de Vida do Sistema [BUF03]: 1) Estudo da Viabilidade (Estudos Iniciais) 2) Anlise detalhada do sistema (Projeto Lgico) 3) Projeto preliminar do sistema (Projeto Fsico) 4) Projeto detalhado do sistema (Algoritmos) 5) Implementao ou Codificao do sistema (na Linguagem de Programao escolhida) 6) Testes do sistema 7) Instalao e Manuteno do sistema No desenvolvimento de um sistema, quanto mais tarde um erro detectado, mais dinheiro e tempo se gasta para repar-lo. Assim, a responsabilidade do programador maior na criao dos algoritmos do que na sua prpria implementao, pois quando bem projetados no se perde tempo tendo que refaz-los, reimplant-los e retest-los, assegurando assim um final feliz e no prazo previsto para o projeto [BUF03]. Pode-se encontrar na literatura em informtica vrias formas de representao das etapas que compem o ciclo de vida de um sistema. Essas formas de representao podem variar tanto na quantidade de etapas quanto nas atividades a serem realizadas em cada fase [MAR03]. Como pode-se observar, nesse exemplo de ciclo de vida de um sistema (com sete fases) apresentado acima, os algoritmos fazem parte da quarta etapa do desenvolvimento de um programa. Na verdade, os algoritmos esto presentes no nosso dia-a-dia sem que saibamos, pois uma receita culinria, as instrues de uso de um equipamento ou as indicaes de um instrutor sobre como estacionar um carro, por exemplo, nada mais so do que algoritmos. Um algoritmo pode ser definido como um conjunto de regras (instrues), bem definidas, para soluo de um determinado problema. Segundo o dicionrio Michaelis, o conceito de algoritmo a "utilizao de regras para definir ou executar uma tarefa especfica ou para resolver um problema especfico." A partir desses conceitos de algoritmos, pode-se perceber que a palavra algoritmo no um termo computacional, ou seja, no se refere apenas rea de informtica. uma definio ampla que agora que voc j sabe o que significa, talvez a utilize no seu cotidiano normalmente. Na informtica, o algoritmo o "projeto do programa", ou seja, antes de se fazer um programa (software) na Linguagem de Programao desejada (Pascal, C, Delphi, etc.) deve-se fazer o algoritmo do programa. J um programa, um algoritmo escrito numa forma compreensvel pelo computador (atravs de uma Linguagem de Programao), onde todas as aes a serem executadas devem ser especificadas nos mnimos detalhes e de acordo com as regras de sintaxe1 da linguagem escolhida.

Sintaxe: segundo o dicionrio Aurlio, a parte da gramtica que estuda a disposio das palavras na frase e a das frases no discurso, bem como a relao lgica das frases entre si. Cada Linguagem de Programao tem a sua sintaxe (instrues, comandos, etc) que deve ser seguida corretamente para que o programa funcione. O conjunto de palavras e regras que definem o formato das sentenas vlidas chama-se de sintaxe da linguagem.

## Apostila de Lgica de Programao - Algoritmos

Um algoritmo no a soluo de um problema, pois, se assim fosse, cada problema teria um nico algoritmo. Um algoritmo um 'caminho' para a soluo de um problema e, em geral, existem muitos caminhos que levam a uma soluo satisfatria, ou seja, para resolver o mesmo problema podese obter vrios algoritmos diferentes. Nesta disciplina estudaremos os passos bsicos e as tcnicas para a construo de algoritmos atravs de trs mtodos para sua representao, que so alguns dos mais conhecidos. O objetivo ao final da disciplina, que voc tenha adquirido capacidade de transformar qualquer problema em um algoritmo de boa qualidade, ou seja, a inteno que voc aprenda a Lgica de Programao dando uma base terica e prtica suficientemente boa, para que voc domine os algoritmos e esteja habilitado a aprender uma Linguagem de Programao posteriormente [BUF03]. Para resolver um problema no computador necessrio que seja primeiramente encontrada uma maneira de descrever este problema de uma forma clara e precisa. preciso que encontremos uma seqncia de passos que permitam que o problema possa ser resolvido de maneira automtica e repetitiva. Esta seqncia de passos chamada de algoritmo [GOM04]. A noo de algoritmo central para toda a computao. A criao de algoritmos para resolver os problemas uma das maiores dificuldades dos iniciantes em programao em computadores [GOM04]. Uma das formas mais eficazes de aprender algoritmos atravs de muitos exerccios. Veja na Tabela 1 algumas dicas de como aprender e como no aprender algoritmos: Algoritmos no se aprende Copiando algoritmos Estudando algoritmos prontos Algoritmos se aprende Construindo algoritmos Testando algoritmos

## Tabela 1: Dicas de como aprender e como no aprender algoritmos

O aprendizado da Lgica essencial para a formao de um bom programador, servindo como base para o aprendizado de todas as Linguagens de Programao, estruturadas ou no. De um modo geral esses conhecimentos sero de supra importncia, pois ajudaro no cotidiano, desenvolvendo um raciocnio rpido [COS04].

## Apostila de Lgica de Programao - Algoritmos

2 Formas de Representao de Algoritmos Os algoritmos podem ser representados de vrias formas, como por exemplo: a) Atravs de uma lngua (portugus, ingls, etc.): forma utilizada nos manuais de instrues, nas receitas culinrias, bulas de medicamentos, etc. b) Atravs de uma linguagem de programao (Pascal, C, Delphi, etc.): esta forma utilizada por alguns programadores experientes, que "pulam" a etapa do projeto do programa (algoritmo) e passam direto para a programao em si. c) Atravs de representaes grficas: so bastante recomendveis, j que um "desenho" (diagrama, fluxograma, etc.) muitas vezes substitui, com vantagem, vrias palavras. Cada uma dessas formas de representar um algoritmo, tem suas vantagens e desvantagens, cabe a pessoa escolher a forma que melhor lhe convir. Nesta disciplina sero apresentadas trs formas de representao de algoritmos (que so algumas das mais utilizadas), so elas: - Diagrama de Nassi-Shneiderman (Diagrama de Chapin) - Fluxograma (Diagrama de Fluxo) - Portugus Estruturado (Pseudocdigo, Portugol ou Pseudolinguagem) No existe consenso entre os especialistas sobre qual a melhor maneira de representar um algoritmo. Eu aconselho a utilizao do Diagrama Nassi-Shneiderman, mais conhecido como Diagrama de Chapin, por achar que a forma mais didtica de aprender e representar a lgica dos problemas e durante a disciplina usarei esse diagrama nos exemplos e exerccios. Mas, fica a critrio de cada um escolher a forma que achar mais conveniente ou mais fcil de entender. Nos prximos captulos so apresentadas breves explicaes sobre cada uma dessas trs formas de representar algoritmos e alguns exemplos.

2.1 Diagrama Nassi-Shneiderman Os Diagramas Nassi-Shneiderman, tambm conhecidos como Diagramas de Chapin, surgiram nos anos 70 [YOU04] [SHN03] [CHA02] [NAS04] como uma maneira de ajudar nos esforos da abordagem de programao estruturada. Um tpico diagrama Nassi-Shneiderman apresentado na Figura 1 abaixo. Como voc pode ver, o diagrama fcil de ler e de entender, cada "desenho" representa uma ao (instruo) diferente.

## Figura 1: Exemplo de Diagrama Nassi-Shneiderman

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

## Apostila de Lgica de Programao - Algoritmos

A idia bsica deste diagrama representar as aes de um algoritmo dentro de um nico retngulo, subdividindo-o em retngulos menores, que representam os diferentes blocos de seqncia de aes do algoritmo. Para saber mais sobre o histrico desses diagramas e conhecer os seus criadores acesse o site: http://www.cs.umd.edu/hcil/members/bshneiderman/nsd/. Para ter acesso ao primeiro artigo elaborado pelos autores do Diagrama de Chapin, escrito em 1973, acesse o seguinte endereo onde voc pode fazer o download do artigo: http://fit.faccat.br/~fpereira/p12-nassi.pdf.

2.2 Fluxograma Os Fluxogramas ou Diagramas de Fluxo, so uma representao grfica que utilizam formas geomtricas padronizadas ligadas por setas de fluxo, para indicar as diversas aes (instrues) e decises que devem ser seguidas para resolver o problema em questo. Eles permitem visualizar os caminhos (fluxos) e as etapas de processamento de dados possveis e, dentro destas, os passos para a resoluo do problema. A seguir, na Figura 2, apresentado um exemplo de fluxograma [GOM04] [MAR03].

## Apostila de Lgica de Programao - Algoritmos

2.3 Portugus Estruturado O Portugus Estruturado, uma forma especial de linguagem bem mais restrita que a Lngua Portuguesa e com significados bem definidos para todos os termos utilizados nas instrues (comandos). Essa linguagem tambm conhecida como Portugol (juno de Portugus com Algol [ALG96] [PRO04]), Pseudocdigo ou Pseudolinguagem. O Portugus Estruturado na verdade uma simplificao extrema da lngua portuguesa, limitada a pouqussimas palavras e estruturas que tm significado pr-definido, pois deve-se seguir um padro. Emprega uma linguagem intermediria entre a linguagem natural e uma linguagem de programao, para descrever os algoritmos. A sintaxe do Portugus Estruturado no precisa ser seguida to rigorosamente quanto a sintaxe de uma linguagem de programao, j que o algoritmo no ser executado como um programa [TON04]. Embora o Portugus Estruturado seja uma linguagem bastante simplificada, ela possui todos os elementos bsicos e uma estrutura semelhante de uma linguagem de programao de computadores. Portanto, resolver problemas com portugus estruturado pode ser uma tarefa to complexa quanto a de escrever um programa em uma linguagem de programao qualquer s no to rgida quanto a sua sintaxe, ou seja, o algoritmo no deixa de funcionar porque esquecemos de colocar um ';' (ponto-evrgula) por exemplo, j um programa no funcionaria. A Figura 3 apresenta um exemplo de algoritmo na forma de representao de portugus estruturado.

## Apostila de Lgica de Programao - Algoritmos

3 Conceitos Importantes Neste captulo so apresentados e explicados trs conceitos fundamentais para a construo de algoritmos, so eles: Constante, Varivel e Atribuio.

3.1 Constantes So chamadas de constantes, as informaes (dados) que no variam com o tempo, ou seja, permanecem sempre com o mesmo contedo, um valor fixo (invarivel). Como exemplos de constantes pode-se citar: nmeros, letras, palavras etc.

3.2 Variveis O bom entendimento do conceito de varivel fundamental para elaborao de algoritmos e, conseqentemente de programas. Uma varivel, um espao da memria do computador que "reservamos" para guardar informaes (dados). Como o prprio nome sugere, as variveis, podem conter valores diferentes a cada instante de tempo, ou seja, seu contedo pode variar de acordo com as instrues do algoritmo. As variveis so referenciadas atravs de um nome (identificador) criado por voc durante o desenvolvimento do algoritmo. Exemplos de nomes de variveis: produto, idade, a, x, nota1, peso, preo, etc. O contedo de uma varivel pode ser alterado, consultado ou apagado quantas vezes forem necessrias durante o algoritmo. Mas, ao alterar o contedo da varivel, a informao anterior perdida, ou seja, sempre "vale" a ltima informao armazenada na varivel. Uma varivel armazena 'apenas' um contedo de cada vez. Uma varivel pode ser vista como uma caixa com um rtulo (nome) colado nela, que em um dado momento guarda um determinado objeto. O contedo desta caixa no algo fixo, permanente. Na verdade, essa caixa pode ter seu contedo alterado diversas vezes. No exemplo abaixo, a caixa (varivel) rotulada como FATOR, contm o valor 5. Em outro momento essa caixa poder conter qualquer outro valor numrico. Entretanto, a cada instante, ela conter um, e somente um, valor [TON04].

## Apostila de Lgica de Programao - Algoritmos

3.3 Atribuio A atribuio uma notao utilizada para atribuir um valor a uma varivel, ou seja, para armazenar um determinado contedo em uma varivel. A operao de atribuio, normalmente, representada por uma seta apontando para a esquerda, mas existem outros smbolos para representar a atribuio, depende da forma de representao do algoritmo. Na Tabela 2 a seguir, so apresentados alguns exemplos de atribuies possveis:

Atribuies Possveis varivel varivel varivel constante varivel expresso idade preo A

## Tabela 2: Exemplos de Atribuies

Uma observao importante a ser feita em relao a atribuies que na parte esquerda (a que vai "receber" algo) no pode haver nada alm da varivel, ou seja, s varivel que "recebe" algum contedo, no possvel ter um clculo por exemplo, ou uma constante, recebendo alguma coisa. Veja por exemplo, esta notao: valor nota1 + nota2 Esta operao apresentada acima no possvel, no est correta esta atribuio.

## Apostila de Lgica de Programao - Algoritmos

4 Instruo Escrever Existem basicamente duas instrues principais em algoritmos (e em programao em geral) que so: Escrever e Ler. Neste captulo veremos como funciona a instruo Escrever. A instruo Escrever utilizada quando deseja-se mostrar informaes na tela do computador, ou seja, um comando de sada de dados. Para simplificar, usa-se a instruo Escrever, quando necessita-se mostrar algum dado para o usurio do algoritmo (e posteriormente do programa). Tanto no Diagrama de Chapin quanto em Portugus Estruturado representa-se a sada de dados atravs da palavra Escrever (ou Escreva). J em Fluxogramas a representao da sada de dados feita atravs de uma forma geomtrica especfica [GOM04] [MAR03]. Exemplos: 1) Escreva um algoritmo para armazenar o valor 20 em uma varivel X e o valor 5 em uma varivel Y. A seguir, armazenar a soma do valor de X com o de Y em uma varivel Z. Escrever (na tela) o valor armazenado em X, em Y e em Z. (Captulo 17: Respostas dos Exemplos).

2) Escreva um algoritmo para armazenar o valor 4 em uma varivel A e o valor 3 em uma varivel B. A seguir, armazenar a soma de A com B em uma varivel C e a subtrao de A com B em uma varivel D. Escrever o valor de A, B, C e D e tambm escrever a mensagem 'Fim do Algoritmo'.

Observao: Note que quando queremos escrever alguma mensagem na tela (letra, frase, nmero etc.) literalmente, devemos utilizar aspas para identificar o que ser escrito, pois o que estiver entre aspas no algoritmo, ser exatamente o que aparecer na tela do computador. Diferente de quando queremos escrever o contedo de uma varivel, pois neste caso no utiliza-se aspas.

10

## Apostila de Lgica de Programao - Algoritmos

5 Operadores Aritmticos Muitas vezes, ao desenvolvermos algoritmos, comum utilizarmos expresses matemticas para a resoluo de clculos. Neste captulo so apresentados os operadores aritmticos necessrios para determinadas expresses. Veja a Tabela 3 a seguir.

Smbolo * / + -

## Tabela 3: Operadores Aritmticos

Nas linguagens de programao e, portanto, nos exerccios de algoritmos que iremos desenvolver, as expresses matemticas sempre obedecem s regras matemticas comuns, ou seja:

As expresses dentro de parnteses so sempre resolvidas antes das expresses fora dos parnteses. Quando existem vrios nveis de parnteses, ou seja, um parntese dentro de outro, a soluo sempre inicia do parntese mais interno at o mais externo (de dentro para fora). Quando duas ou mais expresses tiverem a mesma prioridade, a soluo sempre iniciada da expresso mais esquerda at a mais direita.

Desta forma, veja os seguintes exemplos e os respectivos resultados: ExemploA: 2 + (6 * (3 + 2)) = 32 ExemploB: 2 + 6 * (3 + 2) = 32

11

## Apostila de Lgica de Programao - Algoritmos

6 Instruo Ler Como vimos no captulo 4 Instruo Escrever, existem basicamente duas instrues principais em algoritmos (e em programao em geral) que so: Escrever e Ler. No captulo 4, foi apresentada a instruo Escrever, agora, neste captulo, veremos como funciona a instruo Ler. A instruo Ler utilizada quando deseja-se obter informaes do teclado do computador, ou seja, um comando de entrada de dados. Para simplificar, usa-se a instruo Ler, quando necessita-se que o usurio do algoritmo digite algum dado (e posteriormente do programa). Tanto no Diagrama de Chapin quanto em Portugus Estruturado representa-se a entrada de dados atravs da palavra Ler (ou Leia). J em Fluxogramas a representao da entrada de dados feita atravs de uma forma geomtrica especfica [GOM04] [MAR03]. Exemplo 3: Escreva um algoritmo para ler dois valores e armazenar cada um em uma varivel. A seguir, armazenar a soma dos dois valores lidos em uma terceira varivel. Escrever o resultado da soma efetuada.

7 Horizontalizao Para o desenvolvimento de algoritmos que possuam clculos matemticos, as expresses aritmticas devem estar horizontalizadas, ou seja, linearizadas e tambm no esquecendo de utilizar os operadores corretamente. Na Tabela 4 a seguir, apresentado um exemplo de uma expresso aritmtica na forma tradicional e como deve ser utilizada nos algoritmos e em programao em geral (linearmente). Matemtica Tradicional Algoritmo

(N1 + N2) / 2

## Tabela 4: Exemplo de Horizontalizao de Expresses Aritmticas

As expresses matemticas na forma horizontalizada no so apenas utilizadas em algoritmos, mas tambm na maioria das linguages de programao.

12

## Apostila de Lgica de Programao - Algoritmos

8 Algoritmos com Seleo At agora estvamos trabalhando com algoritmos puramente seqenciais, ou seja, todas as instrues eram executadas seguindo a ordem do algoritmo (normalmente, de cima para baixo). Neste captulo comearemos a estudar estruturas de seleo. Uma estrutura de seleo, como o prprio nome j diz, permite que determinadas instrues sejam executadas ou no, dependendo do resultado de uma condio (teste), ou seja, o algoritmo vai ter mais de uma sada, uma opo que ser executada de acordo com o teste realizado. Exemplo 4: Escreva um algoritmo para ler um valor. Se o valor lido for igual a 6, escrever a mensagem 'Valor lido o 6', caso contrrio escrever a mensagem 'Valor lido no o 6'.

Quando estivermos utilizando algoritmos com seleo, podemos utilizar dois tipos de estruturas diferentes, dependendo do objetivo do algoritmo, chamadas de "Seleo Mltipla", cujos tipos so: Estrutura Aninhada e Estrutura Concatenada. Os captulos 8.1 e 8.2 a seguir, apresentam estas duas estruturas com suas caractersticas.

8.1 Estrutura de Seleo Aninhada A estrutura de seleo aninhada normalmente utilizada quando estivermos fazendo vrias comparaes (testes) sempre com a mesma varivel. Esta estrutura chamada de aninhada porque na sua representao (tanto em Chapin quanto em Portugus Estruturado) fica uma seleo dentro de outra seleo. Vamos utilizar a resposta do exerccio nmero 27 da nossa lista de exerccios como exemplo destes dois tipos de estruturas. Abaixo apresentada a resposta do exerccio 27 em Chapin utilizandose a estrutura aninhada:

13

## Apostila de Lgica de Programao - Algoritmos

8.2 Estrutura de Seleo Concatenada A estrutura de seleo concatenada normalmente utilizada quando estivermos comparando (testando) variveis diferentes, ou seja, independentes entre si. Esta estrutura chamada de concatenada porque na sua representao (tanto em Chapin quanto em Portugus Estruturado) as selees ficam separadas uma da outra (no existe o lado "falso" do Chapin, ou o "Seno" do Portugus). Abaixo apresentada a resposta do exerccio nmero 27 da nossa lista de exerccios, utilizando a estrutura de seleo concatenada em Chapin:

## Exemplo de Estrutura de Seleo Concatenada: Resposta do Exerccio 27

Como pode ser observado nessas duas respostas apresentadas para o exerccio 27 (estrutura aninhada e estrutura concatenada), existe uma grande diferena entre as duas estruturas, ou seja, uma caracterstica de execuo do algoritmo. Voc saberia dizer qual esta diferena?

14

## Apostila de Lgica de Programao - Algoritmos

9 Operadores Relacionais Operaes relacionais so as comparaes permitidas entres valores, variveis, expresses e constantes. A Tabela 5 a seguir, apresenta os tipos de operadores relacionais.

Smbolo

## A seguir, na Tabela 6, so apresentados alguns exemplos de comparaes vlidas:

Comparao Vlida varivel e constante varivel e varivel varivel e expresso expresso e expresso X=3 A<>B

Exemplo

Y=W+J (X + 1) < (Y + 4)

15

## Apostila de Lgica de Programao - Algoritmos

10 Operadores Lgicos Os operadores lgicos permitem que mais de uma condio seja testada em uma nica expresso, ou seja, pode-se fazer mais de uma comparao (teste) ao mesmo tempo. A Tabela 7 a seguir, apresenta os operadores lgicos que utilizaremos nesta disciplina.

## Tabela 7: Operadores Lgicos

Note que a Tabela 7 acima, apresenta os operadores lgicos j ordenados de acordo com suas prioridades, ou seja, se na mesma expresso tivermos o operador ou e o operador no, por exemplo, primeiro devemos executar o no e depois o ou. De uma forma geral, os resultados possveis para os operadores lgicos podem ser vistos na Tabela 8 abaixo, conhecida como Tabela Verdade:

A F F V V

B F V F V

AeB F F F V

A ou B F V V V

no A V V F F

A xou B F V V F

## Tabela 8: Possveis Resultados dos Testes Lgicos - Tabela Verdade

Exemplos de Testes utilizando Operadores Lgicos: Exemplos usando operadores lgicos [KOZ06]: Expresso Se chover e relampejar, eu no saio. Quando eu no saio? Somente quando chover e relampejar ao mesmo tempo (apenas 1 possibilidade). Somente quando chover, somente quando relampejar ou quando chover e relampejar ao mesmo tempo (3 possibilidades). Somente quando chover, ou somente quando relampejar (2 possibilidades).

16

## Apostila de Lgica de Programao - Algoritmos

Exemplos A, B e C abaixo so apresentados em Portugus Estruturado: A) Se (salario > 180) e (salrio < 800) Ento Escrever 'Salrio vlido para financiamento' Seno Escrever 'Salrio fora da faixa permitida para financiamento' FimSe Se (idade < 18) ou (idade > 95) Ento Escrever 'Voc no pode fazer carteira de motorista' Seno Escrever 'Voc pode possuir carteira de motorista' FimSe

B)

C)

Se (idade > = 18) e (idade < = 95) e (aprovado_exame = 'sim') Ento Escrever 'Sua carteira de motorista estar pronta em uma semana' Seno Escrever 'Voc no possui idade permitida ou no passou nos testes' FimSe

Exemplos de expresses utilizando operadores lgicos [KOZ06]: Para A = V, B = F e C = F , as expresses abaixo fornecem os seguintes resultados: Expresso a) no A b) A e B c) A ou B xou B ou C d) no (B ou C) e) no B ou C no V = F V e F = F (V ou F) xou (F ou F) = V xou F = V no (F ou F) = no F = V (no F) ou F = V ou F = V Resultado

Exemplo utilizando Operadores Lgicos em Chapin: 5) Escreva um algoritmo para ler um valor e escrever se ele est entre os nmeros 1 e 10 ou no est.

Ao verificar as respostas (errada e correta) do exemplo nmero 5 acima, pode-se constatar que quando precisamos fazer mais de um teste ao mesmo tempo, deve-se utilizar os operadores lgicos apresentados neste captulo na tabela 7.

17

## Apostila de Lgica de Programao - Algoritmos

11 Algoritmos com Repetio Nos exemplos e exerccios que vimos at agora, sempre foi possvel resolver os problemas com uma seqncia de instrues que eram executadas apenas uma vez. Existem trs estruturas bsicas para a construo de algoritmos, que so: algoritmos seqenciais, algoritmos com seleo e algoritmos com repetio. A combinao dessas trs estruturas permite-nos a construo de algoritmos para a resoluo de problemas extremamente complexos [MAR03]. Nos captulos anteriores vimos a estrutura puramente seqencial e algoritmos com seleo (captulo 8). Neste captulo veremos as estruturas de repetio possveis em algoritmos e existentes na maioria das Linguagens de Programao. Uma estrutura de repetio permite que uma seqncia de instrues (comandos) seja executada vrias vezes, at que uma condio (teste) seja satisfeita, ou seja, repete-se um conjunto de instrues sem que seja necessrio escrev-las vrias vezes. As estruturas de repetio tambm so chamadas de Laos ou Loops [MAR03]. Para sabermos quando utilizar uma estrutura de repetio, basta analisarmos se uma instruo ou uma seqncia de instrues precisa ser executada vrias vezes, se isto se confirmar, ento deve-se utilizar uma estrutura de repetio. As estruturas de repetio, assim como a de deciso (seleo), envolvem a avaliao de uma condio (teste). Ento as estruturas de repetio permitem que um trecho do algoritmo (conjunto de instrues) seja repetido um nmero determinado (ou indeterminado) de vezes, sem que o cdigo correspondente, ou seja, as instrues a serem repetidas tenham que ser escritas mais de uma vez [TON04]. Exemplo 6: Escreva um algoritmo para comer um cacho de uva.

A resposta apresentada (em Chapin e em Portugus Estruturado) est correta? Na soluo do exemplo 6 apresentada na Seo de Respostas dos Exemplos (Captulo 17), no foi utilizada uma estrutura de repetio, por isto o algoritmo no est correto. Nesse exemplo nmero 6 necessria uma estrutura de repetio, pois a instruo "comer 1 uva" precisa ser repetida vrias vezes. Existem trs tipos de estruturas de repetio: Repita-At, Enquanto-Faa e Para-At-Faa, cada uma com suas peculiaridades e apropriada para cada problema, normalmente possvel resolver um mesmo problema usando qualquer uma das estruturas de repetio, mas, na maioria das situaes, haver uma mais adequada. Neste captulo veremos as caractersticas de cada uma destas estruturas. Mas antes, veja a resposta do exemplo nmero 6 utilizando uma estrutura de repetio (Repita-At): Chapin Portugus Estruturado

18

## Apostila de Lgica de Programao - Algoritmos

11.1 Estrutura de Repetio: REPITA-AT Na estrutura Repita-At as instrues a serem repetidas so executadas, no mnimo uma vez, j que o teste (a condio) fica no final da repetio. Nesta estrutura, a repetio finalizada quando o teste for Verdadeiro (V), ou seja, o algoritmo fica executando as instrues que estiverem dentro do lao at que o teste seja verdadeiro. Nas Figuras 5 e 6 abaixo, apresentada a forma geral da estrutura RepitaAt em Chapin e em Portugus Estruturado, respectivamente.

## Figura 6: Estrutura Repita-At em Portugus Estruturado

Observaes da estrutura de repetio REPITA-AT: 1) A repetio (o lao) se encerra quando a condio (teste) for verdadeira. 2) As instrues a serem repetidas so executadas pelo menos 1 vez, porque o teste no final da repetio.

Pergunta: No exemplo 6 anterior, utilizando uma estrutura de repetio, que no caso utilizou-se a estrutura Repita, o algoritmo ficou correto?

19

## Apostila de Lgica de Programao - Algoritmos

11.2 Estrutura de Repetio: ENQUANTO-FAA Na estrutura Enquanto-Faa as instrues a serem repetidas podem no ser executadas nenhuma vez, pois o teste fica no incio da repetio, ento a execuo das instrues (que esto "dentro" da repetio) depende do teste. Nesta estrutura, a repetio finalizada quando o teste Falso (F), ou seja, enquanto o teste for Verdadeiro as instrues sero executadas e, quando for Falso, o lao finalizado. Veja nas Figuras 7 e 8 abaixo a forma geral da estrutura Enquanto-Faa em Chapin e em Portugus Estruturado.

## Figura 8: Estrutura Enquanto-Faa em Portugus Estruturado

Observaes da estrutura de repetio ENQUANTO-FAA: 1) A repetio (o lao) se encerra quando a condio (teste) for falsa. 2) As instrues a serem repetidas podem nunca ser executadas, porque o teste no incio da repetio.

20

## Apostila de Lgica de Programao - Algoritmos

11.3 Estrutura de Repetio: PARA-AT-FAA A estrutura de repetio Para-At-Faa um pouco diferente das outras duas (Repita-At e EnquantoFaa), pois possui uma varivel de controle, ou seja, com esta estrutura possvel executar um conjunto de instrues um nmero determinado de vezes. Atravs da varivel de controle, define-se a quantidade de repeties que o lao far.

## Exemplo 7: Escreva um algoritmo para escrever 5 vezes a palavra FACCAT na tela.

Funcionamento da estrutura PARA: Na resposta do exemplo 7 acima, o X a varivel de controle, ou seja, uma varivel qualquer (com qualquer nome) que vai determinar o nmero de repeties do lao. O valor 1 o valor inicial que ser atribudo varivel X e o valor 5 o valor final atribudo varivel X, com isto, tem-se 5 repeties da instruo (ou das instrues) que estiver dentro do lao. Cada vez que a varivel incrementada (aumenta +1) as instrues de dentro da repetio so executadas, ento a varivel, no caso o X, inicia com o valor 1 e a cada execuo (repetio) ele aumenta +1 ( incrementado) at chegar ao valor final, que tambm determinado (no caso o 5). ATENO: Voc saberia dizer qual a grande diferena entre a estrutura de repetio Para e as estruturas Repita e Enquanto?

## 12 Dizer SIM para Continuar ou NO para Finalizar

Exemplo 8: Escreva um algoritmo para ler dois valores. Aps a leitura deve-se calcular a soma dos valores lidos e armazen-la em uma varivel. Aps o clculo da soma, escrever o resultado e escrever tambm a pergunta 'Novo Clculo (S/N)?'. Deve-se ler a resposta e se a resposta for 'S' (sim), deve-se repetir todos os comandos (instrues) novamente, mas se a resposta for 'N' (no), o algoritmo deve ser finalizado escrevendo a mensagem 'Fim dos Clculos'.

21

## Apostila de Lgica de Programao - Algoritmos

13 Contadores e Acumuladores Em algoritmos com estruturas de repetio (Repita, Enquanto ou Para) comum surgir a necessidade de utilizar variveis do tipo contador e/ou acumulador. Neste captulo so apresentados esses conceitos detalhadamente.

13.1 Contadores Um contador utilizado para contar o nmero de vezes que um evento (uma instruo) ocorre, ou seja, contar a quantidade de vezes que uma instruo executada. Forma Geral: VARIVEL Exemplo: X X + 1 VARIVEL + CONSTANTE

Explicao: um contador uma varivel (qualquer) que recebe ela mesma mais um valor (uma constante), no caso do exemplo acima, a varivel X est recebendo o valor dela mesma mais 1. Normalmente a constante que ser somada no contador o valor 1, para contar de 1 em 1, mas pode ser qualquer valor, como por exemplo 2, se quisermos contar de 2 em 2. Observaes dos Contadores: 1) A varivel (do contador) deve possuir um valor inicial conhecido, isto , ela deve ser inicializada. Normalmente inicializa-se a varivel do contador com zero, ou seja, zera-se a varivel antes de utilizla. Para zerar uma varivel basta atribuir a ela o valor zero: VARIVEL 0 2) A constante (que geralmente o valor 1) determina o valor do incremento da varivel (do contador), ou seja, o que ser somado (acrescido) a ela.

Exemplo 9: Escreva um algoritmo para ler a nota de 10 alunos e contar quantos foram aprovados, sendo que, para ser aprovado, a nota deve ser maior ou igual a 6,0. Escrever o nmero de aprovados.

ATENO: Se quisssemos contar o nmero de reprovados tambm, no exemplo 9 acima, o que deveria ser feito?

22

## Apostila de Lgica de Programao - Algoritmos

13.2 Acumuladores (ou Somadores) Um acumulador, tambm conhecido como Somador, utilizado para obter somatrios ( ). Forma Geral: VARIVEL1 Exemplo: X X + Y VARIVEL1 + VARIVEL2

Explicao: um acumulador (somador) uma varivel (qualquer) que recebe ela mesma mais uma outra varivel, no caso do exemplo acima, a varivel X est recebendo o valor dela mesma mais o valor da varivel Y. A varivel Y representa o valor a ser somado, acumulado na varivel X. Observaes dos Acumuladores: 1) A varivel1 (do acumulador) deve possuir um valor inicial conhecido, isto , ela deve ser inicializada. Normalmente inicializa-se a varivel do acumulador com zero, ou seja, zera-se a varivel antes de utiliz-la. Para zerar uma varivel basta atribuir a ela o valor zero: VARIVEL1 0 2) A varivel2 indica o valor a ser acumulado, somado e armazenado na varivel1.

Exemplo 10: Altere o exemplo 9 para calcular tambm a mdia geral da turma e, depois de calculada, escrever a mdia.

ATENO: Normalmente inicializa-se as variveis que sero utilizadas como contador ou como acumulador com o valor zero, mas pode-se inicializ-las com o valor que desejarmos de acordo com a necessidade.

23

## Apostila de Lgica de Programao - Algoritmos

14 Determinao do MAIOR e/ou MENOR valor em um Conjunto de Valores Em muitos algoritmos surge a necessidade de determinarmos qual o maior ou o menor valor dentro de um conjunto de valores e, para isto, no existe uma estrutura especial, apenas utilizamos os conhecimentos que j aprendemos, como mostrado no exemplo a seguir.

Exemplo 11: Escreva um algoritmo para ler a nota de 10 alunos e escrever a nota mais alta, ou seja, a maior nota entre as 10 notas lidas.

IMPORTANTE: Quando sabe-se os limites dos valores possveis, ou seja, por exemplo com as notas sabemos que os valores sero de 0 a 10, ento sabe-se quais so os valores limites (o valor mnimo e o valor mximo), no teremos nota menor que 0 e nem nota maior que 10. Nesses casos mais fcil descobrir o maior ou o menor valor, pois pode-se inicializar a varivel Maior, por exemplo, com o valor 0 e a varivel Menor com o valor 10 que funcionar perfeitamente. Acontece que se no sabe-se os valores dos limites a complica um pouco, pois no sabemos com que valor vamos inicializar as variveis para comparao. Ento temos que inicializar tanto a varivel Maior quanto a Menor com o primeiro valor lido e depois vamos comparando os prximos valores lidos com o primeiro! (os nomes Maior e Menor, so apenas exemplos, pode-se denominar as variveis que sero usadas para os testes como quiser).

24

## Apostila de Lgica de Programao - Algoritmos

15 Repetio Aninhada Assim como vimos que possvel ter uma Seleo dentro de outra, tambm podemos ter uma Repetio dentro de outra, dependendo do problema a ser resolvido. Pode ser necessria uma estrutura de Repita dentro de um Enquanto, por exemplo, ou vice-versa. Ou um Repita dentro de outro Repita, enfim, as combinaes so inmeras. A seguir veremos um exemplo de uma estrutura de repetio Para dentro de outro Para, que bastante utilizado para leitura e escrita de Matrizes, por exemplo.

Exemplo 12: Dado o algoritmo a seguir (Figura 9), representado em Chapin, diga o que ele faz, ou seja, o que seria escrito na tela ao ser executado.

## Figura 9: Exemplo de Repetio Aninhada

Funcionamento de "um PARA dentro de outro PARA": 1) A execuo inicia pelo Para de fora (mais externo), depois desvia para o Para de dentro e s volta para o Para de fora quando terminar toda execuo do Para de dentro (quando a varivel de controle chegar no valor final). 2) Um Para fica "parado" enquanto o outro Para executado, ou seja, enquanto sua varivel de controle varia at chegar no valor final determinado para ela.

25

## Apostila de Lgica de Programao - Algoritmos

16 Vetores Podemos definir um Vetor como uma varivel dividida em vrios "pedaos", em vrias "casinhas", onde cada pedao desses identificado atravs de um nmero, referente posio de uma determinada informao no vetor em questo. O nmero de cada posio do vetor chamado de ndice. Conceito: Vetor um conjunto de variveis, onde cada uma pode armazenar uma informao diferente, mas todas compartilham o mesmo nome. So associados ndices a esse nome, que representam as posies do vetor, permitindo assim, individualizar os elementos do conjunto.

Podemos imaginar que na memria do computador o vetor seja mais ou menos da seguinte forma:

nome do vetor

## Exemplos de Manipulao de Vetores:

1) Escrever Nomes [3] Esta instruo escreve na tela, o contedo da Posio 3 do Vetor chamado Nomes, ou seja, escreve a palavra Maria.

ATENO: Sempre que estivermos nos referindo a um Vetor, devemos colocar o Nome do Vetor e a Posio (o ndice) correspondente entre colchetes.

2) Nomes [5]

'Andr'

Esta instruo armazena (atribui) a palavra 'Andr' na posio 5 do Vetor chamado Nomes.

26

## Apostila de Lgica de Programao - Algoritmos

3) Escrever Nomes [X] Esta instruo escreve o contedo da posio X do Vetor Nomes, ou seja, possvel utilizarmos variveis para indicar a posio (o ndice) do Vetor. Neste exemplo 3, o que ser escrito depende do 4. valor da varivel X. Por exemplo, se antes da instruo Escrever, tivssemos a instruo: X Ento seria escrito o contedo da posio 4 do Vetor Nomes, neste caso, seria escrita a palavra Ana.

4) Escrever Nomes [X-2] Esta instruo para mostrar que tambm pode-se utilizar clculos (expresses) para indicar a posio (o ndice). Digamos que o X tenha recebido o valor 4, como no exemplo 3 acima, ento, neste caso, seria escrita a palavra Alex.

16.1 Como LER um Vetor (Preencher) Para Ler um vetor, ou seja, para preencher um vetor com informaes (dados) (armazenar informaes em um vetor) necessria uma estrutura de repetio, pois um vetor possui vrias posies e temos que preencher uma a uma. A estrutura de repetio normalmente utilizada para vetores o Para-At-Faa, ento veja no exemplo abaixo como preencher (ler) um vetor de 10 posies:

## Figura 11: Exemplo para Ler um Vetor

Na Figura 11, acima, est demonstrado como preencher um vetor chamado A de 10 posies, ou seja, sero lidas 10 informaes (valores, nomes, letras, etc.) e cada uma ser armazenada em uma posio do vetor A. Sendo que utiliza-se a prpria varivel da repetio Para para representar a posio (ndice) do vetor.

27

## Apostila de Lgica de Programao - Algoritmos

16.2 Como ESCREVER um Vetor Para Escrever um vetor, ou seja, para escrever o contedo de cada posio de um vetor, tambm precisamos utilizar uma estrutura de repetio, j que os vetores possuem mais de um contedo (mais de uma posio). Como explicado no captulo anterior (16.1 Como Ler um Vetor), normalmente utiliza-se a estrutura Para-At-Faa tambm para escrever o vetor. Veja no exemplo abaixo, como escrever um vetor de 10 posies, isto , como escrever o contedo de cada uma das 10 posies do vetor:

Figura 12: Exemplo para Escrever um Vetor Na Figura 12, acima, est demonstrado como escrever um vetor chamado A de 10 posies, ou seja, ao executar essa instruo seria escrito o contedo de cada uma das 10 posies do vetor A na tela do computador.

Exemplo 13: Escreva um algoritmo para ler a nota de 30 alunos, calcular a mdia geral da turma e escrever quantos alunos tiveram a nota acima da mdia calculada. Resposta em Chapin Resposta em Portugus Estruturado
Incio soma media cont 0 0 0

Para x de 1 At 30 Faa Ler nota [x] soma FimPara Media soma / 30 soma + nota [x]

Para n de 1 At 30 Faa Se nota [n] > media Ento cont FimSe FimPara Escrever cont Fim cont + 1

28

## Apostila de Lgica de Programao - Algoritmos

17 Respostas dos Exemplos Neste captulo so apresentadas as respostas de todos os exemplos encontrados no decorrer da apostila. Exemplo 1:

Exemplo 2:

## Exemplo 3: Resposta em Chapin: Resposta em Portugus Estruturado:

Resposta em Fluxograma:

29

## Exemplo 5: Resposta Errada:

Resposta Correta:

30

## Exemplo 6: Resposta em Chapin: Resposta em Portugus Estruturado:

Explicao:

Exemplo 7:

Resposta em Chapin:

31

## Apostila de Lgica de Programao - Algoritmos

Exemplo 8:

Resposta em Chapin

32

33

## Apostila de Lgica de Programao - Algoritmos

Referncias Bibliogrficas Para elaborao e construo desta apostila foram consultados vrios tipos de materiais, como por exemplo: livros, outras apostilas, pginas web etc. Algumas das referncias consultadas esto apresentadas neste captulo, mas grande parte do material disponibilizado na apostila, como exemplos e exerccios foram utilizados das aulas que tive na disciplina de Algoritmos e Programao durante a faculdade de Anlise de Sistemas, na UCPel - Universidade Catlica de Pelotas, com o Prof. Ricardo Andrade Cava (http://lp.ucpel.tche.br, http://cpu.ucpel.tche.br, http://graphs.ucpel.tche.br). [ALG96] The ALGOL Programming Language. Disponvel em: http://www.engin.umd.umich.edu/CIS/course.des/cis400/algol/algol.html. Acesso em: Jun. 2006. [BUF03] BUFFONI, Salete. Apostila de Algoritmo Estruturado - 4 edio. Disponvel em: http://www.saletebuffoni.hpg.ig.com.br/algoritmos/Algoritmos.pdf. Acesso em: Mar. 2004. [CHA70] CHAPIN, Ned. Flowcharting with the ANSI Standard: A Tutorial. ACM Computing Surveys, Volume 2, Number 2 (June 1970), pp. 119-146. [CHA74] CHAPIN, Ned. New Format for Flowcharts, SoftwarePractice and Experience. Volume 4, Number 4 (October-December 1974), pp. 341-357. [CHA02] CHAPIN, Ned. Maintenance of Information Systems. Disponvel em: http://www.iceis.org/iceis2002/tutorials.htm. Acesso em: Jun. 2006. [COS04] COSTA, Renato. Apostila de Lgica de Programao - Criao de Algoritmos e Programas. Disponvel em: http://www.meusite.pro.br/apostilas2.htm. Acesso em: Jun. 2006. [GOM04] GOMES, Abel. Algoritmos, Fluxogramas e Pseudo-cdigo - Design de Algoritmos. Disponvel em: http://mail.di.ubi.pt/~programacao/capitulo6.pdf. Acesso em: Jun. 2006. [KOZ06] KOZAK, Dalton V. Tcnicas de Construo de Algoritmos. Disponvel em: http://minerva.ufpel.edu.br/~rossato/ipd/apostila_algoritmos.pdf. Acesso em: Jun. 2006. [MAR03] MARTINS, Luiz E. G.; ZLIO, Valria M. D. Apostila da Disciplina Introduo Programao. Disponvel em: http://www.unimep.br/~vmdzilio/apostila00.doc. Acesso em: Jun. 2006. [NAS73] NASSI, Ike; SHNEIDERMAN, Ben. Flowchart Techniques for Structured Programming. ACM SIGPLAN Notices, Volume 8, Number 8 (August 1973), pp.12-26. [NAS04] NASSI, Ike. Ike Nassi's Home Page. Disponvel em: http://www.nassi.com/ike.htm . Acesso em: Jun. 2006. [PRO04] Programming Languages. Disponvel em: http://www.famed.ufrgs.br/disciplinas/inf_med/prog_ling.htm. Acesso em: Mar.2004. [SAN04] SANTANA, Joo. Algoritmos & Programao. Disponvel em: http://www.iesam.com.br/paginas/cursos/ec/1ano/aulas/08/joao/APunidade-1.pdf. Acesso em: Mar. 2004. [SHN03] SHNEIDERMAN, Ben. A short history of structured flowcharts (Nassi-Shneiderman Diagrams). Disponvel em: http://www.cs.umd.edu/~ben/ Acesso em: Jun. 2006. [TON04] TONET, Bruno; KOLIVER, Cristian. Introduo aos Algoritmos. Disponvel em: http://dein.ucs.br/napro/Algoritmo/manuais/Manual 20Visualg.pdf. Acesso em: Mar. 2004. [YOU04] YOURDON, Ed. Ed Yourdon's Web Site. Disponvel em: http://www.yourdon.com/books/msa2e/CH15/CH15.html. Acesso em: Mar. 2004.
Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

34