Anda di halaman 1dari 160

Algoritmos e Estruturas de Dados I

ALGORITMOS E
ESTRUTURAS DE DADOS I

Tecnologias de Informao e Comunicao na Educao


Professor Antonio Maria Pereira de Resende
Tutora Profa Ana Rublia Mendes de Lima Resende

Lavras/MG

Prof. Antnio Maria e Profa. Ana Rublia 1


Algoritmos e Estruturas de Dados I

2011

Ficha catalogrfica preparada pela Diviso de Processos


Tcnicos da Biblioteca Central da UFLA

Espao a ser preenchido pela biblioteca

Prof. Antnio Maria e Profa. Ana Rublia 2


Algoritmos e Estruturas de Dados I

ALGORITMO E ESTRUTURAS DE DADOS I

1 INTRODUO AO CURSO.....................................................................................................................7

1.1 Algoritmo.....................................................................................................................................7

1.2 Estrutura de Dados....................................................................................................................10

1.3 Algoritmo e Estrutura de Dados.................................................................................................12

1.4 Orientaes para um Melhor Aprendizado de AED...................................................................13

2 CONSTRUO DE ALGORITMOS........................................................................................................14

2.1 Notaes para Construo de Algoritmos..................................................................................14

2.1.1 Notao em Descrio Narrativa........................................................................................14

2.1.2 Notao Grfica.................................................................................................................14

2.1.3 Notao em Pseudocdigo................................................................................................16

2.1.4 EXERCCIOS PROPOSTOS....................................................................................................17

2.2 Teste de Mesa............................................................................................................................18

2.3 Fases de desenvolvimento de um Algoritmo.............................................................................19

3 ALGORITMOS EM PSEUDOCDIGO...................................................................................................21

3.1 Estrutura Bsica de um Algoritmo.............................................................................................21

4 DECLARAO DE VARIVEIS E CONSTANTES......................................................................................22

4.1 Variveis.....................................................................................................................................22

4.1.1 Tipos de Dados...................................................................................................................24

4.1.2 EXERCCIO PROPOSTO........................................................................................................25

4.2 Constantes.................................................................................................................................25

4.3 Regras para nomear Variveis, Constantes e Algoritmos...........................................................26

4.3.1 EXERCCIOS PROPOSTOS....................................................................................................27

5 COMANDOS SEQUENCIAIS.................................................................................................................28

5.1 Comando de Entrada.................................................................................................................28

5.2 Comando de Sada.....................................................................................................................28

5.3 Comando de Atribuio.............................................................................................................29

Prof. Antnio Maria e Profa. Ana Rublia 3


Algoritmos e Estruturas de Dados I

5.4 Boas Prticas para os Comandos Sequenciais............................................................................30

5.5 Operadores e Funes pr-definidas.........................................................................................31

5.5.1 Operadores Aritmticos.....................................................................................................31

5.5.2 Funes pr-definidas........................................................................................................32

5.5.3 EXERCCIOS PROPOSTOS....................................................................................................35

6 COMANDOS CONDICIONAIS..............................................................................................................37

6.1 Operadores Relacionais e Lgicos..............................................................................................37

6.1.1 Operadores Relacionais.....................................................................................................38

6.1.2 Operadores Lgicos...........................................................................................................40

6.1.3 EXERCCIO PROPOSTO........................................................................................................42

6.2 Comando Condicional Simples SE ... ENTO..............................................................................42

6.3 Comando Condicional Composto SE ... ENTO ... SENO..........................................................43

6.4 Indentao.................................................................................................................................46

6.5 Aninhamento de Comandos SE...ENTO...SENO......................................................................48

6.6 Comando Condicional ESCOLHA ... CASO...................................................................................52

6.6.1 EXERCCIOS PROPOSTOS....................................................................................................57

7 COMANDOS DE REPETIO...............................................................................................................59

8 Comando de Repetio: Nmero Definido de Repeties e Teste de Condio no Incio..................61

8.1 Comando de REPETIO PARA ... FAA.....................................................................................61

9 Comando de Repetio: Nmero Indefinido de Repeties e Teste de Condio no Incio...............71

9.1 Comando de REPETIO ENQUANTO ... FAA...........................................................................71

9.1.1 Peculiaridades Importantes do ENQUANTO..FAA............................................................72

9.1.2 Loop Infinito.......................................................................................................................74

10 Comando de Repetio: Nmero Indefinido de Repeties e Teste de Condio no Final............81

10.1 Comando de repetio REPITA ... AT........................................................................................81

10.1.1 Peculiaridades Importantes do REPITA ... AT....................................................................82

10.1.2 Loop Infinito.......................................................................................................................84

Prof. Antnio Maria e Profa. Ana Rublia 4


Algoritmos e Estruturas de Dados I

10.1.3 EXERCCIOS PROPOSTOS....................................................................................................92

11 VARIVEIS COMPOSTAS HOMOGNEAS: VETORES E MATRIZES....................................................93

12 VETORES........................................................................................................................................95

12.1 Representao Grfica de um Vetor..........................................................................................96

12.2 Declarao de Vetor...................................................................................................................96

12.3 Manipulao de Dados de um Vetor..........................................................................................97

12.4 Operaes de Entrada e Sada de dados em um Vetor..............................................................97

12.5 Processamento dos Dados de um Vetor....................................................................................99

12.5.1 EXERCCIOS PROPOSTOS..................................................................................................100

13 MATRIZES.....................................................................................................................................101

13.1 Representao Grfica de uma Matriz.....................................................................................101

13.2 Declarao de Matriz...............................................................................................................102

13.3 Manipulao de Dados de uma Matriz....................................................................................104

13.4 Operaes de Entrada e Sada de dados em uma Matriz.........................................................104

13.5 Processamento dos Dados de uma Matriz...............................................................................107

13.5.1 EXERCCIOS PROPOSTOS..................................................................................................111

14 VARIVEIS COMPOSTAS HETEROGNEAS: REGISTROS E VETOR DE REGISTROS...........................112

14.1 Declarao de Registro............................................................................................................112

14.2 Representao Grfica de um Registro....................................................................................113

14.3 Manipulao de Dados de Varivel de Registro.......................................................................113

14.4 Operaes de Entrada e Sada Utilizando Registros.................................................................114

14.5 VETOR DE REGISTROS..............................................................................................................115

14.6 Representao Grfica de Vetor de Registro............................................................................116

14.7 Manipulao de Dados do Vetor de Registro...........................................................................117

14.8 Operaes de Entrada e Sada Utilizando Vetor de Registros..................................................117

14.8.1 EXERCCIOS PROPOSTOS..................................................................................................120

15 MODULARIZAO: PROCEDIMENTOS E FUNES.......................................................................121

Prof. Antnio Maria e Profa. Ana Rublia 5


Algoritmos e Estruturas de Dados I

15.1 PROCEDIMENTOS....................................................................................................................122

15.1.1 Declarao de Procedimentos.........................................................................................123

15.1.2 Procedimentos sem Passagem de Parmetros.................................................................125

15.1.3 Procedimentos com Passagem de Parmetros................................................................126

15.2 FUNES.................................................................................................................................127

15.2.1 Declarao de Funes....................................................................................................128

15.2.2 Funes sem Passagem de Parmetros............................................................................129

15.2.3 Funes com Passagem de Parmetros...........................................................................130

15.3 ESCOPO DE VARIVEIS VARIVEIS LOCAIS E GLOBAIS...........................................................135

15.4 PASSAGEM DE PARMETROS POR VALOR E POR REFERNCIA.................................................136

15.4.1 Passagem de Parmetros por Valor..................................................................................136

15.4.2 Passagem de Parmetros por Referncia.........................................................................138

16 RECURSIVIDADE...........................................................................................................................141

16.1.1 EXERCCIOS PROPOSTOS...........................................................................................145

17 NDICE DE FIGURAS......................................................................................................................146

18 NDICE DE TABELAS......................................................................................................................152

19 RELAO DE CONES....................................................................................................................153

Prof. Antnio Maria e Profa. Ana Rublia 6


Algoritmos e Estruturas de Dados I

1 INTRODUO AO CURSO
O contedo de Algoritmo e Estrutura de Dados AED ensinado em cursos tcnicos e
universitrios como Cincia da Computao, Sistemas de Informao, Engenharias (de Software,
Eltrica, Civil, Mecnica, Mecatrnica,...), Programao, Analista de Sistemas, Informtica,
dentre outros. A profundidade e abrangncia do contedo dependem do foco de cada curso.
Geralmente, o contedo de AED divide-se em disciplinas denominadas AED I, AED II e
AED III nos cursos relacionados computao. O aprendizado acumulativo, sendo impossvel
aprender AED II ou AED III sem aprender AED I, ou aprender AED III sem aprender AED I e
AED II.
O ensino das disciplinas de AED desenvolve o raciocnio lgico dos alunos, capacitando-os
para programao de computadores.
A seguir, o termo Algoritmo e o termo Estrutura de Dados so explicados separadamente,
facilitando a compreenso de seus significados.

1.1 Algoritmo
A primeira palavra relacionada a Algoritmo, algorism, foi criada no sculo 9 pelo
matemtico persa islo Abu Abdullah Muhammad ibn Musa Al-Khwarizmi. Inicialmente, o termo
foi criado para nomear regras que ensinavam como realizar clculos usando nmeros hindu-
arbicos. No sculo 18, o termo foi traduzido para o Latin Europeu como Algorithm, e seu
significado passou a abranger todo procedimento definido (claro, preciso) para resolver
problemas e executar tarefas.

Um exemplo clssico de algoritmo pertence ao matemtico Euclides, pai da geometria


Euclidiana, que desenvolveu um algoritmo para calcular o Mximo Divisor Comum MDC,
replicado a seguir:

1. Divida o nmero a por b, o resto r;


2. Troque a pelo valor de b;
3. Troque b pelo valor de r;
4. Continue os passos acima at no mais conseguir dividir.
Neste caso, a o MDC.

Figura 1 - Algoritmo de Euclides para calcular o MDC

Prof. Antnio Maria e Profa. Ana Rublia 7


Algoritmos e Estruturas de Dados I

Executando o algoritmo de Euclides...


Tabela 1 - Execuo do algoritmo de Euclides para calcular o MDC dos nmeros 48 e 30

a b Resto r Passos do Algoritmo


48 30 18 Passo 1- Divide-se 48 por 30 e o resto coloca-se na coluna do resto;
Passo 2 - Valor de b colocado em a;
30 18 12 Passo 3 - Valor de r colocado em b;.
Passo 1- Divide-se novamente a por b colocando o resto em r;
Passo 2 - Valor de b colocado em a;
18 12 6 Passo 3 - Valor de r colocado em b;.
Passo 1- Divide-se novamente a por b colocando o resto em r;
Passo 2 - Valor de b colocado em a;
12 6 0 Passo 3 - Valor de r colocado em b;.
Passo 1- Divide-se novamente a por b colocando o resto em r;
Passo 2 - Valor de b colocado em a;
Passo 3 - Valor de r colocado em b;.
6 0 -X-
Passo 1- Divide-se novamente a por b colocando o resto em r.
Como no mais possvel dividir, ento a (=6) o MDC de 48 e 30.

Existem outros algoritmos conhecidos na matemtica como:


a) de Arquimedes para calcular uma aproximao do nmero Pi; e
b) de Erasttenes para encontrar nmeros primos (Crivo de Erasttenes).

Veja a seguir algoritmo de Erasttenes para encontrar nmeros primos de 2 at N e sua


execuo.

1. Definir o valor limite N;


2. Encontrar a raiz quadrada de N, guardar a parte inteira denominando-a de raiz;
3. Criar uma lista (vetor) com os nmeros de 2 at N;
4. Para i de 2 at a raiz faa
4.1. Se i no estiver riscado na lista, riscar todos os seus mltiplos de i at N;
5. Pronto, aps finalizar o passo 4, os nmeros no riscados formam a lista de nmeros
primos de 2 a N.

Figura 2 - Algoritmo Erasttenes para encontrar nmeros primos de 2 at N.

Prof. Antnio Maria e Profa. Ana Rublia 8


Algoritmos e Estruturas de Dados I

Executando o algoritmo de Erasttenes...


Tabela 2 - Execuo do algoritmo de Erasttenes para encontrar os nmeros primos de 2 a 30

Passo 1) N = 30;

Passo 2) Raiz (30) = 5,477. Para guardar parte inteira ento raiz = 5;

Passo 3) Lista de nmeros de 2 at 30


02 03 04 05 06 07 08 09 10 11 12 13 14 15

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Passo 4) Para i de 2 at a raiz faa

Passo 4.1) para i=2, riscar todos os seus mltiplos de i(=4) at N se no estiver riscado
02 03 0 05 06 07 08 09 10 11 12 13 14 15
4
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Passo 4.1) i=3, riscar todos os seus mltiplos de i (=9)at N se no estiver riscado
02 03 04 05 06 07 08 0 10 11 12 13 14 15
9
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Passo 4.1) i=4, riscar todos os seus mltiplos de i(=16) at N se no estiver riscado
02 03 04 05 06 07 08 09 10 11 12 13 14 15

1 17 18 19 20 21 22 23 24 25 26 27 28 29 30
6

Passo 4.1) i=5, riscar todos os seus mltiplos de i (=25) at N se no estiver riscado
02 03 04 05 06 07 08 09 10 11 12 13 14 15

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Passo 5) Pronto, os nmeros no riscados formam a lista de nmeros primos de 2 a N.


02 03 05 07 11 13

17 19 23 29

Os nmeros primos de 2 a 30 so: 02, 03, 05, 07, 11, 13, 17, 19, 23 e 29.

Prof. Antnio Maria e Profa. Ana Rublia 9


Algoritmos e Estruturas de Dados I

Portanto, pode-se afirmar que algoritmo um conjunto de passos (instrues) bem


definidos e executados em uma sequencia lgica para se produzir um resultado esperado. Assim,
se algum deseja calcular o MDC de dois nmeros, basta aplicar o algoritmo de Euclides. Se
algum deseja encontrar os nmeros primos em um intervalo de 2 at N, deve aplicar o algoritmo
de Erasttenes.

Outro exemplo prtico de algoritmo uma receita de bolo.


Uma receita de bolo define os passos a seguir para se fazer um bolo. H receitas com
passos bem definidos e quando seguidos obtm-se o bolo. Estas receitas podem ser chamadas de
algoritmo. Entretanto, h tambm receitas escritas de maneira inadequada, ou faltando
quantidade de um ingrediente, ou faltando o tempo que determinada massa fica no fogo. Tais
receitas no podem ser chamadas de algoritmo, por no possurem passos (instrues) bem
definidos para se atingir o fim esperado.

Em computao dizemos que instruo uma informao que indica uma ao a ser
executada, por exemplo, por um computador. Deve-se considerar que uma instruo executada
em separado, pode no ter sentido. Para obtermos o resultado desejado precisamos executar um
conjunto de instrues na ordem correta.

Exemplificando...
Para fazer um bolo preciso executar uma sequencia de instrues, como: separar os
utenslios e ingredientes a serem utilizados, pr-aquecer o forno e medir os ingredientes, untar a
forma, bater os ovos etc.

Entretanto estas instrues devem ser executadas em uma ordem adequada no se deve
colocar o fermento aps o bolo assado.

1.2 Estrutura de Dados


A melhor maneira de explicar uma estrutura de dados compreender um formulrio em
papel contendo seus campos, tamanho de cada campo e o tipo de dado a ser armazenado.

Exemplificando...
Na Figura 3, observa-se um formulrio que deve ser preenchido para renovao ou
assinatura nova de uma revista. Nele, observa-se a necessidade de preencher campos como:

- Informar se assinatura nova ou renovao;

Prof. Antnio Maria e Profa. Ana Rublia 10


Algoritmos e Estruturas de Dados I

- Informar o cdigo do assinante, se assinante;

- Informar qual revista e o prazo da assinatura;

- Informar o valor a ser pago; dentre outros.

O usurio sabe que no pode colocar o valor em uma data, nem uma data em um campo de
nome, por exemplo. E que as informaes devem ser preenchidas de acordo com o tamanho do
campo. Isto uma estrutura de dados, onde se tem um conjunto de dados com tamanho e tipo de
dado para cada campo bem definidos.

Figura 3 Formulrio de Assinatura de Revista

Um exemplo de uma estrutura de dados para Cliente :

Cliente {
nome [30]: literal; //
salario: real;
idade: inteiro;
}

Prof. Antnio Maria e Profa. Ana Rublia 11


Algoritmos e Estruturas de Dados I

Figura 4 Estrutura de dados Cliente

Prof. Antnio Maria e Profa. Ana Rublia 12


Algoritmos e Estruturas de Dados I

Entretanto, dependendo da empresa, a estrutura de dados para Cliente poderia ser:

Cliente {
nome [50]: literal;
telefone: literal;
sexo: caractere;
credito: real;
}
Figura 5 Variao de uma Estrutura de dados Cliente

De acordo com o problema e necessidade da empresa, as estruturas de dados so planejadas


e definidas.

Considerando que o computador utilizado para informatizar as empresas e seus


processos, ento existe a necessidade de capturar as informaes existentes e automatiz-las.
Para isto, utilizam-se os conceitos de Estrutura de Dados para representar, armazenar, processar e
recuperar estas informaes nos computadores.

Em AED, ensinam-se vrias Estruturas de Dados e o aluno dever aprender aplic-las


corretamente dependendo da finalidade desejada.

1.3 Algoritmo e Estrutura de Dados


Sabendo que:

- Algoritmo um conjunto de passos bem definidos para se atingir um resultado; e

- Estrutura de dados define um conjunto de dados, seu tamanho e tipo de dado para cada
campo;

Pode-se afirmar ento que Algoritmo e Estrutura de Dados o conjunto de conhecimento


que permite representar a informao no computador associado a um conjunto de passos bem
definidos que propiciam realizar operaes com estas informaes.

No mercado de trabalho, diariamente, profissionais da rea de computao e sistemas de


informao deparam-se com problemas. Para cada um dos problemas, ele deve definir:

- a(s) melhor(es) estrutura de dados aplicvel na soluo do problema (Estrutura de Dados);

- construir um conjunto de passos para realizar operaes com os dados (Algoritmo).

Aps construir o(s) algoritmo(s) e definir a(s) estrutura(s) de dados, o profissional est apto
para programar o sistema que ser entregue ao cliente.

Portanto, no possvel programar sem saber algoritmos e estrutura de dados. O


profissional deve ter o raciocnio lgico que o capacita a pensar como o computador. Aps muita
prtica, os profissionais conseguem programar o computador sem ter de formalmente definir o

Prof. Antnio Maria e Profa. Ana Rublia 13


Algoritmos e Estruturas de Dados I

algoritmo, pois seu raciocnio j est treinado para observar o problema, desenvolver o algoritmo
mentalmente e program-lo no computador.

Ressalta-se que se o profissional no souber resolver o problema manualmente, ele no


conseguir desenvolver o algoritmo, pois no ser capaz de definir os passos que descrevem a
soluo. Quando o profissional se encontrar nesta situao, caso comum, ele deve estudar e
aprender a desenvolver a soluo manualmente para depois descreva o algoritmo. Quando estiver
desenvolvendo um sistema para uma empresa, ele deve procurar as pessoas que realizam aquela
atividade manualmente, a fim de aprender e passar o conhecimento daquelas pessoas para a
forma de algoritmo e program-lo.

Algoritmo e Estrutura de Dados caracterizam-se por no possuir soluo nica. Se 30


pessoas forem convidadas para desenvolver algoritmos para determinado, espera-se 30 solues
distintas.

1.4 Orientaes para um Melhor Aprendizado de AED


1. Treine - Quanto mais exerccios o aluno resolver, maior ser sua capacidade na resoluo de
novos problemas. Deve-se exercitar algoritmos diariamente, resolvendo, pelo menos, 2 ou 3
problemas, pois somente a prtica propiciar o aprendizado;
2. Teste - Sempre realize o teste de mesa para verificar se o algoritmo est correto;
3. Relembre - No v para a aula sem leia/revisar o contedo de aulas anteriores. O
conhecimento acumulativo, imprescindvel saber os conceitos anteriores para aprender a
aplicar os novos;
4. Seja responsvel - Faa voc mesmo os exerccios e busque exerccios complementares em
livros na biblioteca. Lembre-se que cada um possui a sua prpria lgica, produzindo
algoritmos distintos. S aprende quem faz por si mesmo, no h outra forma de aprendizado.
Evite resolver uma grande lista de exerccios em apenas um dia; e
5. Aprenda - Enquanto voc no souber resolver um problema manualmente, voc ser incapaz
de descrever o algoritmo. Se pedir para um aluno, que cozinha, construir um algoritmo para
fritar um bife, ele o far. Porm, se pedir a ele para calcular a derivada dupla de uma equao
ordinria de 3 ordem e ele no souber resolver, ento o aluno dever estudar para aprender
como se faz o clculo para depois desenvolver um algoritmo.

Prof. Antnio Maria e Profa. Ana Rublia 14


Algoritmos e Estruturas de Dados I

2 CONSTRUO DE ALGORITMOS
Para comear a construir algoritmos, deve-se primeiro aprender as notaes mais utilizadas
para descrev-los e conhecer as fases para seu desenvolvimento.

2.1 Notaes para Construo de Algoritmos


Os trs tipos de notaes utilizadas para construir algoritmos so: descrio narrativa,
grfica e pseudocdigo. O profissional deve escolher uma das trs formas, sendo o pseudocdigo
o mais utilizado na computao.

2.1.1 NOTAO EM DESCRIO NARRATIVA

Consiste em descrever os passos de uma soluo utilizando linguagem natural.

Exemplificando...
Algoritmo para fritar um ovo:
Passo 1 Pegar a frigideira e colocar leo;
Passo 2 Levar a frigideira ao fogo;
Passo 3 Pegar o ovo, quebr-lo e colocar seu contedo na frigideira;
Passo 4 Esperar a clara ficar branca e virar o ovo; e
Passo 5 Se preferir, voc pode estourar a gema para deix-la firme.
Figura 6 - Exemplo de algoritmo usando Descrio Narrativa

2.1.2 NOTAO GRFICA


Consiste em descrever os passos de uma soluo utilizando a forma grfica. Existem
diferentes formas de representar um algoritmo graficamente, sendo o fluxograma, tambm
conhecido como diagrama de blocos, a mais difundida.

O conjunto de smbolos descritos a seguir utilizado para representar uma seqncia lgica
(algoritmo) denominada Fluxograma.
Tabela 3 Simbologia utilizada em Fluxogramas

Indica o incio e o fim de um algoritmo.

Indica a direo do processamento. Utiliza-se para conectar os


smbolos.
Representa um processo a ser executado, clculos e atribuio de
valores.

Prof. Antnio Maria e Profa. Ana Rublia 15


Algoritmos e Estruturas de Dados I

Indica entrada de dados. No interior devem constar informaes de


variveis a serem lidas.

Smbolo utilizado para representar sada de dados.

Indica deciso segundo uma condio e possibilidade de desvio. Deve


haver uma entrada, uma pergunta e duas sadas, conhecidas por
VERDADEIRO ou FALSO.

Indica uma conexo entre pontos distantes de um algoritmo.

Indica uma rotina a ser chamada. No final da rotina (subprograma) a


execuo continua do ponto onde foi realizada a chamada.

Exemplificando...

Figura 7 - Fluxograma Fritar um ovo

Prof. Antnio Maria e Profa. Ana Rublia 16


Algoritmos e Estruturas de Dados I

Figura 8 - Fluxograma Mdia

2.1.3 NOTAO EM PSEUDOCDIGO


Consiste em descrever os passos de uma soluo utilizando um conjunto de instrues pr-
definidas.

O pseudocdigo utilizado no Brasil denomina-se portugol e possui um conjunto de


instrues utilizveis para a descrio da soluo do problema. A seguir, utiliza-se o portugol
para leia duas notas de um aluno, calcular a mdia e responder se ele est aprovado ou
reprovado, considerando mdia mnima de 60% para aprovao.

Prof. Antnio Maria e Profa. Ana Rublia 17


Algoritmos e Estruturas de Dados I

Exemplificando...

Algoritmo media;
Declare N1,N2 : inteiro;
media : real;
Inicio
Leia (N1);
Leia (N2);
media (N1+N2) / 2;
SE (media >= 60) ENTO
Escreva (Aluno aprovado com mdia: , media);
SENO
Escreva (Aluno reprovado com mdia: , media);
FIMSE;
Fim.
Figura 9 - Algoritmo Mdia em Pseudocdigo

2.1.4 EXERCCIOS PROPOSTOS


1) Elabore um algoritmo, usando descrio narrativa:
i. para algum sair da faculdade e chegar at sua casa.
ii. para trocar uma lmpada.

Prof. Antnio Maria e Profa. Ana Rublia 18


Algoritmos e Estruturas de Dados I

2.2 Teste de Mesa


Aps desenvolver um algoritmo ele dever sempre ser testado. Este teste chamado de
Teste de Mesa e implica em seguir as instrues do algoritmo de forma precisa para verificar se
o procedimento utilizado est correto ou no.

Exemplificando...

# Algoritmo x y z Sada
1. algoritmo soma;
2. Declare x, y, z : inteiro;
3. Inicio
4. Leia(x); 8
5. Leia(y); 7
6. z x + y; 15
7. Escreva(z); 15
8. Fim.
Figura 10 Execuo de Teste de Mesa do Algoritmo Soma

Cria-se uma tabela sendo que: na primeira coluna insere-se o programa, na segunda coluna
at a penltima inserem-se os dados de entrada (x e y) e processamento (z), e na ltima coluna os
dados de sada. Aps montar a tabela, basta leia cada uma das linhas do programa e fazer o que
se pede.

A primeira linha apenas determina o nome do programa (soma). A segunda linha determina
os dados de entrada e processamento. A terceira linha informa onde o corpo principal do
algoritmo comea. Na quarta linha, o comando leia(x) implica em se determinar o valor de x que,
neste caso, foi atribudo o valor 8. Na quinta linha, o comando leia(y) implica em se determinar o
valor de y que, neste caso, foi atribudo o valor 7. Na sexta linha, o comando z x + y implica
em somar os dois nmeros e guardar o resultado em z. O valor guardado foi 15. Na stima linha,
o comando ESCREVA determina que o valor z deve ser escrito na tela do computador. E a ltima
linha encerra o algoritmo.

Prof. Antnio Maria e Profa. Ana Rublia 19


Algoritmos e Estruturas de Dados I

2.3 Fases de desenvolvimento de um Algoritmo


Um algoritmo uma seqncia lgica de instrues que podem ser executadas, portanto,
qualquer tarefa que siga determinado padro pode ser descrita por um algoritmo.

Por exemplo: - Como fazer Arroz Doce ou ento - Calcular o Saldo de um


Estoque.

Para evitar erros no desenvolvimento de um algoritmo, deve-se conhecer algumas fases


fundamentais para sua construo.

1 Fase) Compreenso do problema: Compreenda o problema a ser resolvido, destacando


os pontos principais;

2 Fase) Definio das Entradas: Identificar os dados que devem ser solicitados e lidos
pelo computador para a resoluo do problema;

3 Fase) Definio do Processamento: Definir quais operaes devem ser realizadas nos
dados de entrada, gerando os dados de sada;

4 Fase) Definio das Sadas: Identificar quais dados o usurio espera receber do
computador aps ter fornecido os dados de entrada;

5 Fase) Construo do algoritmo: Escolher a notao descritiva, grfica ou pseudocdigo


e construir o algoritmo; e

6 Fase) Teste do algoritmo: Executar o algoritmo passo a passo, aplicando, por exemplo, o
teste de mesa.

Prof. Antnio Maria e Profa. Ana Rublia 20


Algoritmos e Estruturas de Dados I

Exemplificando...

Problema: Calcule e mostre a mdia aritmtica simples das notas de um aluno, sabendo que foram
realizadas 4 provas P1, P2, P3 e P4.

1 Fase Compreenso do Problema: Devo obter as 4 notas do aluno, som-las e dividir a soma por
4. O resultado a mdia. Logo, eu conheo a soluo do problema e se possvel resolve-lo
manualmente, ento deve-se buscar um algoritmo para ele.

2 Fase Definio das Entradas: Os dados de entrada so P1, P2, P3 e P4.

3 Fase Definio do Processamento: O procedimento ser somar os 4 dados de entrada (P1, P2,
P3, P4) e dividir seu resultado por 4.

4 Fase Definio das Sadas: O dado de sada ser a mdia final.

5 Fase Construo do Algoritmo: Ser utilizada a notao em Pseudocdigo e o algoritmo :

Algoritmo em Pseudocdigo
Algoritmo media;
Declare P1, P2, P3, P4, media: real;
Inicio
Leia(P1);
Leia(P2);
Leia(P3);
Leia(P4);
Media (P1+ P2+P3+ P4) / 4;
Escreva(Mdia: , media);
Fim.

6 Fase Teste do Algoritmo:


Realizando o teste de mesa do algoritmo construdo:
# P P P P Medi
Algoritmo Sada
1 2 3 4 a
1 Algoritmo media;
2 Declare P1, P2, P3, P4, media: real;
3 Inicio
4 Leia(P1); 8
5 Leia(P2); 7
6 Leia(P3); 5
7 Leia(P4); 10
8 Media (P1+ P2+P3+ P4) / 4; 7,5
9 Escreva(Mdia: , media); Mdia: 7,5
10 Fim.

Prof. Antnio Maria e Profa. Ana Rublia 21


Algoritmos e Estruturas de Dados I

3 ALGORITMOS EM PSEUDOCDIGO
3.1 Estrutura Bsica de um Algoritmo
Um algoritmo possui a estrutura bsica representada a seguir. As representaes indicadas
pela notao < > implicam que devem ser substitudas e o programador deve determinar o valor.
As representaes indicadas pela notao [ ] implicam em estrutura facultativa, podendo-se fazer
um algoritmo sem utiliz-la.

Utiliza-se duas barras // para comentar uma linha. Para comentar um bloco que possua
mais de uma linha, utiliza-se barra e asterisco /* para abrir o comentrio de bloco e asterisco e
barra */ para fechar o comentrio de bloco.

/*Este algoritmo calcula a rea de um crculo


Algoritmo <nome do algoritmo>; qualquer e imprime o resultado */
[Const <declare uma constante>;] Algoritmo AreaCirculo; // *r2
[Declare <declare uma varivel>;] Declare area, R: real;
Incio Incio
<comandos>; R 2; // raio recebe o valor 2
Fim. area 3,1415 * (R * R);
Escreva (area); // mostra na tela a rea
Fim.
Figura 11 - Estrutura bsica de um algoritmo Figura 12 - Exemplo de um algoritmo

O detalhamento para se construir o algoritmo e quais comandos podem ser usados consiste
no objetivo do restante deste livro.

Prof. Antnio Maria e Profa. Ana Rublia 22


Algoritmos e Estruturas de Dados I

4 DECLARAO DE VARIVEIS E CONSTANTES


Declarao de variveis e constantes utilizada para informar ao computador quais dados
sero utilizados e necessrios para resolver-se um problema.

Para um computador calcular o salrio de um funcionrio, ele precisa de dados como


salrio base do funcionrio, nmero de horas extras, total de adiantamentos, dentre outros
crditos e descontos que compem uma folha de pagamento. Cada um desses valores representa
um dado a ser armazenado e processado no computador, o qual os transforma em salrio bruto e
lquido.

Algoritmos podem possuir dados declarados como variveis ou constantes, explicados a


seguir.

4.1 Variveis
Declara-se uma varivel para determinar seu nome (salrio, data, idade, nome, ...) e o tipo
de dado (nmero inteiro, nmero real, um caractere, texto, ...) a ser fornecido pelo usurio ou
calculado pelo algoritmo.

Se o algoritmo precisa armazenar a idade de uma pessoa, ento preciso declarar no


algoritmo uma varivel chamada idade do tipo inteiro. Se preciso armazenar o salrio de um
funcionrio, ento deve-se declarar no algoritmo a varivel salrio do tipo real. A declarao das
variveis idade e salrio exemplificada a seguir.

Algoritmo teste;
Declare idade : inteiro;
salario : real;
INICIO
<comandos>;
FIM.
Figura 13 - Exemplo de declaraes de variveis

Prof. Antnio Maria e Profa. Ana Rublia 23


Algoritmos e Estruturas de Dados I

Uma varivel est associada a uma posio de memria, e seu contedo pode ser alterado
durante a execuo de um programa. Embora uma varivel possa assumir diferentes valores, ela
s pode armazenar um valor por vez.

Valor da varivel
Algoritmo teste2;
Declare salario, comissao: real;
Nome da varivel
Incio
salario 1200,00;
Escreva (Entre com valor da comisso: ); Alterando o valor
Leia (comissao); da varivel
salario salario + comissao;
Escreva (O salrio atual :, salario);
Fim;
Figura 14 - Exemplo Alterao de valor de varivel

Representao de criao de variveis na memria do computador e armazenamento


das informaes.
1 2 3 4 5 6 7
1 700,00
2
3 1200,00
4 comissao
salario

Aps a execuo da instruo: salario salario + comissao;

1 2 3 4 5 6 7
1 700,00
comissao
2
3 1900,00
4
salario

Figura 15 Representao de criao de variveis na memria do computador

Prof. Antnio Maria e Profa. Ana Rublia 24


Algoritmos e Estruturas de Dados I

4.1.1 TIPOS DE DADOS


O computador processa dados de vrios tipos, podendo realizar as mais diferentes
operaes com dados, inteiros, reais, irracionais, racionais, etc. O programador deve saber quais
os dados e tipos de dados ele precisa para resolver um problema. Para conseguir estas
informaes, pode-se consultar o cliente que solicitou o programa e leia os formulrios utilizados
na empresa. Por meio destes formulrios possvel determinar os campos importantes e seus
tipos de dados.

Em um formulrio, no se deve escreva uma data em um campo que se pede um valor


monetrio. No se deve escreva um nmero no campo que pede o nome da pessoa. No se deve
escreva um valor monetrio onde pede-se uma idade. Isto gera erro no preenchimento de
formulrios porque o tipo de dado esperado possui um formato e o usurio escreve outro.

No computador no diferente. Deve-se definir o tipo de dado para cada um dos campos.
O computador acusar erro, por exemplo, se voc tentar escreva 12/03/2017 em uma idade.
Idade no aceita barras e composto por apenas um nmero inteiro, ao contrrio da data que
possui 2 nmeros inteiros. O contrrio tambm gera erro, pois um nmero inteiro no satisfaz a
necessidade de 3 nmeros inteiros.

Algoritmos e programas de computadores exigem que o programador estabelea (defina)


cada um dos dados e o Tipo de Dado que ele utiliza para resolver um problema. Os Tipos de
Dados utilizados para construo de algoritmos so inteiro, real, literal, caractere e lgico. Cada
um deles explicado a seguir.
Tabela 4 Tipo de Dados
Tipo Descrio Exemplo
Inteiro Armazena um nmero inteiro 1; 345; -237; 91; 125874;
Real Armazena um nmero real 2,0; 21,987; - 237,2; 0,9854;
Armazena um nico (1) caractere podendo ser letras
maisculas, minsculas, nmeros (no utilizados
Caractere para clculos) e caracteres especiais como (&, #, $, 1; L; a; !; %; ~
@, [, {, dentre outros). O caractere sempre
representado entre aspas simples.
Armazena um conjunto de caracteres como um nome
PEDRO; Rua das Flores;
de pessoa, data, cor, descrio de um produto, etc.
Literal So Paulo; Amarelo; Pacote
Uma literal sempre representado entre aspas
de Macarro 500gr; 21/12/2011
simples ou dupla.
V; F; Verdadeiro; Falso
Lgico Armazena o valor verdadeiro ou falso

Podem-se fazer operaes com os tipos de dados. Os nmeros podem ser somados,
subtrados dentre outras operaes aritmticas. Literais podem ter parte de seus caracteres
retirados, outros inseridos etc.

Prof. Antnio Maria e Profa. Ana Rublia 25


Algoritmos e Estruturas de Dados I

4.1.2 EXERCCIO PROPOSTO


1) Relacione o Tipo de Dado e o valor armazenvel nele. Utiliza-se a vrgula para separar as casas
decimais e o ponto a casa de milhares:
1-Inteiro ( ) K ( ) falso
2-Real ( )V ( ) -95
3-Caractere ( ) V ( ) -95
4-Literal ( ) 2,1345 ( ) 6
( ) mecanismo de destruio ( ) 234
5-Lgico ( ) 325.472 ( ) a
( ) 21/02/2548 ( ) aaaa
( ) 02/02/22 ( ) $
( ) * ( ) UFLA
( ) -352,254 ( ) 325.654.387,35987412569874521
( ) Roxo
( ) 325.654.387,35987412569874521

4.2 Constantes
Denomina-se como constante dados que no se modificam no decorrer do algoritmo, por
isto o nome de constante.

Exemplos clssicos de constantes so nmero Pi, nmero de Euler (e), acelerao da


gravidade, dentre outros. Qualquer dado que possua um valor que no varie deve ser declarado
como uma constante. A declarao das constantes Pi e e (nmero de Euler) exemplificado no
algoritmo a seguir.

valor da constante
Algoritmo teste;
Const pi = 3,1415;
e = 2,71828;
Declare idade : inteiro;
nome da constante
salario : real;
Incio
<comandos>;
Fim.
Figura 16 - Exemplo de declaraes de constantes

Prof. Antnio Maria e Profa. Ana Rublia 26


Algoritmos e Estruturas de Dados I

A representao de constantes e variveis na memria do computador idntica e segue a


forma mostrada na Figura 15.

4.3 Regras para nomear Variveis, Constantes e Algoritmos


As regras para nomear variveis, constantes e algoritmos so apresentadas a seguir:
O nome deve estar relacionado ao contedo armazenado (idade, nome, sexo);
Devem comear com uma letra ou sublinhado _;
O restante pode ser letra ou nmero ou sublinhado;
No usar espaos em brancos;
No usar caracteres especiais do tipo @, +, -, %, !, #, $, &, *, (, ^ , }, dentre outros;
No usar palavras reservadas da linguagem de programao; e
O uso de letras maisculas ou minsculas indiferente no algoritmo. Entretanto,

dependendo da linguagem de programao utilizada, maisculo ou minsculo determinam
variveis e constantes distintas.

Tabela 5 - Exemplo de nomes vlidos e invlidos

Nomes Vlidos Nomes Invlidos


TOTAL 3ARQUIVO - comea com dgito
UMNOMEMUITOCOMPRIDOEDIFICILDELER X+Y - no permitido
lado2 For - palavra reservada para comando
UM_NOME_MUITO_COMPRIDO_MAS_FACIL_DE_LEIA Until - palavra reservada para comando
L123 Media(76) - no permitido parnteses
duas_palavras Data de nascimento - no permitido espao

Prof. Antnio Maria e Profa. Ana Rublia 27


Algoritmos e Estruturas de Dados I

4.3.1 EXERCCIOS PROPOSTOS


1) Diferencie constantes de variveis. Exemplifique a declarao de uma constante e de
uma varivel:

2) Deseja-se armazenar nota, nome, nmero da matrcula, sexo, data de nascimento, valor
da mensalidade de um aluno e se ele bolsista. Declare as variveis em portugol.
3) Assinale com C os nomes CORRETOS para algoritmos, variveis e constantes e com I os
INCORRETOS. Explique o que est errado nos incorretos.

( ) 34 - 23 ( ) km/h ( ) 3notas
( ) nome aluno ( ) nota ( ) nota_bimestral
( ) _d20 ( ) cia3a3 ( ) e-mail
( ) Minimo ( ) xyz ( ) estado_civil( )
( ) aula_03 ( ) Data_Nascimento ( ) comissao%
( ) SALARIO ( ) achou! ( ) nota_bimestral
( ) nota*final ( )A+B ( ) 360hs

Prof. Antnio Maria e Profa. Ana Rublia 28


Algoritmos e Estruturas de Dados I

5 COMANDOS SEQUENCIAIS
Os comandos sequenciais so as estruturas mais simples utilizadas na construo de
algoritmos e subdividem-se em comandos de entrada, sada e atribuio.

Ela formada por um conjunto de instrues (ou comandos) que executadas em uma
seqncia linear de cima para baixo e da esquerda para a direita, ou seja, da mesma forma como
foram escritas.

5.1 Comando de Entrada


Em diversas solues de problemas necessita-se de dados informados pelo usurio para
serem processados pelo algoritmo, sendo o teclado a entrada padro do computador.

O Comando de Entrada permite obter estes dados externos ao algoritmo e armazen-los em


variveis.

Em pseudocdigo o comando de entrada representado pela palavra Ler ou Leia.

Exemplificando...

...
leia (raio); // O valor digitado pelo usurio ser armazenado na varivel raio.
...
leia (nome); // Os caracteres digitados pelo usurio sero armazenados na varivel
nome.
...

5.2 Comando de Sada


O Comando de Sada utilizado para apresentar dados e mensagens ao usurio.
Em pseudocdigo o comando de sada representado pela palavra Escrever ou Escreva.

Exemplificando...

Escreva (Digite um valor:); // Mostra uma mensagem ao usurio.

Escreva (x); // Mostra o valor armazenado na varivel x.

Escreva (O aluno , nome, est aprovado); /*Mostra a mensagem O aluno , logo depois o valor

Prof. Antnio Maria e Profa. Ana Rublia 29


Algoritmos e Estruturas de Dados I

armazenado na varivel nome e em seguida o restante da mensagem est aprovado */

5.3 Comando de Atribuio


O Comando de Atribuio utilizado para atribuir valor ou operaes a uma varivel,
sendo representado pelo smbolo .

Exemplificando...

x Jos;
y 2.5;
y y + 1;
teste falso;
media (N1 + N2 + N3 + N4) / 4;
raio 2;
area PI * (raio * raio);
perimetro 3* PI * raio;
Utilizamos as palavras INCIO e FIM para delimitar o bloco de sequncia, conforme
sintaxe a seguir.

Exemplificando...

Algoritmo Comandos_Sequenciais;
Declare
X, Y : inteiro;
A, B : real;
nome : literal;
INCIO
Escreva (Entre com o valor de X: ) ;
Leia (X);
Escreva (Entre com o valor de A: );
Leia (A);
Escreva (Entre com o seu nome: );
Leia (nome);
Y X * 3;
B (A * 2,4) / 3;
Escreva (nome , os valores de X e A agora valem: ,Y, B);
FIM.
Figura 17 Exemplo de Comandos Sequenciais

Prof. Antnio Maria e Profa. Ana Rublia 30


Algoritmos e Estruturas de Dados I

Observe que todos os comandos entre INCIO e FIM esto com a margem mais a direita,
para facilitar a visualizao. Isto se chama indentao e ser explicada em mais detalhes em
outra seo. O mesmo pode ser observado com 3 linhas de declarao de variveis, cuja margem
foi empurrada para a direita, sendo um subnvel de Declare.

5.4 Boas Prticas para os Comandos Sequenciais


1) SEMPRE Escreva uma mensagem ao usurio antes de qualquer comando de entrada, informando o
dado a ser fornecido e a unidade de medida . Caso contrrio, o usurio ver o cursor piscando na tela e
no saber o que fazer.
ERRADO CERTO
// Cursor fica piscando e usurio no sabe o que // Envia mensagem e l o nome
fazer Escreva(Nome: );
// pois no foi enviada mensagem a ele Leia(nome);
Leia(nome);
// Usurio no sabe se temperatura C, F ou K. // Envia mensagem e l o salrio
Escreva(Digite a temperatura: ); Escreva(Digite a temperatura em Celsius: );
Leia(temp); Leia(temp);

2) Ao imprimir o resultado de um processamento na tela do computador, SEMPRE mande uma mensagem


informando a unidade de medida e o que o dado representa . Caso contrrio, o usurio ver um dado na
tela e no saber do que se trata.
ERRADO CERTO
// Usurio sabe que o dado sobre altura, mas // Informar a unidade de medida e o que o dado
no // representa
// sabe se em metros, centmetros etc. Escreva(Altura: , altura, (metros));
Escreva(Altura: , altura);
// Usurio v um nmero na tela e no sabe do // Informar a temperatura explicitando ser em
que se trata. Celsius.
Escreva(temperatura); Escreva(A temperatura atual : , temp, C);

3) O computador trabalha com dados numricos sem conhecer a unidade de medida ou o dado
representado. Assim, quando voc digita 30 no teclado, o computador no sabe se 30 a idade (anos),
a temperatura (C,F, K), a dimenso (mm, cm, m, km,...), presso etc. Se voc pedir para ele subtrair a
idade da presso, ele o far, pois para ele tudo nmero. Cabe ao programador gerenciar e fazer
corretamente as contas, ficando atento as unidades de medida.

Prof. Antnio Maria e Profa. Ana Rublia 31


Algoritmos e Estruturas de Dados I

5.5 Operadores e Funes pr-definidas


Os operadores so meios pelo qual incrementamos, decrementamos, comparamos e
avaliamos dados dentro do computador. Temos trs tipos de operadores: Aritmticos, Relacionais
e Lgicos.
Os Operadores Relacionais e Lgicos sero apresentados na seo 6.1.1 e 6.1.2
respectivamente.
Vejamos agora os operadores Aritmticos.

5.5.1 OPERADORES ARITMTICOS


Os Operadores Aritmticos so utilizados para obter resultados numricos. Alm da adio,
subtrao, multiplicao e diviso, podem utilizar tambm o operador de multiplicao para
exponenciao.

Os smbolos para os Operadores Aritmticos so:


Tabela 6 Operadores Aritmticos
+ Adio
- Subtrao
* Multiplicao
/ Diviso
* * ou ^ Exponenciao

5.5.1.1 Hierarquia das Operaes Aritmticas

Na resoluo das operaes aritmticas os operadores possuem uma hierarquia de


prioridade ou regra de precedncia.
Tabela 7 Hierarquia das Operaes Aritmticas

1 ( ) parnteses
2 Exponenciao
3 Multiplicao ou diviso (o que vier primeiro)
4 Adio ou subtrao (o que vier primeiro)

Prof. Antnio Maria e Profa. Ana Rublia 32


Algoritmos e Estruturas de Dados I

Exemplificando...

X=11
area_triangulo (Base * Altura) / 2;
X 5*(7-9)+3*7;
Z 1 + 7 * 2 ** 3 1;
Z=56
media (P1+ P2) / 2;

5.5.2 FUNES PR-DEFINIDAS


Uma funo tem por objetivo retornar um valor ou informao. As funes pr-definidas ou
bibliotecas de funes armazenam um conjunto de funes que podem ser usadas pelos
programas.
A Tabela 8 apresenta alguns tipos de funes pr-definidas para a utilizao na construo
de algoritmos.

Entretanto, cada linguagem possui suas prprias funes pr-definidas e como veremos
adiante no tpico 15.2 o programador pode criar funes conforme necessidade.
Tabela 8 Funes pr-definidas

ABS(x) Retorna o valor absoluto de x


TRUNC(x) ou INT(x) Retorna a parte inteira de x
FRAC(x) Retorna a parte fracionria de x
SQRT(x) Retorna a raiz quadrada de x
ROUND(x) Retorna o valor arredondado de x
SQR(x) Eleva o valor de x ao quadrado
x MOD y Retorna o resto da diviso entre x e y
x DIV y Retorna o valor inteiro do resultado da diviso de x por y
CONCAT(x) Concatena (junta) uma sequencia de caracteres
SIN(x) Retorna o Seno de x
COS(x) Retorna o Coseno de x
TAN(x) Retorna a Tangente de x

Prof. Antnio Maria e Profa. Ana Rublia 33


Algoritmos e Estruturas de Dados I

Exemplificando...

A ABS (-4); // A 4
A TRUNC (2,78); // A 2
A INT (4,15); // A 4
A INT (-4,15); // A - 4
A FRAC (3.65); ;// A 0.65
A FRAC (-3.65); // A - 0.65
A SQRT(9); // A 3;
A ROUND (2.78); // A 3
A ROUND (-1,4); // A -1
A SQR(2); // A 4;
A 7 MOD 2 ; // A 1;
A 6 MOD 2 ; // A 0;
A 7 DIV 2; // A 3,5;
A 18 DIV 3; // A 6;
A CONCAT(abc, def) ; // A abcdef;
A CONCAT(ana, rubelia) ; // A anarubelia;

Prof. Antnio Maria e Profa. Ana Rublia 34


Algoritmos e Estruturas de Dados I

Exerccios Resolvidos:
1) Elabore um algoritmo para calcular o permetro de um crculo dado o seu raio, considerando que
Permetro = 2 * * Raio.
Algoritmo perimetro_circulo;
Const pi = 3,1415;
Declare peri, raio : real;
INCIO
Escreva (Programa para calcular o permetro de um crculo dado seu raio);
Escreva (Entre com o valor do raio: );
Leia (raio);
peri 2 * pi * raio;
Escreva (O permetro do crculo segundo o raio , raio, informado : , peri);
FIM.
Figura 18 Algoritmo para calcular o permetro de um crculo
2) Elabore um algoritmo para calcular consumo mdio de um veculo, conhecidos a distncia total e a
quantidade de combustvel consumido para percorrer tal distncia.
Algoritmo calc_consumo;
Declare consumo, distancia, qde_comb: real;
INCIO
Escreva (Programa para calcular o consumo mdio de combustvel);
Escreva (Informe a distancia em Km percorrida pelo veiculo: );
Leia (distancia);
Escreva (Informe a quantidade em litros de combustvel gasto: );
Leia (qde_comb);
consumo qde_comb/ distancia;
Escreva (O consumo mdio de combustvel para a distncia de, distancia, km foi
de: , consumo, litros/km.);
Escreva (O carro fez , distancia/qde_comb, km por litro!);

FIM.
Figura 19 Algoritmo para calcular o consumo de combustvel

3) Elabore um algoritmo para leia uma quantidade de chuva dada em polegadas e apresente o
equivalente em milmetros, considerando que 1 polegada = 25,4 milmetros (mm).
Algoritmo chuva_em_mm;
Declare pol, mm: real;
INCIO
Escreva (Programa para converter um volume de chuva de polegadas para milmetros.);
Escreva (Informe a quantidade de chuva em polegadas: );
Leia (pol);
mmpol * 25,4;
Escreva (volume de chuva em milmetros : , mm, mm);
FIM.
Figura 20 Algoritmo para calcular o consumo de combustvel

Prof. Antnio Maria e Profa. Ana Rublia 35


Algoritmos e Estruturas de Dados I

5.5.3 EXERCCIOS PROPOSTOS


1) Para as variveis a seguir e seus respectivos valores, B 2; X 3 determine o resultado
das expresses aritmticas a seguir:
a) X * B
b) - (X ** B)
c) (-X) ** B
d) (2*B)/X^X

2) Escreva em linguagem algortmica as expresses aritmticas:

3) Dada a declarao de variveis:


Declare A, B, C : inteiro;
X, Y, Z : real;
NOME, RUA : literal;
L1, L2 : lgico;

Classifique as expresses a seguir segundo o tipo de dado resultante da(s) operao(es), em I


(inteiro), R (real), L (literal), B (lgico) ou ND (quando no for possvel definir):
( )A+B+C ( ) A+Z /A
( )A+B+Z ( ) A B = L1
( ) NOME + RUA ( ) (A = B)
( )AB ( )X+Y/Z
( ) AY ( )X=Z/A
( ) NOME RUA ( ) L1 ** L2
( )A+B/C ( ) A + B / L2
( )A+X/Z ( ) X < L1 / RUA

4) Elabore um algoritmo para calcular o estoque mdio de uma pea, considerando que
EstoqueMedio = (QuantidadeMnima + QuantidadeMxima) /2. Faa um Teste de Mesa com
dados definidos por voc.

Prof. Antnio Maria e Profa. Ana Rublia 36


Algoritmos e Estruturas de Dados I

5) Elabore um algoritmo para leia uma temperatura em graus Fahrenheit, calcule e exiba a
temperatura convertida em graus Centgrados, considerando que C = (F - 32) * ( 5 / 9 ).
6) Elabore um algoritmo que leia o salrio base de um funcionrio, o nmero de horas extras
feitas, o valor de cada hora extra e o auxilio refeio. Imprima na tela o valor do salrio
bruto (sem descontos). Na sequencia calcule o desconto do INSS de 10% sobre o salrio
bruto e mostre o total a receber.
7) Elabore um algoritmo que leia trs nmeros e apresente o resultado da soma das
combinaes destes nmeros.
8) Elabore um algoritmo para leia uma temperatura em graus Celsius, calcule e exiba a
temperatura convertida em graus Kelvin, considerando que K = C + 273.
9) Elabore um algoritmo que dada a cotao do dlar e um valor em dlares, converta este
valor em Real e mostre o resultado.
10) Elabore um algoritmo que leia valores para X e Y respectivamente e calcule:
a) O resto da diviso de X / 3
b) X3 4
c)(X * Y) 2
d) XY + 2
e)Raiz quadrada de Y

Prof. Antnio Maria e Profa. Ana Rublia 37


Algoritmos e Estruturas de Dados I

6 COMANDOS CONDICIONAIS
Os comandos condicionais (deciso ou desvio) permitem a escolha de uma instruo ou
grupo de instrues a ser executado quando determinada condio ou no satisfeita como
exemplificado na figura a seguir.

sim Escrever ( X maior ou igual a 10)


X >= 10 ?

no

Escrever ( X ,menor a 10 )

Figura 21 Fluxograma de Comando Condicional SE ENTO SENO

...
se (tiver dinheiro suficiente) ento
almoarei em um bom restaurante;
seno
comerei um lanche;
fim-se;
...
Figura 22 Exemplo de Comando Condicional SE ENTO SENO

Neste captulo, apresentam-se Operadores Relacionais, Operadores Lgicos e Comandos


Condicionais SE ... ENTO, SE ... ENTO ... SENO e ESCOLHA ... CASO.

6.1 Operadores Relacionais e Lgicos


Os Operadores Relacionais e Lgicos so utilizados para comparar e avaliar dados
utilizados nos comandos condicionais. Desta forma, ser possvel criar algoritmos que
representem regras do mundo real como:

- Se salrio for maior que 2400 reais ento desconte 15% do imposto de renda na fonte;

- Se salrio menor que 3 salrios mnimos ento salrio famlia por dependente ser 30
reais, seno 10 reais.

- Se comprador de Minas Gerais ento aplique 18% ICMS, seno aplique 12% de ICMS.

Prof. Antnio Maria e Profa. Ana Rublia 38


Algoritmos e Estruturas de Dados I

6.1.1 OPERADORES RELACIONAIS


Os Operadores Relacionais so utilizados para comparar caracteres e nmeros. Estes
operadores sempre retornam valores lgicos (Verdadeiro ou Falso / True ou False).

Os smbolos para os Operadores Relacionais so:


Tabela 9 Operadores Relacionais
= Igual a
<> ou # Diferente de
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a

Exemplificando...
Tabela 10 Operadores Relacionais aplicados ao tipo INTEIRO
Dados os valores das variveis do tipo INTEIRO X = 3 e Y = 7, vide os
resultados das expresses a seguir:
Express Resultado
o
X=Y FALSO
X <> Y VERDADEIRO
X>Y FALSO
X<Y VERDADEIRO
X>=Y FALSO
X<=Y VERDADEIRO
.

Analogamente, o raciocnio aplicado para variveis do tipo reais, caractere e lgico.


Tabela 11 Operadores Relacionais aplicados ao tipo REAL
Dados os valores das variveis do tipo REAL X = 4.52 e Y = 4.60, vide
os resultados das expresses a seguir :
Express Resultado
o
X=Y FALSO
X <> Y VERDADEIRO
X>Y FALSO
X<Y VERDADEIRO

Prof. Antnio Maria e Profa. Ana Rublia 39


Algoritmos e Estruturas de Dados I

X>=Y FALSO
X<=Y VERDADEIRO
.
Tabela 12 Operadores Relacionais aplicados ao tipo CARACTERE
Dados os valores das variveis do tipo CARACTERE X = a e Y = d,
vide os resultados das expresses a seguir :
Express Resultado
o
X=Y FALSO
X <> Y VERDADEIRO
X>Y FALSO
X<Y VERDADEIRO
X>=Y FALSO
X<=Y VERDADEIRO
.

Para saber se um caractere maior que outro, consideram-se os caracteres em ordem


alfabtica e que os caracteres minsculos so maiores que os maisculos. Alm disto, a
diferente de A, implicando que caracteres maisculos so diferentes de caracteres minsculos,
ainda que represente a mesma letra no alfabeto.

Veja exemplo a seguir:


Tabela 13 Operadores Relacionais aplicados a CARACTERES maisculo e minsculo
Dados os valores das variveis do tipo CARACTER X = A e Y = a, vide
os resultados das expresses a seguir :
Express Resultado
o
X=Y FALSO
X <> Y VERDADEIRO
X>Y FALSO
X<Y VERDADEIRO
X>=Y FALSO
X<=Y VERDADEIRO
.

Tabela 14 Operadores Relacionais aplicados ao tipo LITERAL


Dados as variveis do tipo LITERAL X = Ana e Y = antonio, vide os
resultados das expresses a seguir:
Express Resultado

Prof. Antnio Maria e Profa. Ana Rublia 40


Algoritmos e Estruturas de Dados I

o
X=Y FALSO
X <> Y VERDADEIRO
X>Y FALSO
X<Y VERDADEIRO
X>=Y FALSO
X<=Y VERDADEIRO
.
Para comparar literais, usa-se as mesmas regras de caracteres, seguindo um processo
anlogo a procura de palavra em um dicionrio. Assim compara-se a primeira letra de X, A,
com a primeira letra de Y, a, assume-se que X menor que Y, pois letras maisculas so
menores que as minsculas.

Outro exemplo para melhor compreenso seria comparar X=Ana e Y=Antonio.


Compara-se a primeira letra das duas palavras. Observa-se que elas so idnticas e representam a
letra A maiscula. Portanto, deve-se comparar a segunda letra das duas palavras. Observa-se
que tambm so idnticas e representam a letra n minscula. Na sequncia, deve-se comparar a
terceira letra das duas palavras. Observa-se que a terceira letra de X a e a terceira letra de Y
t, como as duas so minsculas e a aparece primeiro que t no alfabeto, ento pode-se afirmar
que X menor que Y.

6.1.2 OPERADORES LGICOS


Quando se escreve expresses lgicas, elas podem ser simples ou compostas. Seu programa
pode utilizar expresses simples como Se salrio >2400 ento.... Porm, existem problemas
que exigem expresses lgicas mais complexas como: Se salrio < 2400 E dependentes > 3
ento....

Outro exemplo seria Se (matrcula=12345 OU matricula=23156 ento.... Observe que


existem casos que vrias condies com operadores relacionais precisam ser inseridas na mesma
condio.

Para fazer isto, necessita-se dos operadores lgicos E, OU e NO.

Os Operadores Lgicos so utilizados para combinar resultados de expresses, retornando


se o resultado final verdadeiro ou falso.

Prof. Antnio Maria e Profa. Ana Rublia 41


Algoritmos e Estruturas de Dados I

Tabela 15 Operadores Lgicos


E Uma expresso E verdadeira se todas as
condies forem verdadeiras
OU Uma expresso OU verdadeira se pelo menos
uma condio for verdadeira
NO Uma expresso NO inverte o valor da expresso
ou condio, se verdadeira inverte para falsa e
vice-versa

6.1.2.1 Tabela verdade genrica...

Dados os valores de x e y, observe os resultados:


Operador E - a resposta da operao verdade se x e y forem verdadeiras.
x y xE
y
V V V
V F F
F V F
F F F

Operador OU - a resposta da operao verdade se pelo menos um dos


elementos for verdadeiro.
x y x OU
y
V V V
V F V
F V V
F F F

Operador NO - Se ela for verdade, torna-se falsa, e vice-versa.


x NO
x
V F
F V
.

Prof. Antnio Maria e Profa. Ana Rublia 42


Algoritmos e Estruturas de Dados I

6.1.3 EXERCCIO PROPOSTO


Dados X2, A5, B4 e C3 e D6, determine os resultados lgicos das expresses,
indicando se so VERDADEIRAS ou FALSAS:

a) (X >= 2)
b) (X < 1) E (B >=D)
c) (A + B) > 10 OU (A + B) = (C + D)
d) (A >= C) E (D >= C)
e) NO (X > 3)
f) (X < 1) E NO (B > D)
g) NO (D < 0) E (C > 5)
h) NO (X > 3) OU (C < 7)
i) (A > B) OU (C > B)

6.2 Comando Condicional Simples SE ... ENTO

No SE ... ENTO determinada que se uma condio for satisfeita ento o bloco de
comando(s) executado.

... ; (ponto e vrgula) marca o


SE (condio) ENTO fim deste comando.
; (ponto e vrgula) marca o comando 1;
fim do comando SE. comando 2;
comando 3;
FIMSE;
...

Figura 23 Sintaxe do Comando Condicional Simples

Exemplificando...
Faa um algoritmo que leia a mdia de um aluno e escreva na tela Aluno Aprovado caso
a mdia dele seja igual ou superior a 6.

...
SE (media>=6) ENTO
escreva (Aluno Aprovado);
FIMSE;
...

Prof. Antnio Maria e Profa. Ana Rublia 43


Algoritmos e Estruturas de Dados I

Figura 24 Exemplo de Algoritmo usando Comando Condicional Simples

O trecho do algoritmo mostrado na Figura 1 apresenta a utilizao do comando


SE...ENTO... para o enunciado apresentado. Se a mdia for maior ou igual a 6 ento o
comando escreva executado. Caso a mdia seja menor que 6, o comando escreva no
executado.

6.3 Comando Condicional Composto SE ... ENTO ... SENO


No SE/ENTO/SENO se a condio for verdadeira o bloco referente aos comandos 1 e
2 ser executado. Caso contrrio sero executados os comandos 3 e 4.

...
SE (condio) ENTO
comando 1;
comando 2;
SENO
comando 3;
comando 4;
FIMSE;
...
Figura 25 Sintaxe do Comando Condicional Composto

Exemplificando...

Faa um algoritmo que leia a mdia de um aluno e escreva na tela se ele foi aprovado ou
reprovado.

...
SE (media>=6) ENTO
escreva (Aluno Aprovado);
SENO
escreva (Aluno Reprovado);
FIMSE;
...
Figura 26 Exemplo de Algoritmo usando Comando Condicional Composto

Prof. Antnio Maria e Profa. Ana Rublia 44


Algoritmos e Estruturas de Dados I

Na condio exemplificada, se for verdadeira, executa o comando APROVADO, caso


contrrio executa o comando REPROVADO.

Prof. Antnio Maria e Profa. Ana Rublia 45


Algoritmos e Estruturas de Dados I

Veja na sequencia, exemplos utilizando os Operadores Lgicos E, NO e OU.

...
SE (media >= 6) E ( frequencia > 75% )
ENTO
escreva (Aluno Aprovado)
SENO
escreva (Aluno Reprovado);
FIMSE;
...
Figura 27 Exemplo de Algoritmo usando Comando Condicional Simples

...
SE (NO tiver dinheiro) ENTO
almoarei em casa;
SENO
irei a um restaurante;
FIMSE;
...
Figura 28 Exemplo de Comando Condicional SE ENTO SENO, usando operador NO

...
SE (tiver dinheiro suficiente) OU (terminado o trabalho)
ENTO
irei ao cinema;
SENO
ficarei em casa;
FIMSE;
...
Figura 29 Exemplo de Comando Condicional SE ENTO SENO, usando operador OU

Prof. Antnio Maria e Profa. Ana Rublia 46


Algoritmos e Estruturas de Dados I

Exerccios Resolvidos:

1) Elabore um algoritmo para calcular as razes de uma equao de segundo grau, dados os
fatores a, b e c, Considerando , se d menor que zero as razes no podem ser
calculadas (no existem razes reais). Seno, possvel calcular as duas razes.

...
leia (a);
leia (b);
leia (c);
d b * b 4 * a * c;

SE (d < 0) ENTO
Escreva (No existem razes reais);
SENO
raiz1 ( -b + SQRT(d) ) / (2 * a );
raiz2 ( -b SQRT(d) ) / (2 * a );
Escreva ( raiz1 );
Escreva ( raiz2 );
FIMSE;
...

2) Faa um algoritmo que receba um nmero inteiro e verifique se esse nmero par ou mpar.

algoritmo par_impar;
declare num, r : inteiro;

INICIO
escreva (Este algoritmo verifica se um nmero par ou mpar.);
escreva (Digite um nmero inteiro: );
leia (num);
r num MOD 2;

SE (r = 0) ENTO
escreva(Este nmero par);
SENO
escreva(Este nmero mpar);
FIMSE;

FIM.

Prof. Antnio Maria e Profa. Ana Rublia 47


Algoritmos e Estruturas de Dados I

6.4 Indentao
Indentao (palavra adaptada do ingls, indentation) uma tcnica de recuo que aplicada
ao cdigo de um programa facilita a visualizao da organizao dos comandos e sua estrutura.
Seu uso iniciou-se antes da programao com o nome de tabulao de texto, sendo utilizada
rotineiramente na escrita de livros, panfletos, cartazes etc.

Exemplificando...

INSTITUTO PARA PROMOO DA FAMLIA

As inscries no curso de Maturidade Familiar devem ser feitos na secretaria do Instituto


Para Promoo da Famlia de 3 a 11 de maro. Os documentos necessrios so:
PAI
Cpia do RG
Cpia do ttulo de reservista
Cpia do ltimo holerite
ME
Cpia do Certificado do Curso A Arte De Ser Me
Cpia do RG
Comprovantes Mdicos com menos de 1 ano:
Papa Nicolau
Mamografia
FILHOS
Certido de nascimento

Figura 30 Exemplo de Indentao em Texto Comum

Na Figura 30, nota-se que a margem do primeiro pargrafo no seguida em todo texto. H
dois nveis de indentao, alm do alinhamento natural da margem esquerda do primeiro
pargrafo. O primeiro nvel refere-se s palavras PAI, ME E FILHOS, o qual foi empurrado
para a direita, no seguindo o alinhamento original da margem esquerda. O segundo nvel,
empurrado mais para a direita do primeiro nvel, refere-se aos comprovantes mdicos a serem
entregues pela ME. Observa-se que as palavras Papa Nicolau e Mamografia esto em um
alinhamento mais interno da folha. A indentao auxiliando no entendimento de quais
documentos devem ser entregues por cada um dos participantes segundo seu papel na famlia
(pai, me ou filho).

Um texto pode ter vrios nveis de indentao e deve-se garantir uniformidade da margem
para os textos de mesmo nvel. Portanto, os textos selecionados para compor o segundo nvel de
indentao devem seguir o mesmo alinhamento de margem, sendo proibida variao de margem
para o mesmo nvel.

Prof. Antnio Maria e Profa. Ana Rublia 48


Algoritmos e Estruturas de Dados I

Quando se deseja criar um novo nvel de indentao, basta empurrar um pouco mais a
margem para a direita. Na prtica, a tcnica de indentao permite associar visualmente
informaes especficas as informaes genricas.

Os conceitos de indentao aprendidos no comando SE...ENTO...SENO sero


utilizados em outros comandos e estruturas.

Exemplificando...

Faa um algoritmo que leia um nmero e responda se ele maior que 10.

Algoritmo Maior10;
declare x: inteiro; As 3 linhas de comando do
INCIO ENTO foram indentadas para
Escreva (Digite um nmero: );
facilitar a visualizao. E o
Leia (x);
mesmo foi feito para o SENO.
SE (x>10) ENTO
escreva (x, maior que 10);
escreva (Os comandos da indentao do ENTO foram executados);
escreva(A indentao facilita visualizar quais comandos esto dentro do ENTO);
SENO
escreva (x, menor que 10);
escreva (Os comandos da indentao do SENO foram executados);
escreva(A indentao facilita visualizar quais comandos esto dentro do SENO);
FIMSE;

FIM.
Figura 31 Exemplo de Indentao

Adote o hbito de utilizar a tcnica de indentao mesmo que ela parea difcil no incio.
Aps dominar seu uso, o programador observar que sua utilizao facilita o trabalho, aumenta a
produtividade, facilita o entendimento do cdigo, alm de ser exigido nas empresas.

Prof. Antnio Maria e Profa. Ana Rublia 49


Algoritmos e Estruturas de Dados I

6.5 Aninhamento de Comandos SE...ENTO...SENO


A tcnica de aninhamento de comando refere-se ao ato de utilizar um comando dentro de
outro comando. Portanto, diz-se que h aninhamento de comandos SE...ENTO...SENO,
quando utiliza-se um comando SE...ENTO...SENO dentro de outro comando
SE...ENTO...SENO. No h limite de aninhamentos, podendo-se ter vrios comandos
SE...ENTO...SENO um dentro do outro quantas vezes forem necessrias para se implementar
o algoritmo solicitado.

At o momento, explicou-se aninhamento para o comando SE...ENTO...SENO, porm


este conceito tambm vlido para outros diversos outros comandos que ainda sero ensinados.

Exemplificando...

Faa um algoritmo que leia dois nmeros inteiros e responda qual deles o maior ou se
eles so iguais.

Algoritmo Maior;
declare x, y: inteiro;
INCIO
escreva (Este algoritmo apresenta qual de 2 nmeros inteiros, lidos do teclado, o maior.);
escreva (Digite o primeiro nmero: );
leia (x);
escreva (Digite o segundo nmero: );
leia (y);
Comando SE...ENTO...SENO dentro
SE (x>y) ENTO de outro comando SE...ENTO...SENO
escreva (x, maior que , y); denomina-se aninhamento.
SENO
SE (x<y) ento
escreva (y, maior que , x);
SENO
escreva (x, igual a , y);
FIMSE;
FIMSE;

FIM.
Figura 32 Exemplo de Aninhamento de Comandos SE...ENTO...SENO, Algoritmo Maior

Prof. Antnio Maria e Profa. Ana Rublia 50


Algoritmos e Estruturas de Dados I

A Figura 32 apresenta um algoritmo contendo 1 aninhamento. Nela observa-se que h um


comando SE...ENTO...SENO dentro do bloco de um SENO. Assim, se h um comando
SE...ENTO...SENO dentro de outro comando SE...ENTO...SENO, diz-se ter
aninhamento.

O aninhamento pode ocorrer apenas com SE...ENTO e dentro dele outro SE...ENTO.

Outra forma seria ter um comando SE...ENTO dentro de um bloco SENO, bem como
outras variaes. Havendo um comando dentro do outros, afirma-se ter aninhamento.

Prof. Antnio Maria e Profa. Ana Rublia 51


Algoritmos e Estruturas de Dados I

Exerccios Resolvidos:

1) Faa um algoritmo que leia a mdia final e frequencia de um aluno e imprima na tela se o
aluno est REPROVADO POR FREQUENCIA, APROVADO, RECUPERAO ou
REPROVADO POR NOTA, sabendo que:

Aluno precisa ter 75% ou mais de frequencia nas aulas, caso contrrio ele est
reprovado por falta, independente da nota.

Aluno est aprovado se a Mdia for maior ou igual a 60 pontos.

Aluno est de recuperao se a mdia for maior ou igual a 30 e menor que 60.

Aluno est reprovado por nota se a mdia for menor que 30 pontos.

Algoritmo Aprovacao_Aluno;
Declare media, frequencia: real;
INCIO
leia(frequencia);
leia (media);

SE ( frequencia >= 0.75 ) ENTO

SE (media >= 60) ENTO


escreva("Aluno APROVADO!")
SENO
SE ( media >= 30 ) ENTO
escreva( "Aluno deve fazer RECUPERAO!");
SENO
escreva( "Aluno REPROVADO POR NOTA INSUFICIENTE!" );
FIMSE;
FIMSE;
SENO
escreva("Aluno REPROVADO POR FALTAS!");
FIMSE;
FIM.

Figura 33 Exemplo de Aninhamento de Comandos SE...ENTO...SENO, Algoritmo Aprovacao_Aluno

Prof. Antnio Maria e Profa. Ana Rublia 52


Algoritmos e Estruturas de Dados I

2) Faa um algoritmo para leia trs nmeros inteiros X, Y e Z e verificar se eles formam um
tringulo, imprimindo na tela "X, Y e Z no formam um tringulo" ou "X, Y e Z formam um
tringulo". Se as medidas formarem um tringulo, imprimir na tela se o tringulo
equiltero, issceles ou escaleno.

Algoritmo triangulo;
Declare
x, y, z: inteiro;
INICIO
leia ( x, y, z );

SE ( x+y>z ) E ( x+z>y ) E ( y+z>x ) ENTO


escreva (X, Y e X formam um tringulo );
SE( x=y ) E ( y=z ) E (x=z) ENTO
escreva (Tringulo Equiltero);
SENO
SE ( x=y ) OU ( x=z ) ou ( y=z ) ENTO
escreva (Tringulo Issceles);
SENO
SE ( x<>y ) E ( y<>z ) E ( x<>z ) ENTO
escreva (Tringulo Escaleno);
FIMSE;
FIMSE;
FIMSE;
SENO
escreva (X, Y e X no formam um Tringulo);
FIMSE;

FIM.

Figura 34 Exemplo de Aninhamento de Comandos SE...ENTO...SENO, Algoritmo triangulo

Prof. Antnio Maria e Profa. Ana Rublia 53


Algoritmos e Estruturas de Dados I

6.6 Comando Condicional ESCOLHA ... CASO


O comando condicional ESCOLHA ... CASO possibilita comparar o valor de uma
varivel/expresso em vrias opes.

A Figura 35 representa que <varivel> assumir um valor e caso o valor seja igual ao valor
em opo1, ento os comandos1 sero executados. Caso contrrio, <varivel> ser comparada
com o valor em opo2 e, no caso de ser igual, executar comandos2, seno comparar com as
demais opes existentes. Se uma opo for satisfeita, ento os comandos referente aquela opo
executada e todas as demais opes so ignoradas.

Figura 35 Fluxograma de Comando Condicional ESCOLHA CASO

Prof. Antnio Maria e Profa. Ana Rublia 54


Algoritmos e Estruturas de Dados I

ESCOLHA <varivel>
CASO 1: < comandos >;
CASO 2: < comandos >;
CASO 3: < comandos >;
...
CASO n: < comandos >;
CASO CONTRRIO: < comandos >;
FIMESCOLHA;
Figura 36 Sintaxe do Comando Condicional ESCOLHA CASO

O comando ESCOLHA...CASO, em algumas situaes, pode ser usado para simplificar a


utilizao do SE ... ENTO ... SENO, facilitando a leitura do algoritmo. Na Figura 37,
apresenta-se um trecho de algoritmo aplicando o comando SE...ENTO...SENO e, em seguida,
na Figura 38, apresenta-se a mesma lgica escrita com o comando ESCOLHA...CASO.

...
leia (cargo);
SE (cargo=1) ENTO
escreva("Presidente")
SENO
SE (cargo=5) ENTO
escreva("Chefe de Seo")
SENO
SE (cargo=8) ENTO
escreva("Auxiliar de Servios Gerais")
SENO
escreva("Esta operao no permite cargos diferentes de 1, 5 e 8");
FIMSE;
FIMSE;
FIMSE;
...
Figura 37 Algoritmo Aplicando o Comando SE...ENTO...SENO

Observa-se na Figura 37 um trecho de algoritmo que solicita leia um valor para cargo. Se o
usurio digitar o valor 1, ento aparecer na tela "Presidente". Se o usurio digitar o valor 5,
ento aparecer na tela "Chefe de Seo". Se o usurio digitar o valor 8, ento aparecer na tela
"Auxiliar de Servios Gerais". Se o usurio digitar um valor diferente de 1, 5 ou 8, ento
aparecer na tela "Esta operao no permite cargos diferentes de 1, 5 e 8".

O algoritmo descrito na Figura 38 apresenta o mesmo algoritmo escrito com o comando


ESCOLHA...CASO. Se o usurio digitar o valor 1, ento o CASO 1 ser escolhido e aparecer
na tela "Presidente". Se o usurio digitar o valor 5, ento o CASO 5 ser escolhido e aparecer
na tela "Chefe de Seo". Se o usurio digitar o valor 8, ento o CASO 8 ser escolhido e
aparecer na tela "Auxiliar de Servios Gerais". Se o usurio digitar um valor diferente de 1, 5

Prof. Antnio Maria e Profa. Ana Rublia 55


Algoritmos e Estruturas de Dados I

ou 8, ento o CASOCONTRARIO ser escolhido e aparecer na tela "Esta operao no


permite cargos diferentes de 1, 5 e 8".

Ambos algoritmos tem a mesma funcionalidade, porm o algoritmo da Figura 38 possui


uma esttica que torna mais fcil a leitura e compreenso do cdigo.

...
leia (cargo);
ESCOLHA (cargo)
CASO 1: escreva("Presidente");
CASO 5: escreva("Chefe de Seo");
CASO 8: escreva("Auxiliar de Servios Gerais");
CASOCONTRARIO escreva("Esta operao no permite cargos diferentes de 1, 5 e 8");
FIMESCOLHA;
...
Figura 38 Algoritmo Aplicando o Comando ESCOLHA...CASO

O comando ESCOLHA... CASO possui variaes na notao da clusula CASO, descritas


a seguir:
Tabela 16 Variao de Sintaxe para o Comando ESCOLHA...CASO
Notao Descrio
Caso 1: Verifica se o valor 1
Caso 3..6: Verifica se o valor um nmero entre 3 e 6. Logo, o valor pode ser 3,4,5 ou 6.
Verifica se o valor um dos valores contidos na lista 2, 7, 9, 21. Portanto, o valor
Caso 2, 7, 21:
pode ser 2 ou 7 ou 21.

Ressalta-se que a sintaxe do comando ESCOLHA...CASO no aceita operadores


relacionais como >,< , <=, etc. Portanto, se voc quiser verificar se um valor de x>=10 e x=< 20,
use a sintaxe CASO 10..20 que denota um intervalo.

...
Leia (opcao);
ESCOLHA (opo)
CASO 1: < comandos >;
CASO 2, 4: < comandos >;
CASO 3: < comandos >;
CASO 5 ..10: < comandos >;
CASO CONTRRIO: < comandos >;
FIMESCOLHA;
...
Figura 39 Sintaxe do Comando Condicional ESCOLHA CASO Outra sintaxe 2

Prof. Antnio Maria e Profa. Ana Rublia 56


Algoritmos e Estruturas de Dados I

Deve-se ressaltar tambm que o comando ESCOLHA...CASO analisa APENAS uma


varivel por vez, sendo permitido colocar ESCOLHA (SEXO) ou ESCOLHA(IDADE), mas
nunca escreva ESCOLHA(SEXO, IDADE). Este ltimo no aceito pelo comando.

Observa-se no Figura 39 diferena na sintaxe em CASO 2, 4: e CASO 5..10. Quando


se utiliza nmeros separados por vrgula, isto implica que qualquer um dos nmeros descritos
serve. Portanto a linha CASO 2,4: indica que se a opo digitada for 2 ou 4, os comandos
dentro desta estrutura sero executados! A linha CASO 5..10: indica que se a opo digitada
for um valor variando de 5 at 10, inclusive extremidades, a comparao verdadeira e,
portanto, os comandos referentes ao CASO 5..10 sero executados.

Exemplificando...

No algoritmo a seguir o valor da varivel ms lido e testado. Caso o valor esteja entre os
valores entre 1 a 12 executado o comando correspondente a opo. Caso contrrio executado
o comando que escreve ms invlido.

algoritmo descubra_mes;
declare mes : inteiro;
INICIO
escreva (Digite o nmero do ms: );
leia (mes);

ESCOLHA (mes)
CASO 1: escreva (Janeiro);
CASO 2: escreva (Fevereiro);
CASO 3: escreva (Maro);
...
CASO 12: escreva (Dezembro);
CASO CONTRRIO: escreva (Ms invlido!);
FIMESCOLHA;

FIM.
Figura 40 Exemplo de Algoritmo usando Escolha Caso

Prof. Antnio Maria e Profa. Ana Rublia 57


Algoritmos e Estruturas de Dados I

Exemplificando...

No algoritmo da Figura 41 o valor da varivel idade lido e testado. A mensagem enviada


na tela corresponder a idade digitada.

algoritmo faixa_etria;
declare idade : inteiro;
INICIO
escreva (Digite a idade em anos: );
leia (idade);

ESCOLHA (idade)
CASO 0..2: escreva (Beb);
CASO 3..9: escreva (Criana);
CASO 10..19: escreva (Adolescente);
CASO 20..30: escreva (Jovem);
CASO 31..60: escreva (Adulto);
CASO CONTRRIO: escreva (Idoso);
FIMESCOLHA;

FIM.
Figura 41 Exemplo de Algoritmo usando Escolha Caso

Prof. Antnio Maria e Profa. Ana Rublia 58


Algoritmos e Estruturas de Dados I

6.6.1 EXERCCIOS PROPOSTOS


1)D os resultados das expresses contidas na tabela a seguir, utilizando os seguintes valores
para as variveis:
Valor das variveis Expresso Resultado
(X = Y) E (Y > Z)
a) X 8; Y10; Z3;

(X <> Y) OU (Y < Z)
b) X13; Y 2; Z5;

NO (X > Y)
c) X 4; Y 7; Z9;

(X < Y) E (Y > Z)
d) X 6; Y 4; Z4;

(X >= Y) OU (Y = Z)
e) X a; Y k; ZD;

NO (X <= Y)
f) X Rosana; Y Roseane; ZRosria;

2)Para as variveis a seguir e seus respectivos valores:


a1 x 3.0 L1 V
b2 y 2.0 nome PEDRO
c3 z -1.0 rua PEDRINHO
L2 F

Determine o resultado das expresses a seguir:


a) a+c/b i) L1 OU L2
b) a+b+c j) (L1 E(NO L2))
c) c/b/a k) (L2 E (NO L1))
d) -x ** b l) (L1 E (NO L2)) OU (L2 E (NO L1))
e) - (x ** b) m) (x -y) E (c - b)
f) (-x) ** b n) (c - 3 * a) (x + 2 * z)
g) nome + rua o) rua <> nome
h) nome = rua

3)Elabore um algoritmo para receber 3 nmeros e mostre o maior.

Prof. Antnio Maria e Profa. Ana Rublia 59


Algoritmos e Estruturas de Dados I

4)Elabore um algoritmo para receber 2 nmeros e execute as operaes a seguir, segundo a


escolha do usurio.

Escolha do Operao
usurio
1 Mdia entre os nmeros digitados
2 Diferena do maior pelo menor
3 Produto entre os nmeros digitados
4 Diviso do primeiro pelo segundo

5)Elabore um algoritmo para receber 3 nmeros e mostre-os em ordem crescente.

6)Elabore um algoritmo que leia um nmero inteiro e mostre uma mensagem indicando se este
nmero par ou mpar, e se positivo ou negativo.

7)Um banco conceder um crdito especial a seus clientes dependendo de seu saldo mdio. Faa
um algoritmo que leia o saldo mdio de um cliente e calcule o valor do crdito de acordo com
a tabela a seguir. Mostre uma mensagem informando o saldo mdio e o valor do crdito. (use
o comando ESCOLHA...CASO)

Saldo Mdio Percentual

de 0 a R$ 200,00 nenhum crdito

de R$ 201,00 a R$ 400 20% do valor do saldo mdio

de R$ 401,00 a R$ 600,00 30% do valor do saldo mdio

acima de R$ 601,00 40% do valor do saldo mdio

Prof. Antnio Maria e Profa. Ana Rublia 60


Algoritmos e Estruturas de Dados I

7 COMANDOS DE REPETIO
Para compreender a necessidade de comandos de repetio, necessrio examinar algumas
solicitaes que um cliente pode fazer.

Imagine a solicitao de um algoritmo que imprima na tela a tabuada de 0 a 9 de


um nmero fornecido pelo usurio. Assim, se o usurio digitar o nmero 3, ento dever sair na
tela uma tabuada do nmero 3. A Figura 42 apresenta um algoritmo de tabuada sem utilizar
comando de repetio.
Algoritmo Tabuada_Sem_Comando_Repeticao;
declare i, tab, num: inteiro;
INICIO
Escreva (Fazer tabuada do nmero: )
Leia (tab);
Escreva ( 0 x , tab, = , 0 * tab );
Escreva ( 1 x , tab, = , 1 * tab );
Escreva ( 2 x , tab, = , 2 * tab );
Escreva ( 3 x , tab, = , 3 * tab );
Escreva ( 4 x , tab, = , 4 * tab );
Escreva ( 5 x , tab, = , 5 * tab );
Escreva ( 6 x , tab, = , 6 * tab );
Escreva ( 7 x , tab, = , 7 * tab );
Escreva ( 8 x , tab, = , 8 * tab );
Escreva ( 9 x , tab, = , 9 * tab );
FIM.
Figura 42 Exemplo de Algoritmo de Tabuada Sem Comando de Repetio

Nota-se que para fazer o algoritmo o comando escreva deve ser repetido vrias vezes tendo
pequena alterao. Como a tabuada solicitada compreendia os valores entre os nmeros 0 a 9
ento o trabalho foi repetitivo, mas no to grande.

Ao executar o algoritmo, se o usurio digitasse o nmero 5, ento o programa imprimiria


na tela:
0x5=0
1x5=5
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
5 x 5 = 25
6 x 5 = 30
7 x 5 = 35
8 x 5 = 40
9 x 5 = 45
Figura 43 Sada na tela do Algoritmo da Figura 42

Prof. Antnio Maria e Profa. Ana Rublia 61


Algoritmos e Estruturas de Dados I

O algoritmo torna-se maior e mais repetitivo se um engenheiro solicitar a voc fazer um


programa que construa a tabela de seno de 0 at 90 graus, variando de 0.0001 em 0.0001 graus.
Quantas linhas voc precisaria?

Outro pedido poderia ser a solicitao do somatrio de 1 at 1milho. Pense em como seria
a soluo para o somatrio de 1 at 10, depois imagine ter que fazer o somatrio at 10 milhes.

Invista um tempo para compreender a soluo e o trabalho repetitivo imposto por esta
solicitao.

Nestes dois ltimos exemplos, do seno e do somatrio, muitas linhas de cdigo seriam
escritas, em um trabalho puramente repetitivo, mas voc chegaria a uma soluo.

Entretanto, os clientes no gostam de solues fixas como somatrio e 1 a 1milho, ele


preferiria digitar o primeiro e ltimo nmeros, esperando a resposta do somatrio. Ou ento,
digitar os valores iniciais e finais para o clculo do seno.

Para solues que exigem trabalho repetitivo, devem-se usar comandos de repetio.

Os Comandos de Repetio, tambm conhecidos como Laos ou Loops, permitem que um


conjunto de instrues seja executado repetidamente at que uma determinada condio de
interrupo seja satisfeita.

Existem trs Comandos de Repetio denominados PARA...FAA, ENQUANTO...FAA e


REPITA...AT, categorizados da seguinte forma:

a) Comando de Repetio com Nmero de Repeties DEFINIDAS:


a.1) Teste de Condio no INCIO: o comando pertencente a esta categoria o
PARA... FAA
b) Comando de Repetio com Nmero de Repeties INDEFINIDAS:
b.1) Teste de Condio no INCIO: o comando pertencente a esta categoria o
ENQUANTO...FAA
b.2) Teste de Condio no FINAL: o comando pertencente a esta categoria o
REPITA...AT

Prof. Antnio Maria e Profa. Ana Rublia 62


Algoritmos e Estruturas de Dados I

Nmero de Repeties Definidas Teste de Condio no Incio PARA...FAA

Nmero de Repeties Indefinidas Teste de Condio no Incio ENQUANTO...FAA


Condio no Incio

Teste de Condio no Final REPITA...AT

Figura 44 Categorizao dos Comandos de Repetio

Cada um dos comandos descritos na Figura 44, PARA...AT, ENQUANTO....FAA e


REPITA...AT so detalhados nas prximas sees.

8 Comando de Repetio: Nmero Definido de Repeties e


Teste de Condio no Incio
8.1 Comando de REPETIO PARA ... FAA
O comando PARA...FAA representa o comando desta categoria. Utiliza-se este comando
quando se sabe o nmero de vezes que um conjunto de instrues deve ser repetido. No caso da
tabuada de 1 at 9, por exemplo, sabe-se que deve-se comear no nmero 1 e terminar no 9,
caracterizando de maneira clara o valor de incio e fim das repeties.

O teste de condio do comando PARA fica no incio de sua estrutura. Assim, o bloco de
comandos repetido at atingir o nmero de repeties explicitadas. Quando a condio no for
mais satisfeita, a execuo saltar os comandos que deveriam ser repetidos, deixando de execut-
los, e continuando a execuo normal do algoritmo. Se a condio no for satisfeita logo na
primeira comparao, nenhuma instruo dentro da estrutura PARA ser executada.

Prof. Antnio Maria e Profa. Ana Rublia 63


Algoritmos e Estruturas de Dados I

Figura 45 Fluxograma de Comando de Repetio PARA

Na Figura 45, a varivel i recebe um valor inicial, um valor final e um valor para
incrementar a varivel i a cada repetio realizada. Se o incremento for 1, ento a cada repetio
a varivel i ser acrescida automaticamente de 1. Se o incremento for 3, ento a cada repetio a
varivel i incrementada de 3 automaticamente.

A Figura 46 apresenta o pseudocdigo geral do comando PARA...FAA, referente ao


fluxograma apresentado na Figura 45. A varivel utilizada no comando PARA...FAA para
contar o nmero de repeties denominada de contador. O contador deve ser sempre do tipo
inteiro e o nome dado ao contador fica a critrio do programador.

...
Declare contador: inteiro;
Contador
...
utilizado no
PARA contador DE <valor inicial> AT <valor final> FAA
comando
<instrues>;
PARA...FAA
FIM -PARA;
...
Figura 46 Pseudocdigo do Comando de Repetio PARA

No exemplo apresentado na Figura 47, foi declarada uma varivel denominada CONT para
ser o contador utilizado no comando PARA...FAA. Observa-se que no comando PARA...FAA
que CONT inicia seu valor em 1, devendo ir at o valor 10. O incremento padro para CONT
1, isto , CONT comear seu valor em 1, e variar de 1 em 1, at atingir 10.

Prof. Antnio Maria e Profa. Ana Rublia 64


Algoritmos e Estruturas de Dados I

...
declare cont: inteiro;
...
PARA cont DE 1 AT 10 FAA
escreva ( o valor do contador : , cont );
FIMPARA;
Escreva ( Saiu das repeties do PARA...FAA);
...
Figura 47 Exemplo Do PARA...FAA Sem A Clusula PASSO

Executando o algoritmo da Figura 47, cont inicia-se com o valor 1, em seguida o algoritmo
imprime a mensagem o valor do contador : 1 na tela.

Ao atingir o FIMPARA, o algoritmo retorna para a primeira linha do comando


PARA...FAA. cont passa a valer 2, e como ainda no chegou at 10, a linha escreva
executada novamente, imprimindo na tela o valor do contador : 2.

E assim sucessivamente, at que o valor de cont atinja o valor 10. Neste caso, ele imprime
a mensagem na tela o valor do contador : 10, o ltimo valor descrito no comando, e passa a
executar a prxima linha aps o FIMPARA. As mensagens impressas na tela sero:

o valor do contador : 1
o valor do contador : 2
o valor do contador : 3
o valor do contador : 4
o valor do contador : 5
o valor do contador : 6
o valor do contador : 7
o valor do contador : 8
o valor do contador : 9
o valor do contador : 10
Saiu das repeties do PARA...FAA
Figura 48 Mensagens Impressas Na Tela Aps Execuo do Algoritmo da Figura 47

A Figura 49 apresenta o pseudocdigo geral do comando PARA...FAA com uma clusula


extra denominada PASSO. Esta clusula deve ser usada quando o programador desejar que o
contador varie com um valor diferente de 1 a cada repetio. Assim, se for descrito PASSO 3
no comando, o contador ir varia de 3 em 3 a cada repetio. O contador e o valor do PASSO
devem ser do tipo inteiro e o nome dado ao contador fica a critrio do programador.

Prof. Antnio Maria e Profa. Ana Rublia 65


Algoritmos e Estruturas de Dados I

Determina o valor de
... variao do contador
Declare i : inteiro;
...
PARA i de <valor inicial> AT <valor final> PASSO <valor de incremento>
FAA
<instrues>;
FIMPARA ;
...
Figura 49 Pseudocdigo do Comando de Repetio PARA

Exemplificando...
...
Declare cont: inteiro;
...
PARA cont DE 1 AT 10 PASSO 3 FAA
escreva ( o valor do contador : , cont );
FIMPARA;
Escreva ( Saiu das repeties do PARA...FAA);
...
Figura 50 Exemplo Do PARA...FAA com A Clusula PASSO

Executando o algoritmo da Figura 50, cont inicia-se com o valor 1, em seguida imprime a
mensagem o valor do contador : 1 na tela. Ao atingir o FIMPARA, o algoritmo retorna para a
primeira linha do comando PARA...FAA.

Como foi determinado o valor 3 para PASSO, ento cont passa a valer 4 (1 de CONT + 3
do PASSO). Como cont ainda no chegou at 10, a linha escreva executada novamente,
imprimindo a mensagem o valor do contador : 4 na tela. Ao atingir o FIMPARA, o algoritmo
retorna para a primeira linha do comando PARA...FAA.

Como foi determinado o valor 3 para PASSO, ento cont passa a valer 7 (4 de CONT + 3
do PASSO). E assim sucessivamente, at cont valer mais que 10. As mensagens impressas na
tela sero:
o valor do contador : 1
o valor do contador : 4
o valor do contador : 7
o valor do contador : 10
Saiu das repeties do PARA...FAA

Prof. Antnio Maria e Profa. Ana Rublia 66


Algoritmos e Estruturas de Dados I

Figura 51 Mensagens Impressas Na Tela Aps Execuo do Algoritmo da Figura 50

Prof. Antnio Maria e Profa. Ana Rublia 67


Algoritmos e Estruturas de Dados I

Exemplificando...
Faa um algoritmo que imprima na tela os nmeros de 50 a 20.
Algoritmo Inverso_50_20;
Declare cont: inteiro;
...
PARA cont DE 50 AT 20 PASSO -1 FAA
escreva ( o valor do contador : , cont );
FIM-PARA;
Escreva (Saiu das repeties do PARA...FAA);
...
Figura 52 Exemplo Do PARA...FAA Sem A Clusula PASSO

Executando o algoritmo da Figura 52, cont iniciado com o valor 50 e, em seguida, o


algoritmo imprime na tela a mensagem o valor do contador : 50. Ao atingir o FIMPARA, o
algoritmo retorna para a primeira linha do comando PARA...FAA.

Como foi determinado o valor -1 para PASSO, ento cont passa a valer 49 (50 de cont -1
do PASSO). Como cont ainda no chegou at 20, a linha escreva executada novamente,
imprimindo a mensagem o valor do contador : 49.

Isto ocorre sucessivamente at a ltima repetio da impresso com cont valendo 20. Aps
isto, cont assa a valer 19 e ento a repetio deixa de acontecer, considerando que a condio do
comando AT 20. Assim, o fluxo do programa passa para a primeira linha, imediatamente,
aps o FIMPARA, imprimindo na tela Saiu das repeties do PARA...FAA. A sada na tela
ser:
o valor do contador : 50
o valor do contador : 49
o valor do contador : 48
...
...
o valor do contador : 22
o valor do contador : 21
o valor do contador : 20
Saiu das repeties do PARA...FAA
Figura 53 Mensagens Impressas Na Tela Aps Execuo do Algoritmo da Figura 52

Prof. Antnio Maria e Profa. Ana Rublia 68


Algoritmos e Estruturas de Dados I

Exerccios Resolvidos

1. Faa um algoritmo que leia nome, nota 1 e nota 2 de 20 alunos, e imprima na tela o nome do
aluno e a sua mdia.

...
Declare i : inteiro;
nome: literal;
n1, n2 : real;
...
PARA i de 1 AT 20 passo 1 FAA
Escreva ("Nome: ");
Leia (nome);
Escreva ("Primeira nota:");
Leia (n1);
Escreva ("Segunda nota:");
Leia (n2);
media (n1+n2)/2;
Escreva ("O aluno ",nome," teve mdia igual a: ",media);
FIMPARA;
...
Figura 54 Exemplo de Algoritmo usando Comando de Repetio PARA

2. Faa um algoritmo que imprima na tela o valor do somatrio de 1 at 50.

Algoritmo Somatorio_1_50;
Declare i, total : inteiro;
Inicio
total 0;
PARA i de 1 AT 50 FAA
total total + i;
FIMPARA;
Escreva ("O somatrio de 1 a 50 : , total);
Fim.
Figura 55 Exemplo de Somatrio de 1 a 50 usando Comando de Repetio PARA

Prof. Antnio Maria e Profa. Ana Rublia 69


Algoritmos e Estruturas de Dados I

3. Faa um algoritmo que imprima na tela o valor do somatrio de 1 at N, sendo N um valor fornecido
pelo usurio.
Algoritmo Somatorio_1_N;
Declare i, total, N : inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
PARA i de 1 AT N FAA
total total + i;
FIMPARA;
Escreva ("O somatrio de 1 at , N, : , total);
Fim.
Figura 56 Exemplo de Somatrio de 1 a N usando Comando de Repetio PARA

4. Faa um algoritmo que calcule o somatrio de todos os mltiplos de 3 de 1 at N, sendo N um


valor fornecido pelo usurio. Imprimir o total do somatrio na tela.

Algoritmo Somatorio_3_de_1_N;
Declare i, total, N : inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
PARA i de 0 AT N PASSO 3 FAA
total total + i;
FIMPARA;
Escreva ("O somatrio dos mltiplos de 3 de 1 at , N, : , total);
Fim.
Figura 57 Exemplo de Somatrio dos mltiplos de 3 de 1 a N Usando a Clusula PASSO

Prof. Antnio Maria e Profa. Ana Rublia 70


Algoritmos e Estruturas de Dados I

A Figura 58 apresenta soluo alternativa sem utilizar a clusula PASSO do comando


PARA...FAA. O resultado ser o mesmo, mudando-se apenas a forma de se escreva o
algoritmo.
Algoritmo Somatorio_3_de_1_N;
Declare i, total, N, num : inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
PARA i de 1 AT trunc(N/3) FAA
total total + num;
num num + 3;
FIMPARA;
Escreva ("O somatrio dos mltiplos de 3 de 1 at , N, : , total);
Fim.
Figura 58 Exemplo de Somatrio dos mltiplos de 3 de 1 a N SEM a Clusula PASSO

Prof. Antnio Maria e Profa. Ana Rublia 71


Algoritmos e Estruturas de Dados I

Exerccios Resolvidos
1. Faa um algoritmo que calcule o somatrio dos termos a seguir, sendo N lido do teclado:
Somatrio = 1 + 1/3 + 1/5 + 1/7 + ...+ 1/N

Algoritmo Somatorio_fracao;
Declare cont: inteiro;
total : real;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
PARA cont de 1 AT N PASSO 2 FAA
total total + ( 1 / cont );
FIMPARA;
Escreva ("O somatrio : , total);
Fim.
Figura 59 Exemplo de Somatrio de 1 a N usando Comando de Repetio PARA

2. Faa um algoritmo que calcule o somatrio de N termos de frao, cujo denominador varia de
5 em 5 e o denominador de 2 em 2. N lido do teclado:
Somatrio = 1 + 6/3 +11/5 + 16/7 + ...

Algoritmo Somatorio_fracao;
Declare cont, N: inteiro;
Total, denominador, numerador : real;
Inicio
Escreva ("Digite o nmero de termos N: ");
Leia (N);
total 0;
numerador 1;
denominador 1;
PARA cont de 1 AT N FAA
total total + ( numerador / denominador);
numerador numerador + 5;
denominador denominador + 2;
FIMPARA;
Escreva ("O somatrio : , total);
Fim.
Figura 60 Exemplo de Somatrio de 1 a N usando Comando de Repetio PARA

Prof. Antnio Maria e Profa. Ana Rublia 72


Algoritmos e Estruturas de Dados I

3. Construir um algoritmo que monte a tabuada de um nmero escolhido pelo usurio:

Algoritmo tabuada;
Declare i, tab, num: inteiro;
INICIO
Escreva (Tabuada do: )
Leia (tab);
Escreva (At o nmero: );
Leia (num);
PARA i de 1 AT num FAA
Escreva (i, x , tab, = , i * tab);
FIMPARA;
FIM.
Figura 61 Exemplo de Algoritmo Tabuada, usando PARA

4. Considere o seguinte problema: Deseja-se atualizar o preo de 30 produtos em 20%, temos:

Algoritmo atualizar_preco;
Declare i : inteiro;
descricao : literal;
preco, n_preco : real;
INICIO
Escreva (Este programa permite a atualizao do preo em 20% de 30
produtos.);
PARA i de 1 AT 30 FAA
Escreva(Descrio: );
Leia (descricao);
Escreva(Preo Atual: );
Leia (preco);
n_preco preco * 1.20;
Escreva(O novo preo de ,descricao, = , n_preco);
FIMPARA;
Fim.
Figura 62 Algoritmo atualizar_preco, usando PARA

Prof. Antnio Maria e Profa. Ana Rublia 73


Algoritmos e Estruturas de Dados I

9 Comando de Repetio: Nmero Indefinido de Repeties e


Teste de Condio no Incio
9.1 Comando de REPETIO ENQUANTO ... FAA
O comando de repetio ENQUANTO utilizado quando no se sabe o nmero de vezes
que um conjunto de instrues deve ser repetido e o mnimo de repeties zero, implicando que
as instrues dentro do ENQUANTO podem no ser executadas nenhuma vez. Os algoritmos
resolvidos com o comando PARA...FAA podem ser descritos com ENQUANTO...FAA.
Entretanto, nem sempre possvel transformar um algoritmo de ENQUANTO...FAA para num
algoritmo com PARA...FAA.

O teste de condio do comando ENQUANTO tambm fica no incio de sua estrutura.


Assim, se a condio no for satisfeita logo na primeira comparao, nenhuma instruo dentro
da estrutura ENQUANTO ser executada.

Figura 63 Fluxograma de Comando Repetio ENQUANTO

A Figura 64 apresenta a sintaxe do comando ENQUANTO...FAA e a Figura 65 apresenta


um exemplo de seu uso.

ENQUANTO <condio> FAA


<comandos>;
FIMENQUANTO;
Figura 64 Pseudocdigo do Comando de Repetio ENQUANTO

Prof. Antnio Maria e Profa. Ana Rublia 74


Algoritmos e Estruturas de Dados I

Exemplificando...

A Figura 65 apresenta um exemplo genrico do uso do comando ENQUANTO...FAA.


Sua utilizao deve ser interpretada da seguinte forma. Enquanto uma condio for verdadeira,
por exemplo, carro sujo, o computador executar os comandos dentro do
ENQUANTO...FAA na ordem que aparece, uma linha de cada vez. Ao atingir a linha
FIMENQUANTO, o computador retorna para o ENQUANTO...FAA para verificar a condio.
Se a condio ainda for verdadeira, ento os comandos sero repetidos. Se a condio no for
verdadeira, por exemplo, o carro estiver limpo, ento o computador continua a execuo do
programa na linha imediatamente aps o FIMENQUANTO.

ENQUANTO carro sujo FAA


Molhe o pano na gua e sabo;
Esfregue na parte suja;
Enxgue;
FIMENQUANTO;
Figura 65 Exemplo genrico de Comando Repetio ENQUANTO

9.1.1 Peculiaridades Importantes do ENQUANTO..FAA


O comando ENQUANTO...FAA possui peculiaridades que, comumente, levam o
programador a erros por falta de ateno.

Peculiaridade 1 deve-se atribuir um valor inicial a varivel/contador utilizada na


condio, podendo ser uma atribuio ou leitura. Infelizmente, muitos programadores
desatentos se esquecem de atribuir um valor inicial.

Peculiaridade 2 - o contador ou varivel utilizada na condio NO possui incremento


automtico, por isto o programador dever fazer o incremento manualmente. Portanto,
toda vez que utilizar o comando ENQUANTO...FAA, dentro dele dever haver uma
linha contendo uma expresso matemtica incrementando um valor ao contador varivel.

Peculiaridade 3 A localizao da linha de incremento dentro do ENQUANTO pode


impactar no resultado do algoritmo. Faa sempre o teste de mesa.

Prof. Antnio Maria e Profa. Ana Rublia 75


Algoritmos e Estruturas de Dados I

A Figura 66 apresenta um algoritmo que imprime na tela os valores de 1 a 10, aplicando o


comando de repetio ENQUANTO...FAA. Respeitando a peculiaridade 1, foi atribudo o valor
1 a cont antes da condio do ENQUANTO. Caso no seja atribudo um valor inicial, quando a
linha Enquanto (cont <=10) faa for executada, cont no ter valor para ser comparado com o
nmero 10.

Como foi atribudo o valor 1 cont, ento pode-se afirmar que 1 menor que 10, tornando
a condio verdadeira, implicando na execuo das linhas de dentro do ENQUANTO. Logo,
seria impresso na tela a mensagem o valor do contador : 1.

Na linha seguinte, atende-se a pecularidade 2 e cont incrementado de 1, passando a valer


2. Na prxima linha, encontra-se o FIMENQUANTO que faz a execuo mudar para a linha
ENQUANTO (cont <=10) faa. Nesta linha, como cont vale 2, pode-se afirmar que 2 menor
que 10, tornando a condio verdadeira. Sendo a condio verdadeira, deve-se executar as linhas
dentro do ENQUANTO. Logo, seria impresso na tela a mensagem o valor do contador : 2. Na
linha seguinte, atende-se a pecularidade 2 e cont incrementado de 1, passando a valer 3.

Na prxima linha, encontra-se o FIMENQUANTO que faz a execuo mudar para a linha
ENQUANTO (cont <=10) faa. Analogamente, continua-se a execuo at cont ser
incrementado valer 10. Considerando que a condio (cont <= 10) e 10 igual a 10, ento o
algoritmo escreve na tela o valor do contador : 10 e, na linha seguinte, acrescenta mais 1 a
cont, resultando no valor 1. Quando a execuo retornar a condio com cont valendo 11, a
condio se tornar falsa e a execuo passar para a primeira linha aps o FIMENQUANTO,
imprimindo na tela Saiu das repeties do ENQUANTO...FAA.

Obrigatrio atribuir valor


Algoritmo Escreve_ate_10; inicial ao contador

Declare cont: inteiro;


Inicio
cont 1;
ENQUANTO (cont <= 10) FAA
escreva ( o valor do contador : , cont );
cont cont + 1; Obrigatrio adicionar
FIM-ENQUANTO;
algum valor ao
Escreva (Saiu das repeties do
contador dentro do
ENQUANTO...FAA);
Fim. ENQUANTO

Figura 66 Algoritmo de Comando ENQUANTO...FAA Para Escreva de 1 a 10 na tela

Prof. Antnio Maria e Profa. Ana Rublia 76


Algoritmos e Estruturas de Dados I

A tela de sada aps execuo do algoritmo contido na Figura 66 ser:


o valor do contador : 1
o valor do contador : 2
o valor do contador : 3
o valor do contador : 4
o valor do contador : 5
o valor do contador : 6
o valor do contador : 7
o valor do contador : 8
o valor do contador : 9
o valor do contador : 10
Saiu das repeties do ENQUANTO...FAA
Figura 67 Tela De Sada Aps Execuo do Algoritmo da Figura 66

9.1.2 Loop Infinito


Define-se Loop infinito quando a execuo entra num comando de repetio e no
consegue sair por erro no algoritmo, repetindo os comandos existentes dentro do lao
infinitamente. Por exemplo, na Figura 66, se o programador no escrevesse a linha CONT
CONT + 1 dentro do ENQUANTO, ento CONT teria sempre o mesmo valor. Portanto, como
CONT iniciou com o valor 1 e satisfaz a condio (cont <= 10), ento a execuo entra no
comando ENQUANTO e nunca mais conseguir sair.

Aps escrever um algoritmo com ENQUANTO...FAA verifique se:

As variveis presentes na condio do ENQUANTO tem um valor inicial lido ou


atribudo antes da condio.
Certifique-se que pelo menos uma varivel da condio tem o valor
incrementado/decrementado dentro do comando ENQUANTO e que ser possvel sair da
repetio, evitando-se o loop infinito.
O local onde ocorre o incremento/decremento est correto, evitando que possa ocorrer
uma repetio a mais ou a menos do projetado e/ou clculos errados.

Prof. Antnio Maria e Profa. Ana Rublia 77


Algoritmos e Estruturas de Dados I

Exerccios Resolvidos:
1. Faa um algoritmo que imprima na tela os nmeros de 50 a 20.

Algoritmo Inverso_50_20;
Declare cont: inteiro;
Inicio
cont 50;
ENQUANTO ( cont >=20 ) FAA
escreva ( o valor do contador : , cont );
cont cont -1;
FIM-ENQUANTO;
Escreva (Saiu das repeties do ENQUANTO...FAA);
Fim
Figura 68 Algoritmo que imprime de 50 a 20 aplicando ENQUANTO...FAA

2. Faa um algoritmo que leia nome, nota 1 e nota 2 de 20 alunos, e imprima na tela o nome do
aluno e a sua mdia.

Algoritmo Media_Aluno;
Declare cont : inteiro;
nome: literal;
n1, n2 : real;
Inicio
cont 1;
ENQUANTO (cont <= 20 ) FAA
Escreva ("Nome: ");
Leia (nome);
Escreva ("Primeira nota:");
Leia (n1);
Escreva ("Segunda nota:");
Leia (n2);
media (n1+n2)/2;
Escreva ("O aluno ",nome," teve mdia igual a: ",media);
cont cont + 1;
FIM-ENQUANTO;
Fim.
Figura 69 Exemplo de Algoritmo, usando Comando de Repetio ENQUANTO

Prof. Antnio Maria e Profa. Ana Rublia 78


Algoritmos e Estruturas de Dados I

3. Faa um algoritmo que imprima na tela o resultado do somatrio de 1 at 10.

Algoritmo soma;
declare soma, i inteiro;
INICIO
soma 0;
i 1;
ENQUANTO i <= 10 FAA
soma soma + i;
i i + 1;
FIM-ENQUANTO;
Escreva (soma);
FIM.
Figura 70 Algoritmo Soma usando ENQUANTO

4. Faa um algoritmo que imprima na tela o valor do somatrio de 1 at N, sendo N um valor


fornecido pelo usurio.

Algoritmo Somatorio_1_N;
Declare i, total, N : inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
i 1;
ENQUANTO ( i <= N ) FAA
total total + i;
i i + 1;
FIM-ENQUANTO;
Escreva ("O somatrio de 1 at , N, : , total);
Fim.
Figura 71 Exemplo de Somatrio de 1 a N usando Comando de Repetio ENQUANTO

5. Faa um algoritmo que calcule o somatrio de todos os mltiplos de 3 de 1 at N, sendo N


um valor fornecido pelo usurio. Imprimir o total do somatrio na tela.

Algoritmo Somatorio_3_de_1_N;
Declare i, total, N: inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
i 0;
ENQUANTO ( i <= N ) FAA
total total + i;
i i + 3;
FIM-ENQUANTO;

Prof. Antnio Maria e Profa. Ana Rublia 79


Algoritmos e Estruturas de Dados I

Escreva ("O somatrio dos mltiplos de 3 de 1 at , N, : ,


total);
Fim.
Figura 72 Exemplo de Somatrio dos mltiplos de 3 de 1 a N Usando ENQUANTO

6. Faa um algoritmo que calcule o somatrio de N termos de frao, cujo denominador varia
de 5 em 5 e o denominador de 2 em 2. N lido do teclado:
Somatrio = 1 + 6/3 +11/5 + 16/7 + ...

Algoritmo Somatorio_fracao;
Declare cont, N: inteiro;
total, denominador, numerador : real;
Inicio
Escreva ("Digite o nmero de termos N: ");
Leia (N);
total 0;
numerador 1;
denominador 1;
cont 1;
ENQUANTO ( cont <= N ) FAA
total total + ( numerador / denominador);
numerador numerador + 5;
denominador denominador + 2;
cont cont + 1;
FIM-ENQUANTO;
Escreva ("O somatrio : , total);
Fim.
Figura 73 Exemplo de Somatrio de 1 a N usando Comando de Repetio ENQUANTO

7. Faa um algoritmo que leia a senha de um usurio. O algoritmo somente deve permitir que o
usurio continue a executar o sistema se a senha digitada for correta, caso contrrio, o algoritmo
deve pedir a senha ao usurio.
...
Escreva (Digite a senha);
Leia (senha);
ENQUANTO senha <> xyz FAA
Escreva (Senha invlida);
Escreva (Digite a senha novamente);
Leia (senha);
FIM-ENQUANTO;
Escreva (Acertou a Senha);
...
Figura 74 Exemplo de Algoritmo, usando Comando de Repetio ENQUANTO

Prof. Antnio Maria e Profa. Ana Rublia 80


Algoritmos e Estruturas de Dados I

A Figura 74 apresenta um exemplo de algoritmo de ENQUANTO...FAA, o qual no


possvel faz-lo com o comando PARA...FAA. Este algoritmo l a senha de um usurio e
enquanto a senha estiver errada, o algoritmo fica preso no Loop solicitando nova senha. Portanto,
no possvel determinar quantas repeties ocorrem, sendo necessrio o comando
ENQUANTO...FAA.

Neste exemplo, o usurio digita a senha, cuja primeira leitura est antes do
ENQUANTO...FAA, garantindo um valor inicial para que a senha possa ser comparada na
condio do ENQUANTO. Em seguida, a condio do ENQUANTO verifica se a senha
diferente de XYZ. Se a senha digitada for diferente de XYZ, as linhas dentro do
ENQUANTO...FAA sero executadas. Essas linhas informam, nesta ordem, que a senha
invlida e pede ao usurio digit-la novamente.

Repare que enquanto a senha for diferente de XYZ o algoritmo ficar preso nestas
repeties e o usurio no conseguir fazer mais nada no algoritmo. Quando o usurio digitar a
senha correta, a condio (senha <> XYZ) ser falsa, e a execuo continuar na linha
imediatamente aps o FIM-ENQUANTO.

Prof. Antnio Maria e Profa. Ana Rublia 81


Algoritmos e Estruturas de Dados I

Exerccios Resolvidos:

1. Faa um algoritmo que leia a descrio e preo de um produto. Atualize o preo em 30%
e escreva na tela a descrio e o novo preo. Caber ao usurio a deciso de quantos
produtos deseja atualizar. Portanto, aps cada entrada de dados e impresso na tela, o
algoritmo deve solicitar ao usurio a pressionar S ou s caso queira entrar com novo
produto para clculo. O algoritmo deve parar a execuo somente se o usurio no digitar
S e nem s.

Algoritmo atualizar_preco;
Declare resposta: caracter;
descricao : literal;
preco, n_preco : real;
INICIO
Escreva (Digite S para atualizar o preo ou N para sair);
resposta S;
ENQUANTO ( resposta = S ) ou ( resposta = s ) FAA
Escreva(Descrio: );
Leia (descricao);
Escreva(Preo Atual: );
Leia (preco);
n_preco preco * 1.30;
Escreva(O novo preo de ,descricao, = , n_preco);
Escreva (Digite S para atualizar o preo ou N para sair);
leia (resposta);
FIM-ENQUANTO;
FIM.
Figura 75 Algoritmo atualizar_preco, usando ENQUANTO

Prof. Antnio Maria e Profa. Ana Rublia 82


Algoritmos e Estruturas de Dados I

2. Faa um algoritmo que leia 20 nmeros inteiros positivos e imprima na tela o maior.

Algoritmo atualizar_preco;
Declare i, num, maior : inteiro;
INICIO
i 1;
maior -1;
ENQUANTO ( i <=20 ) FAA
Escreva(Digite um nmero: );
Leia (num);
Se ( num > maior ) ento
maior num;
Fim-se;
i i + 1;
FIM-ENQUANTO;
Escreva (O maior nmero digitado , maior);
FIM.
Figura 76 Algoritmo Imprimir Maior Nmero usando ENQUANTO

Prof. Antnio Maria e Profa. Ana Rublia 83


Algoritmos e Estruturas de Dados I

10 Comando de Repetio: Nmero Indefinido de Repeties e


Teste de Condio no Final
10.1 Comando de repetio REPITA ... AT
O comando de repetio REPITA...AT utilizado quando no se sabe o nmero de vezes
que um conjunto de instrues deve ser repetido e o mnimo de repeties um (1), implicando
que as instrues dentro do REPITA...AT so executadas pelo menos uma vez. Os algoritmos
resolvidos com o comando PARA...FAA ou ENQUANTO podem ser descritos com
REPITA...AT, desde que aqueles o cdigo dentro do REPITA tenha de ser executado pelo
menos uma vez. Nem sempre ser possvel transformar um algoritmo REPITA...AT num
comando PARA...AT.

O teste de condio do comando REPITA fica no fim de sua estrutura. Assim, primeiro
executa-se um conjunto de instrues e, somente depois, realiza-se o teste de condio. Se a
condio for falsa, o fluxo de programa retorna para a linha da instruo REPITA e repete os
comandos descritos dentro do REPITA...AT. Se a condio for verdadeira, o fluxo do programa
sai da estrutura REPITA...AT e continua a execuo na primeira linha, imediatamente, aps a
clusula AT.

Figura 77 Fluxograma de Comando Repetio REPITA

Prof. Antnio Maria e Profa. Ana Rublia 84


Algoritmos e Estruturas de Dados I

A Figura 78 apresenta a sintaxe do comando REPITA...AT e a Figura 79 apresenta um


exemplo de seu uso.

REPITA

<instrues>;

AT <condio>;

Figura 78 Pseudocdigo do Comando de Repetio REPITA

10.1.1 Peculiaridades Importantes do REPITA ... AT


O comando REPITA ... AT possui peculiaridades que, comumente, levam o programador
a erros por falta de ateno.

Peculiaridade 1 deve-se atribuir um valor inicial a varivel/contador utilizada na


condio, podendo ser uma atribuio ou leitura. Infelizmente, muitos programadores
desatentos se esquecem de atribuir um valor inicial.

Peculiaridade 2 - o contador ou varivel utilizada na condio NO possui incremento


automtico, por isto o programador dever fazer o incremento manualmente. Portanto,
toda vez que utilizar o comando REPITA...AT, dentro dele dever haver uma linha
contendo uma expresso matemtica incrementando um valor ao contador varivel.

Peculiaridade 3 A localizao da linha de incremento dentro do REPITA pode


impactar no resultado do algoritmo. Faa sempre o Teste de Mesa.

Peculiaridade 4 A condio do REPITA...AT o complemento da condio do


ENQUANTO...FAA. Assim,
Se a condio do ENQUANTO for X < > 15 ento o complemento X = 15.
Se a condio do ENQUANTO for X >= 10, o complemento X <10.
Se a condio do ENQUANTO for X < 10, o complemento X >=10.

A Figura 79 apresenta um algoritmo que imprime na tela os valores de 1 a 10, aplicando o


comando de repetio REPITA...AT.

Respeitando a peculiaridade 1, foi atribudo o valor 1 a CONT. Na sequencia, executa-se a


linha REPITA, impresso na tela o valor do contador : 1 e CONT incrementado de 1,
passando a valer 2.

Em seguida, atinge-se a linha da condio AT (cont > 10). Como CONT vale 2, ento
ele no maior que 10, fazendo com que a execuo volte para a linha REPITA. impresso na
tela o valor do contador : 2 e CONT incrementado de 1, passando a valer 3.

Prof. Antnio Maria e Profa. Ana Rublia 85


Algoritmos e Estruturas de Dados I

Logo aps, atinge-se a linha da condio AT (cont > 10). Como CONT vale 3, ento
ele no maior que 10, fazendo com que a execuo volte para a linha REPITA.

Analogamente, continua-se a execuo, sucessivamente, at que CONT valha 11, tornando


a condio AT (cont > 10) verdadeira.

Quando CONT torna-se maior que 11 o programa continua a execuo na linha


imediatamente abaixo de AT (cont > 10), imprimindo na tela a mensagem Saiu das
repeties do REPITA...AT.

Algoritmo Escreve_ate_10;
Obrigatrio atribuir
Declare cont: inteiro; valor inicial ao contador
Inicio
cont 1;
REPITA
escreva ( o valor do contador : , cont ); Obrigatrio adicionar
cont cont + 1;
algum valor ao
AT ( cont > 10 );
Escreva (Saiu das repeties do REPITA...AT); contador dentro do
Fim. REPITA

Figura 79 Algoritmo de Comando ENQUANTO...FAA Para Escreva de 1 a 10 na tela

Exemplificando...

escreva ( o valor do contador : , cont cont AT (CONT


cont ); +1 >10)
o valor do contador : 1 1+1=2 2 > 10 ? NO
o valor do contador : 2 2+1=3 3 > 10 ? NO
o valor do contador : 3 3+1=4 4 > 10 ? NO
o valor do contador : 4 4+1=5 5 > 10 ? NO
o valor do contador : 5 5+1=6 6 > 10 ? NO
o valor do contador : 6 6+1=7 7 > 10 ? NO
o valor do contador : 7 7+1=8 8 > 10 ? NO
o valor do contador : 8 8+1=9 9 > 10 ? NO
o valor do contador : 9 9 + 1 = 10 10 > 10 ? NO
o valor do contador : 10 10 + 1 = 11 11 > 10 ? SIM
Saiu das repeties do REPITA.
Figura 80 Teste de Mesa do trecho REPITA ... AT

Prof. Antnio Maria e Profa. Ana Rublia 86


Algoritmos e Estruturas de Dados I

Prof. Antnio Maria e Profa. Ana Rublia 87


Algoritmos e Estruturas de Dados I

A tela de sada aps execuo do algoritmo contido na Figura 66 ser:


o valor do contador : 1
o valor do contador : 2
o valor do contador : 3
o valor do contador : 4
o valor do contador : 5
o valor do contador : 6
o valor do contador : 7
o valor do contador : 8
o valor do contador : 9
o valor do contador : 10
Saiu das repeties do REPITA.
Figura 81 Tela De Sada Aps Execuo do Algoritmo da Figura 66

10.1.2 Loop Infinito


Se o programador se esquecer de inserir uma linha variando o valor da varivel que est na
condio AT, o algoritmo entra em Loop infinito dentro do comando REPITA...AT.

Aps escrever um algoritmo com REPITA...AT verifique se:

Os comandos dentro do REPITA realmente podero ser executados pelo uma vez
mesmo que a condio no seja satisfeita.
As variveis presentes na condio do REPITA tem um valor inicial lido ou atribudo
antes de chegar na condio.

Certifique-se que pelo menos uma varivel da condio tem o valor


incrementado/decrementado dentro do comando REPITA e que ser possvel sair da
repetio, evitando-se o Loop Infinito.

O local onde ocorre o incremento/decremento est correto, evitando que possa ocorrer
uma repetio a mais ou a menos do projetado e/ou clculos errados.

Prof. Antnio Maria e Profa. Ana Rublia 88


Algoritmos e Estruturas de Dados I

Exemplificando...
Faa um algoritmo que imprima na tela os nmeros de 50 a 20.

Algoritmo Inverso_50_20;
Declare cont: inteiro;
Inicio
cont 50;
REPITA
escreva ( o valor do contador : , cont );
cont cont -1;
AT ( cont < 20 );
Escreva (Saiu das repeties do REPITA...AT);
Fim
Figura 82 Algoritmo que imprime de 50 a 20 aplicando REPITA...AT

Observe que o teste da condio cont < 20 executado somente aps a execuo dos
comandos dentro do REPITA...AT. O fluxo do programa repetir os comandos dentro do
REPITA...AT sempre que a condio for falsa. Quando a condio for verdadeira o fluxo
desviado para a primeira linha imediatamente aps a clusula AT.

Prof. Antnio Maria e Profa. Ana Rublia 89


Algoritmos e Estruturas de Dados I

Exerccios Resolvidos:
1. Faa um algoritmo que leia nome, nota 1 e nota 2 de 20 alunos, e imprima na tela o nome
do aluno e a sua mdia.

Algoritmo Media_Aluno;
Declare cont : inteiro;
nome: literal;
n1, n2 : real;
Inicio
cont 1;
REPITA
Escreva ("Nome: ");
Leia (nome);
Escreva ("Primeira nota:");
Leia (n1);
Escreva ("Segunda nota:");
Leia (n2);
media (n1+n2)/2;
Escreva ("O aluno ",nome," teve mdia igual a: ",media);
cont cont + 1;
AT ( cont > 20 );
Fim.
Figura 83 Exemplo de Algoritmo, usando Comando de Repetio REPITA...AT

2. Faa um algoritmo que imprima na tela o resultado do somatrio de 1 at 10.

Algoritmo soma;
declare soma, i: inteiro;
INICIO
soma 0;
i 1;
REPITA
soma soma + i;
i i + 1;
AT ( i > 10 );
Escreva (soma);
FIM.
Figura 84 Algoritmo Soma, usando REPITA...AT

Prof. Antnio Maria e Profa. Ana Rublia 90


Algoritmos e Estruturas de Dados I

3. Faa um algoritmo que imprima na tela o valor do somatrio de 1 at N, sendo N um


valor fornecido pelo usurio.

Algoritmo Somatorio_1_N;
Declare i, total, N : inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
i 1;
REPITA
total total + i;
i i + 1;
AT ( i > N );
Escreva ("O somatrio de 1 at , N, : , total);
Fim.
Figura 85 Exemplo de Somatrio de 1 a N usando Comando de Repetio REPITA...AT

4. Faa um algoritmo que calcule o somatrio de todos os mltiplos de 3 de 1 at N, sendo


N um valor fornecido pelo usurio. Imprimir o total do somatrio na tela.

Algoritmo Somatorio_3_de_1_N;
Declare i, total, N: inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
i 0;
REPITA
total total + i;
i i + 3;
AT ( i > N );
Escreva ("O somatrio dos mltiplos de 3 de 1 at , N, : ,
total);
Fim.
Figura 86 Exemplo de Somatrio dos mltiplos de 3 de 1 a N Usando REPITA...AT

Prof. Antnio Maria e Profa. Ana Rublia 91


Algoritmos e Estruturas de Dados I

5. Faa um algoritmo que calcule o somatrio de N termos de frao, cujo denominador


varia de 5 em 5 e o denominador de 2 em 2. N lido do teclado:
Somatrio = 1 + 6/3 +11/5 + 16/7 + ...

Algoritmo Somatorio_fracao;
Declare cont, N: inteiro;
total, denominador, numerador : real;
Inicio
Escreva ("Digite o nmero de termos N: ");
Leia (N);
total 0;
numerador 1;
denominador 1;
cont 1;
REPITA
total total + ( numerador / denominador);
numerador numerador + 5;
denominador denominador + 2;
cont cont + 1;
AT ( cont > N );
Escreva ("O somatrio dos mltiplos de 3 de 1 at , N, : ,
total);
Fim.
Figura 87 Exemplo de Somatrio de 1 a N usando Comando de Repetio REPITA...AT

6. Faa um algoritmo que leia a senha de um usurio. O algoritmo somente deve permitir
que o usurio continue a executar o sistema se a senha digitada for correta, caso
contrrio, o algoritmo deve pedir a senha ao usurio.

...
Escreva (Digite a senha);
REPITA
Escreva (Senha invlida);
Escreva (Digite a senha novamente);
Leia (senha);
AT (senha = xyz);
Escreva (Acertou a Senha);
...
Figura 88 Exemplo de Algoritmo, usando Comando de Repetio REPITA...AT

Prof. Antnio Maria e Profa. Ana Rublia 92


Algoritmos e Estruturas de Dados I

7. Faa um algoritmo que leia a descrio e preo de um produto. Atualize o preo em 30%
e escreva na tela a descrio e o novo preo. Caber ao usurio a deciso de quantos
produtos deseja atualizar. Portanto, aps cada entrada de dados e impresso na tela, o
algoritmo deve solicitar ao usurio a pressionar S ou s caso queira entrar com novo
produto para clculo. O algoritmo deve parar a execuo somente se o usurio no digitar
S e nem s.

Algoritmo atualizar_preco;
Declare resposta: caracter;
descricao : literal;
preco, n_preco : real;
INICIO
Escreva (Digite S para atualizar o preo ou N para sair);
resposta S;
REPITA
Escreva(Descrio: );
Leia (descricao);
Escreva(Preo Atual: );
Leia (preco);
n_preco preco * 1.30;
Escreva(O novo preo de ,descricao, = , n_preco);
Escreva (Digite S para atualizar o preo ou N para sair);
leia (resposta);
AT (resposta = N) ou (resposta = n)
FIM.
Figura 89 Algoritmo atualizar_preco, usando REPITA

8. Faa um algoritmo que leia 20 nmeros inteiros positivos e imprima na tela o maior.

Algoritmo atualizar_preco;
Declare i, num, maior : inteiro;
INICIO
i 1;
maior -1;
REPITA
Escreva(Digite um nmero: );
Leia (num);
Se ( num > maior ) ento
maior num;
Fim-se;
i i + 1;
AT ( i > 20 );
Escreva (O maior nmero digitado , maior);
FIM.
Figura 90 Algoritmo Imprimir Maior Nmero usando ENQUANTO

Prof. Antnio Maria e Profa. Ana Rublia 93


Algoritmos e Estruturas de Dados I

Compare a seguir o uso das Estruturas de Repetio aprendidas:


Usando o ENQUANTO: Faa um algoritmo que leia 50 nmeros fornecidos pelo usurio,
calcule e exiba a mdia.

Algoritmo media;
Declare soma, num, media: real;
cont : inteiro;
INICIO
soma 0;
cont 1;
ENQUANTO cont <= 50 FAA
Escreva (Digite um nmero: );
leia (num);
soma soma + num;
cont cont + 1;
Media soma / cont ;
FIMENQUANTO;
Escreva(A mdia dos nmeros digitados : , media);
FIM.

Usando o REPITA: Faa um algoritmo que leia 50 nmeros fornecidos pelo usurio,
calcule e exiba a mdia.

Algoritmo media;
Declare soma, num, media: real;
cont : inteiro;
INICIO
soma 0;
cont 1;
REPITA
Escreva (Digite um nmero: );
leia (num);
soma soma + num;
cont cont + 1;
Media soma / cont ;
AT cont > 50;
Escreva(A mdia dos nmeros digitados : , media);
FIM.

Prof. Antnio Maria e Profa. Ana Rublia 94


Algoritmos e Estruturas de Dados I

Usando o PARA: Faa um algoritmo que leia 50 nmeros fornecidos pelo usurio, calcule
e exiba a mdia.

Algoritmo media;
Declare soma, num, media: real;
cont : inteiro;
INICIO
soma 0;
PARA cont de 1 AT 50 FAA
Escreva (Digite um nmero: );
leia (num);
soma soma + num;
Media soma / cont ;
FIMPARA;
Escreva(A mdia dos nmeros digitados : , media);
FIM.

Prof. Antnio Maria e Profa. Ana Rublia 95


Algoritmos e Estruturas de Dados I

10.1.3 EXERCCIOS PROPOSTOS


1) Usando os comandos REPITA, ENQUANTO e PARA, construa um algoritmo que dado
um nmero inteiro (entre 1 e 10), apresente a tabuada deste nmero.
2) Usando os comandos REPITA, ENQUANTO e PARA, construa um algoritmo para
calcular a fatorial de um nmero. (exemplo: o fatorial de 5! = 1*2*3*4*5 = 120).
3) Usando os comandos REPITA, ENQUANTO e PARA, construa um algoritmo que leia 10
valores inteiros, ache e mostre o maior valor.
4) Uma empresa de marketing fez uma pesquisa de mercado para saber se as pessoas
gostaram ou no de um produto lanado no mercado. Os entrevistados informavam o
sexo e a resposta Sim ou No. Sabendo-se que foram entrevistadas N pessoas, fazer um
algoritmo que calcule e exiba:
a) A qde de pessoas que responderam sim;
b) A qde de pessoas que responderam no;
c) A porcentagem de pessoas do sexo feminino que responderam sim; e
d) A porcentagem de pessoas do sexo masculino que responderam no.
5) Uma empresa decidiu fazer um recrutamento para preencher algumas vagas. Os
candidatos sero cadastrados por computador. Faa um algoritmo para:
a) Leia o nmero do candidato, a idade e o sexo, a experincia profissional (SIM /
NO);
b) Mostrar a idade mdia dos candidatos;
c) Mostrar o nmero total de candidatos e candidatas; e
d) Mostrar os candidatos (homens e mulheres) maiores de idade que tenham experincia
no profissional.

6) Construa um algoritmo que calcule a srie descrita a seguir para um nmero de termo
informado pelo usurio via teclado. (12 + 1)/1 + (22 + 1)/3 + (32 + 1)/5 + (42 + 1)/7 + ...

7) Construa um algoritmo que calcule os 20 primeiros termos da Srie de Fibonacci. A srie


formada comeando-se com 0 e 1, a seguir, obtm-se o prximo nmero de Fibonacci
somando-se os dois anteriores e, assim, sucessiva e infinitamente. Exemplo da seqncia
de Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, .... Faa o Teste de Mesa do algoritmo.

Prof. Antnio Maria e Profa. Ana Rublia 96


Algoritmos e Estruturas de Dados I

11 VARIVEIS COMPOSTAS HOMOGNEAS: VETORES E


MATRIZES
Os Comandos de Repeties vistos mostraram-se teis para evitar trabalhos repetitivos,
delegando para o computador a repetio automtica de trechos de cdigo. Porm, h problemas
que o comando de repetio no elimina a soluo repetitiva braal.
Na Figura 91 apresenta-se um algoritmo que l o nome, a nota 1 e a nota 2 de 20 alunos, e
imprime na tela o nome do aluno e a sua mdia.

Algoritmo Media_Aluno;
Declare cont : inteiro;
nome: literal;
n1, n2 : real;
Inicio
cont 1;
REPITA
Escreva ("Nome: ");
Leia (nome);
Escreva ("Primeira nota:");
Leia (n1);
Escreva ("Segunda nota:");
Leia (n2);
media (n1+n2)/2;
Escreva ("O aluno ",nome," teve mdia igual a: ",media);
cont cont + 1;
AT ( cont > 20 );
Fim.
Figura 91 Algoritmo Media_Aluno, usando Comando de Repetio REPITA...AT

Uma pequena variao na sada do algoritmo pode torn-lo bem mais complexo. Por
exemplo, se fosse solicitado um algoritmo que lesse o nome, a nota 1 e a nota 2 de 20 alunos, e
imprimisse na tela a mdia geral dos alunos e depois o nome, notas e mdia de cada aluno.
Neste caso, o Comando de Repetio no seria suficiente para resolver o problema. Seria
necessrio declarar vrias variveis para armazenar todos os nomes e notas, para calcular e
imprimir a mdia geral e os dados digitados no final. Uma possvel soluo considerando apenas
3 alunos seria:

Algoritmo Media_Geral;
Declare n1,n2,n3,n4,n5,n6, Media, MediaGeral: real;
nome1, nome2, nome3: literal;
Inicio
Escreva(Nome: );
Leia(nome1);
Escreva(Nota 1: );
Leia(n1);
Escreva(Nota 2: );

Prof. Antnio Maria e Profa. Ana Rublia 97


Algoritmos e Estruturas de Dados I

Leia(n2);

Escreva(Nome: );
Leia(nome2);
Escreva(Nota 1: );
Leia(n3);
Escreva(Nota 2: );
Leia(n4);

Escreva(Nome: );
Leia(nome3);
Escreva(Nota 1: );
Leia(n5);
Escreva(Nota 2: );
Leia(n6);

MediaGeral (n1+n2+n3+n4+n5+n6)/6;
Escreva(A Mdia Geral , MediaGeral);

Media (n1+n2)/2;
Escreva(nome1, n1, n2, Media);

Media (n3+n4)/2;
Escreva(nome2, n3, n4, Media);

Media (n5+n6)/2;
Escreva(nome3, n5, n6, Media);

FIM.
Figura 92 Algoritmo Media_Geral, usando Comando de Repetio REPITA...AT

Observa-se a necessidade de repetir a declarao da varivel para guardar as notas dos


alunos, bem como seus nomes. Quando se declara variveis do tipo inteiro, real, caractere,
dentre outros, apenas um valor pode ser armazenado em cada varivel. Porm, existem
problemas que exigem Estrutura de Dados Compostas.

At aqui, apresentaram-se declaraes e atribuies de variveis utilizando Tipos de Dados


Bsicos, com variveis simples: real, inteiro, literal, caractere e lgico. Entretanto, haver
situaes em que estes Tipos de Dados no sero suficientes para soluo de problemas e ser
necessrio utilizar Estruturas de Dados diferentes dos Tipos Bsicos.

No caso da estrutura Vetor e Matriz, pode-se armazenar diversos dados de um mesmo tipo
em uma nica varivel. O fato de armazenar dados do mesmo tipo, somente inteiro ou somente
real ou somente lgico etc, d aos vetores e matrizes a classificao de Estruturas de Dados
Homogneas (homognea quer dizer do mesmo tipo de dado).

Como mostrado a seguir, classifica-se este tipo de estrutura em Vetores (unidimensionais) e


Matrizes (bidimensionais).

Prof. Antnio Maria e Profa. Ana Rublia 98


Algoritmos e Estruturas de Dados I

12 VETORES
Considere o algoritmo apresentado na Figura 93 que solicita ao usurio a entrada dos nomes
de 20 alunos e os imprime na tela na medida em que o dado digitado.
Algoritmo nomes_alunos;
Declare nome: literal;
i : inteiro;
INICIO
PARA i de 1 AT 20 FAA
Escreva ("Digite o nome do aluno ",i,":");
Leia (nome);
Escreva ("Aluno", i, : , nome);
FIMPARA;
FIM.
Figura 93 Exemplo de Algoritmo usando Comando de Repetio REPITA

Porm, se pedir para leia o nome de 20 alunos e depois de lido todos, imprimi-los na tela,
no haveria soluo com o que foi aprendido at o momento, a no ser que se declarasse 20
variveis para nome.
O algoritmo da Figura 94 mostra claramente esta limitao. Ele l 20 nomes de alunos um
a um, conforme o usurio os digita. Neste caso usamos apenas de uma varivel inteira que serve
como contador (i) e uma varivel do tipo literal para armazenar o nome.
O nome do aluno digitado, armazenado na varivel nome, exibido ao usurio, e a varivel
liberada para armazenar o prximo nome de aluno. Se voc solicitar ao programa que exiba o
contedo da varivel nome aps o comando PARA, ver que somente o ltimo nome digitado
ser exibido.

Faa o teste. Insira o comando Escreva ("Nome do Aluno: ", nome) aps o comando
FIMPARA.
Algoritmo nomes_alunos;
Declare nome : literal;
i : inteiro; // declarao do contador
INICIO
PARA i de 1 AT 20 FAA
Escreva ("Digite o nome do aluno ",i,":");
Leia (nome);
Escreva ("Aluno", i, : , nome);
FIMPARA;
FIM.
Escreva ("Nome do Aluno: ", nome); /* apresentar somente o ltimo
nome de aluno digitado, que corresponde ao ltimo valor armazenado na
varivel nome. */
Figura 94 Algoritmo nomes_alunos

Prof. Antnio Maria e Profa. Ana Rublia 99


Algoritmos e Estruturas de Dados I

Para que todos os nomes de alunos digitados sejam exibidos preciso armazen-los em
uma estrutura de dados. Neste caso utiliza-se uma estrutura de dados homognea
unidimensional, o vetor.

Um vetor uma varivel formada por vrios espaos na memria, todos do mesmo tipo,
com o mesmo identificador (mesmo nome) e alocadas sequencialmente na memria.

12.1 Representao Grfica de um Vetor


A representao grfica de um vetor com espao para guardar 5 valores, V[5], :

V[1] V[2] V[3] V[4]


V[5]

V=
ndices
1 2 3 4 5

Figura 95 Representao Grfica de um Vetor

A Figura 95 apresenta um vetor chamado V, que possui cinco posies. Pode-se armazenar
cinco valores neste vetor. Cada posio representada pelo seu ndice. Assim, para saber o valor
armazenado na primeira posio basta escreva V[1], na segunda posio, V[2], e assim
sucessivamente. Os nmeros abaixo do vetor de 1 a 5 so denominados de ndices e identificam
qual posio deseja-se manipular.

12.2 Declarao de Vetor


A declarao de um vetor em pseudocdigo segue a seguinte sintaxe:

Algoritmo teste;
Declare <nome da varivel>[tamanho]: tipo;
...
INICIO
<comandos>;
FIM.
Figura 96 Declarao de Vetor em pseudocdigo

Onde: nome o nome da varivel tipo vetor, tamanho a quantidade de dados que ser
armazenada na varivel e tipo o tipo de dado que poder ser armazenado.

Prof. Antnio Maria e Profa. Ana Rublia 100


Algoritmos e Estruturas de Dados I

Exemplificando...

Declarando um vetor V do tipo inteiro de 5 posies.

Algoritmo teste;
Declare V[5]: inteiro;
...
INICIO
<comandos>;
FIM.
Figura 97 Exemplo de Declarao de um Vetor de 5 posies do tipo inteiro

Declarou-se na Figura 97 um vetor chamado V com 5 posies e em cada posio pode-se


armazenar um inteiro.

12.3 Manipulao de Dados de um Vetor


Para inserir, calcular, modificar um valor em um Vetor preciso escolher (identificar) um
ndice e informar o valor que ser colocado naquela posio indicada pelo ndice. Veja alguns
exemplos:

V[1] 23; // Atribui o valor 23 para a primeira posio do vetor

V[5] -4; // Atribui o valor -4 para a quinta posio do vetor

V[3] V[1] + V[5]; // Soma os valores da posio 1 e da posio 5, guardando na posio 3

Aps a execuo destas trs linhas acima, o vetor ficaria com a seguinte configurao:

V= 23 19 -4
1 2 3 4 5

O ndice um valor numrico do tipo inteiro, comeando em 1 e cada valor corresponde a


uma posio do vetor.

12.4 Operaes de Entrada e Sada de dados em um Vetor


Voltando ao nosso exemplo da Figura 94. Para que algoritmo armazene e exiba todos os 20
nomes de alunos, precisamos de um Vetor de tamanho 20 e que possa receber dados do tipo
literal.

Prof. Antnio Maria e Profa. Ana Rublia 101


Algoritmos e Estruturas de Dados I

A declarao desse nosso Vetor ficar assim:

...
Declare nome [20]: literal;
...
nome[1]

nome= Ana Jos Luiz Antonio Paula Bia


1 2 3 4 5 ... ... 20

Figura 98 Vetor nome de 20 posies do tipo literal

Para Entrada de Dados em um vetor preciso utilizar um comando de repetio como o


PARA, veja Figura 99. Observe que dentro do comando Leia coloca-se o nome do vetor seguido
de colchetes [ ] e o contador i usado no PARA.

A primeira vez que o comando Leia for executado i valer 1, implicando que o valor
digitado pelo usurio ficar na posio 1 do vetor, analogamente os valores sero lidos e
colocados um aps o outro at a posio 20.

Exemplificando...

Algoritmo nomes_alunos;
Declare nome [20]: literal; /* trocamos a varivel nome: literal por um
vetor de tamanho 20 do tipo literal */
i : inteiro;
Entrada dos
INICIO
dados Escreva ("Entre com o nome dos Alunos);

PARA i de 1 AT 20 FAA

Sada dos Escreva ("Aluno ", i, ":"); //solicita os nomes dos alunos um a um
Leia (nome[ i ]); //os dados so armazenados um a um, no vetor
dados
FIMPARA;

PARA i de 1 AT 20 FAA
Escreva (Aluno: , nome[ i ]); /* todos os nomes armazenados no
vetor nome sero exibidos */
FIMPARA;
FIM.
Figura 99 Algoritmo nomes_alunos utilizando Vetor, entrada e sada de dados

Prof. Antnio Maria e Profa. Ana Rublia 102


Algoritmos e Estruturas de Dados I

Para exibir (Sada) dados o procedimento o mesmo, utiliza-se outro comando PARA e no
comando Escreva coloca-se o nome do vetor seguido de [ ] e o contador i usado no PARA.

O mesmo raciocnio vlido para guardar a nota 1 e nota 2 de cada aluno, bastando criar
um vetor de 20 posies para Nota1 e outro de 20 posies para Nota2. Deste modo, possvel
armazenar todos os valores digitados pelo usurio.

12.5 Processamento dos Dados de um Vetor


Um exemplo de processamento dos dados de um vetor seria multiplicar todos os valores
de um vetor de 10 posies pelo nmero 3. Deve-se utilizar o comando PARA, a fim de
processar todos os valores como mostrado no algoritmo da Figura 100:

Exemplificando...

Algoritmo Mult_tres;
Declare Num[10]: inteiro;
i : inteiro;
INICIO
Escreva ("Entre com os valores);
PARA i de 1 AT 10 FAA Processamento dos
Escreva ("Valor ", i, ":"); dados
Leia (Num[ i ]);
FIMPARA;

PARA i de 1 AT 10 FAA
Num[i] Num[i] * 3; // multiplica cada valor por trs, guardando o resultado no prprio vetor.
FIMPARA;
Sada dos
PARA i de 1 AT 10 FAA
Escreva (Valor: , Num[ i ]); dados
FIMPARA;
FIM.
Figura 100 Algoritmo nomes_alunos utilizando Vetor, processando dados

Prof. Antnio Maria e Profa. Ana Rublia 103


Algoritmos e Estruturas de Dados I

12.5.1 EXERCCIOS PROPOSTOS


1) O algoritmo da Figura 54 l as notas e calcula a mdia de 20 alunos. Altere-o para que
armazene e exiba o nome, as duas notas de cada aluno e sua mdia.

2) Faa um algoritmo que leia um vetor de 20 posies e uma varivel inteira A. A seguir,
mostre o produto da varivel A por cada valor do vetor.

3) Faa um algoritmo que leia dois vetores: F[20] e G[20]. Calcule e mostre, a seguir, a soma
dos valores de F com G, guardando o resultado em um 3 vetor H.

4) Faa um algoritmo que leia dois vetores: F[20] e G[20]. Calcule e mostre, a seguir, a soma
dos valores de F com G, guardando o resultado no vetor F.

5) Faa um algoritmo que leia um vetor de tamanho 20 e inverta seus elementos, trocando o
1 elemento com o ltimo, o 2 elemento com o penltimo. Mostre o vetor invertido.

6) Faa um algoritmo que leia um vetor de tamanho 6, conte quantos valores deste vetor so
negativos e mostre essa informao.

7) Faa um algoritmo que leia um vetor de 10 posies, substitua todos os valores iguais a
zero por 1 e escreva o vetor resultante.

8) Faa um algoritmo que leia um vetor de 20 posies e uma varivel inteira A. Imprima na
tela achou se o valor A existe no vetor, e no achou se o valor no foi encontrado.

9) Faa um algoritmo que leia um vetor de 20 posies e uma varivel inteira A. Imprima na
tela a(s) posio(es) em que o valor A foi encontrado no vetor.

Prof. Antnio Maria e Profa. Ana Rublia 104


Algoritmos e Estruturas de Dados I

13 MATRIZES
Vimos que uma estrutura capaz de armazenar diversos dados de um mesmo tipo em uma
nica varivel considerada uma Estrutura de Dados Homognea, lembrando que homognea
quer dizer do mesmo tipo de dado. E classificamos este tipo de estrutura em Vetores
(unidimensionais), visto na seo anterior, e Matrizes (bidimensionais).

Uma Matriz uma Estrutura de Dados Homognea Bidimensional que permite


armazenar diversos dados de um mesmo tipo em uma nica varivel. Este tipo de estrutura tem
sua principal utilizao vinculada criao de tabelas. E por se relacionar diretamente com a
utilizao de tabelas, a matriz mais comum a de duas dimenses (linha e coluna).

13.1 Representao Grfica de uma Matriz


A representao grfica de uma Matriz segue o formato de tabela. Para acessar um
elemento desta Matriz devemos fornecer o nome da matriz e o ndice da linha e da coluna do
elemento desejado (um nmero de 1 a 5 para a linha e um nmero de 1 a 10 para a coluna, neste
caso).

Exemplificando...
Representao de uma Matriz M 5X10 da Figura 103:
M[1,1] M[1,2] M[1,10]

M 1

M[5,1] 5
M[5,10]
1 2 3 4 5 6 7 8 9 10

Figura 101 Representao de uma Matriz 5X10

Onde:

M[1,1] indica o primeiro elemento da primeira linha da matriz M;


M[1,2] indica o segundo elemento da primeira linha da matriz M;
M[1,10] indica o dcimo elemento da primeira linha da matriz M; e
M[5,10] indica o dcimo elemento da ltima linha da matriz M.

Prof. Antnio Maria e Profa. Ana Rublia 105


Algoritmos e Estruturas de Dados I

13.2 Declarao de Matriz


As dimenses de uma matriz so representadas por valores inteiros positivos referentes s
linhas e colunas. A declarao de uma matriz em pseudocdigo segue a seguinte sintaxe:

Algoritmo teste;
Declare < nome da varivel > [ <n de linhas>, <n de colunas>] :
tipo;
...
INICIO
<comandos>;
FIM.
Figura 102 Declarao de matriz em pseudocdigo

Exemplificando...
Declarando uma matriz M do tipo inteiro de 5 linhas e 10 colunas (5X10).

Algoritmo teste;
Declare M [5 , 10] : inteiro;
...
INICIO
<comandos>;
FIM.
Figura 103 Exemplo de Declarao de uma Matriz 5X10 do tipo inteiro

Como no vetor o acesso a cada elemento de uma matriz feito pela especificao de sua
posio por meio do seu ndice.

Na Figura 103 apresenta a declarao de uma matriz M com 5 linhas e em cada linha 10
colunas que podem armazenar valores inteiros. No total, a matriz M pode armazenar 50 valores
inteiros.

Prof. Antnio Maria e Profa. Ana Rublia 106


Algoritmos e Estruturas de Dados I

Exemplificando...

Declarando vetor e matrizes de diferentes dimenses.

Algoritmo teste;
Declare A [4] : Inteiro;
B [20 , 4] : Inteiro;
C [5, 20 , 4] : Inteiro;
D [2 ,5, 20 , 4] : Inteiro;
E [3 , 2 , 5, 20 , 4] : Inteiro;
F [2 ,3 , 2 , 5, 20 , 4] : Inteiro;
...
INICIO
<comandos>;
FIM.
Figura 104 Declarao de Matrizes de diferentes dimenses

No exemplo da Figura 104, cada estrutura pode ser utilizada para armazenar informaes
como:

No Vetor A pode se armazenar 4 notas de um aluno (vetor possui 1 dimenso sempre);

Na Matriz B pode se armazenar 4 notas de 20 alunos;

Na Matriz C pode se armazenar 4 notas de 20 alunos em 5 disciplinas;

Na Matriz D pode se armazenar 4 notas de 20 alunos em 5 disciplinas, para 2 turmas;

Na Matriz E pode se armazenar 4 notas, de 20 alunos em 5 disciplinas, para 2 turmas


de 3 cursos; e

Na Matriz F pode se armazenar 4 notas de 20 alunos em 5 disciplinas para 2 turmas,


de 3 cursos, de 2 campus.

Prof. Antnio Maria e Profa. Ana Rublia 107


Algoritmos e Estruturas de Dados I

13.3 Manipulao de Dados de uma Matriz


Para inserir, calcular, modificar um valor em uma Matriz preciso escolher (identificar) a
linha e coluna no qual o valor ser inserido. Veja alguns exemplos de atribuio de valores a
Matriz M na Figura 105:
...
M[1,1] 24;
M[1,10] 3;
M[2,6] 14;
M[3,5] 44;
M[5,9] M[1,1] + M[2,6];
...
Figura 105 Atribuio de valores a Matriz M

Representao da Matriz M aps atribuio de valores:

M 1 24 3
2 14
3 44
4

5 38
1 2 3 4 5 6 7 8 9 10

Figura 106 Representao de uma Matriz 5X10

13.4 Operaes de Entrada e Sada de dados em uma Matriz


Utiliza-se 2 (dois) comandos PARA aninhados/encadeados para Entrada e Sada de dados,
em cada estrutura PARA lendo um determinado elemento da Matriz.

Exemplificando...

Prof. Antnio Maria e Profa. Ana Rublia 108


Algoritmos e Estruturas de Dados I

Algoritmo entrada_matriz;
Entrada dos Declare num [3, 5] : inteiro;
dados i, j : inteiro;
INICIO
PARA i de 1 AT 3 FAA
PARA j de 1 AT 5 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");
Leia (num[ i, j ];
FIMPARA;
FIMPARA;
FIM.
Figura 107 Entrada de dados em uma Matriz 3X5

Teste de mesa da entrada de dados do algoritmo da Figura 107:


Na
Na memria
memria
Na tela
Valor
i j
digitado
Digite os valores da posio[ 1 e
1 1 13
1]:
Digite os valores da posio[ 1 e
2 24000
2]:
Digite os valores da posio[ 1 e
3 2
3]:
Digite os valores da posio[ 1 e
4 -5
4]:
Digite os valores da posio[ 1 e
5 48
5]:
Digite os valores da posio[ 2 e
2 1 -6
1]:
Digite os valores da posio[ 2 e
2 0
2]:
Digite os valores da posio[ 2 e
3 100
3]:
Digite os valores da posio[ 2 e
4 -27
4]:
Digite os valores da posio[ 2 e
5 154
5]:
Digite os valores da posio[ 3 e
3 1 23
1]:
Digite os valores da posio[ 3 e
2 1
2]:
Digite os valores da posio[ 3 e
3 5
3]:

Prof. Antnio Maria e Profa. Ana Rublia 109


Algoritmos e Estruturas de Dados I

Digite os valores da posio[ 3 e


4 87
4]:
Digite os valores da posio[ 3 e
5 -51
5]:

Prof. Antnio Maria e Profa. Ana Rublia 110


Algoritmos e Estruturas de Dados I

Representao da Matriz num aps atribuio de valores:

num 1 13 24000 2 -5 48
2 -6 0 100 -27 154
3 23 1 5 87 -51
1 2 3 4 5

Figura 108 Representao da Matriz num aps atribuio de valores

Algoritmo entrada_e_saida_matriz;
Declare num [3, 5] : inteiro;
i, j : inteiro;
INICIO
PARA i de 1 AT 3 FAA
PARA j de 1 AT 5 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");
Leia (num[ i, j ]);
FIMPARA;
Sada dos
FIMPARA;
dados
PARA i de 1 AT 3 FAA
PARA j de 1 AT 5 FAA
Escreva(num[ i , j ]);
FIMPARA;
FIMPARA;
FIM.
Figura 109 Entrada e Sada de dados em uma Matriz 5X10

Teste de mesa da sada dos dados do algoritmo da Figura 109:


Na
tela
13
24000
2
-5
48
-6
0
100
-27
154
23
1
5
87
-51

Prof. Antnio Maria e Profa. Ana Rublia 111


Algoritmos e Estruturas de Dados I

13.5 Processamento dos Dados de uma Matriz


Um exemplo de processamento dos dados de uma Matriz seria somar o nmero 100
todos os valores de uma Matriz 5X10 (de 5 linhas por 10 colunas). Tambm deve-se utilizar 2
(dois) comandos PARA, a fim de processar todos os valores como mostrado no algoritmo da
Figura 110:

Exemplificando...
Elaborar um algoritmo para leia uma matriz NUM de 5 linhas por 10 colunas de inteiros. Depois
somar 100 a cada valor da matriz.
Algoritmo Soma_100;
Declare Num[5, 10] ,i ,j : inteiro;
INICIO
Escreva ("Entre com os valores);
// L os valores da matriz
PARA i de 1 AT 5 FAA
PARA j de 1 AT 10 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");
Leia (Num[ i, j ];
Processamento FIMPARA;
FIMPARA;
dos dados
// Soma o nmero 100 a cada valor armazenado
PARA i de 1 AT 5 FAA
PARA j de 1 AT 10 FAA
Num[ i, j] Num[ i, j] + 100;
FIMPARA;
FIMPARA;

// Imprime a sada
PARA i de 1 AT 5 FAA
PARA j de 1 AT 10 FAA
Escreva(Posio[ , i , , j, ]:, Num[ i, j] );
FIMPARA;
FIMPARA;
FIM.
Figura 110 Algoritmo para somar nmero 5 a cada posio de uma matriz [5,10]

Prof. Antnio Maria e Profa. Ana Rublia 112


Algoritmos e Estruturas de Dados I

Exerccios Resolvidos:
1) Elaborar um algoritmo para leia uma matriz MAT de 3 linhas por 5 colunas de inteiros.
Depois somar os elementos da 2 linha e armazenar em uma varivel A, multiplicar os
elementos da 3 coluna e armazenar em uma varivel B.

Algoritmo matriz_com_soma_e_multipli;
Declare mat[3,5], i, j, A, B: inteiro;
INCIO
PARA i de 1 AT 3 FAA
PARA j de 1 AT 5 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");
Leia (mat [i,j] );
FIMPARA;
FIMPARA;

Escreva ("Exibindo os valores digitados na matriz:");


PARA i de 1 AT 3 FAA
PARA j de 1 AT 5 FAA
Escreva (mat [i,j] );
FIMPARA;
FIMPARA;

A 0;
B 1;
PARA j de 1 AT 5 FAA // fixando a linha 2
A A + mat [2,j];
FIMPARA;

PARA i de 1 AT 3 FAA // fixando a coluna 3


B B * mat [i,3];
FIMPARA;

Escreva (A soma dos elementos da Linha 2 = , A);


Escreva (A multiplicao dos elementos da Coluna 3 = , B);
FIM.
Figura 111 Algoritmo para somar os elementos da linha 2 e multiplicar os elementos da coluna 3

2) Elaborar um algoritmo para leia uma Matriz 5x5 de inteiros, encontrar o maior valor
armazenado nela e multiplicar este valor pela matriz lida.

Algoritmo acha_maior_mult;
Declare M[5,5], RES[5,5], i, j, maior: inteiro;
INCIO

PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");

Prof. Antnio Maria e Profa. Ana Rublia 113


Algoritmos e Estruturas de Dados I

Leia (M [ i, j ] );
FIMPARA;
FIMPARA;

maior M [1,1];

PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
SE M [ i, j ] > maior ENTO
maior M [ i, j ];
FIMSE;
FIMPARA;
FIMPARA;
Escreva (O maior valor da matriz digitada : , maior);

Escreva (Multiplicando o maior valor encontrado pela matriz...);


PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
RES [ i, j ] maior * M [ i, j ] ;
FIMPARA;
FIMPARA;

Escreva (A matriz resultante : );


PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
Escreva (RES [ i, j ]);
FIMPARA;
FIMPARA;

FIM.

Figura 112 Algoritmo para encontrar maior valor da matriz e multiplic-lo pela matriz

3) Elaborar um algoritmo para somar duas matrizes 2x2 do tipo inteiro fornecidas pelo usurio.
Apresente as 2 matrizes lidas e o resultado em outra matriz.

Algoritmo soma_matrizes;
Declare A[2,2], B [2,2], RES[2,2], i, j: inteiro;
INCIO

Escreva (Lendo a matriz A.);

PARA i de 1 AT 2 FAA
PARA j de 1 AT 2 FAA
Escreva ("Digite os valores da Matriz A[ ",i, " e ,j, ]:");
Leia (A [ i, j ] );
FIMPARA;
FIMPARA;

Escreva (Lendo a matriz B.);


PARA i de 1 AT 2 FAA

Prof. Antnio Maria e Profa. Ana Rublia 114


Algoritmos e Estruturas de Dados I

PARA j de 1 AT 2 FAA
Escreva ("Digite os valores da Matriz B[ ",i, " e ,j, ]:");
Leia (B [ i, j ] );
FIMPARA;
FIMPARA;

Escreva (Somando as duas matrizes...);

PARA i de 1 AT 2 FAA
PARA j de 1 AT 2 FAA
RES [ i, j ] A[ i , j] + B[ i , j ];
FIMPARA;
FIMPARA;

Escreva (A matriz A : );
PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
Escreva (A [ i, j ]);
FIMPARA;
FIMPARA;

Escreva (A matriz B : );
PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
Escreva (B [ i, j ]);
FIMPARA;
FIMPARA;

Escreva (A matriz resultante : );


PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
Escreva (RES [ i, j ]);
FIMPARA;
FIMPARA;

FIM.
Figura 113 Algoritmo para somar duas matrizes

Prof. Antnio Maria e Profa. Ana Rublia 115


Algoritmos e Estruturas de Dados I

13.5.1 EXERCCIOS PROPOSTOS


1) Elabore um algoritmo que leia uma matriz A[2,2] e uma varivel X ambas do tipo inteiro.
Depois calcule o produto de X por A, colocando o resultado na matriz A.
2) Elabore um algoritmo que carregue duas matrizes fornecidas pelo usurio e informe se elas
so iguais. Lembrando que para duas matrizes serem iguais elas devem ter o mesmo
tamanho e os elementos correspondentes iguais.
3) Elabore um algoritmo que carregue uma matriz e mostre a sua transposta que obtida
trocando-se as linhas da matriz pelas suas colunas.
4) Elabore um algoritmo que carregue uma matriz 2 x 4 com nmeros inteiros e identifique
elementos negativos. Os elementos negativos encontrados devem ser armazenados em um
vetor.
5) Elabore um algoritmo que carregue uma matriz 10x10 e armazene em dois vetores
respectivamente, as somas das linhas e das colunas da matriz. Imprima a matriz e os
vetores.

Prof. Antnio Maria e Profa. Ana Rublia 116


Algoritmos e Estruturas de Dados I

14 VARIVEIS COMPOSTAS HETEROGNEAS: REGISTROS E


VETOR DE REGISTROS
Enquanto um Vetor e uma Matriz podem armazenar somente o mesmo tipo de dado, um
Registro permite declarar diferentes tipos de dados dentro de sua estrutura. Um Registro uma
coleo de campos onde cada campo pode ser um tipo de dados diferente, por isso conhecido
como Varivel Composta Heterognea (diferentes tipos de dados).

Um Registro permite trabalhar com dados de tipos diferentes em uma mesma estrutura e
por isso considerado heterogneo.

14.1 Declarao de Registro


A declarao de um Registro em pseudocdigo segue a seguinte sintaxe:

Algoritmo registro;
Declare <nome_da_varivel_registro> REGISTRO (<lista de campos e seus tipos>);
...
INICIO
<comandos>;
FIM.
Figura 114 Declarao de Registro em pseudocdigo

Exemplificando ...
Considere um Registro com campos referentes a dados de alunos como: matrcula, nome, curso,
perodo e mdia.
Algoritmo registro_aluno;
Declare reg_aluno REGISTRO (matr, nome, curso: literal, periodo: inteiro, media:
real);
...
INICIO
<comandos>;
FIM.
Figura 115 Declarao de Registro Aluno

Considere um Registro PRODUTO os campos: cdigo, descrio e preo.


Algoritmo registro_produto;
Declare produto REGISTRO (cod, descricao:literal, preco: real);
...
INICIO
<comandos>;
FIM.

Prof. Antnio Maria e Profa. Ana Rublia 117


Algoritmos e Estruturas de Dados I

Figura 116 Declarao de Registro Produto

14.2 Representao Grfica de um Registro


A representao grfica de uma varivel do tipo registro segue o formato similar ao de um
vetor, mas no lugar dos ndices aparece o nome dos campos, como mostrado em Figura 117 e
Figura 118.

reg_aluno

matr nome curso periodo media

Figura 117 Representao Grfica do Registro reg_aluno

produto

cod descricao preco

Figura 118 Representao Grfica do Registro produto

14.3 Manipulao de Dados de Varivel de Registro


Para inserir, calcular, modificar um valor em um Registro preciso referenciar o nome do
registro e o campo que se deseja manipular, como mostrado na Figura 119.

...
produto.cod B002;
produto.descricao tomada;
produto.preco 1.99;
...
Figura 119 Exemplo de comandos para manipular o Registro produto

A representao do registro aps estas atribuies fica:

produto B002 tomada 1.99


cod descricao preco

Figura 120 Representao Grfica do Registro produto aps atribuies

Prof. Antnio Maria e Profa. Ana Rublia 118


Algoritmos e Estruturas de Dados I

14.4 Operaes de Entrada e Sada Utilizando Registros


Para entrada e sada preciso referenciar o nome do registro e o campo que se deseja leia
ou exibir.

Exemplificando...

Algoritmo registro_produto;
Declare produto REGISTRO (cod, descricao:literal, preco: real);

INICIO
// Entrada de Dados no Registro Produto
Escreva(Entre com o Cdigo do Produto: );
Leia(produto.cod);
Escreva(Entre com a Descrio do Produto: );
Leia(produto.descricao);
Escreva(Entre com o Preo Unitrio do Produto: );
Leia(produto.preco);

// Sada de Dados no Registro Produto


Escreva(O Cdigo do Produto : , produto.cod);
Escreva(A Cdigo do Descrio : , produto.descricao);
Escreva(O Preo Unitrio do Produto : , produto.preco);

FIM.
Figura 121 Entrada e Sada de Dados Registro Produto

Prof. Antnio Maria e Profa. Ana Rublia 119


Algoritmos e Estruturas de Dados I

14.5 VETOR DE REGISTROS


Na maioria dos casos, quando se declara um Registro para aluno, produto, cliente etc, para
cada um destes registros existiro vrios alunos, produtos e clientes cadastrados. Ento o mais
comum declarar um Vetor de Registros para aluno, produto, cliente etc, pois existiro vrios
dados para cada um destes registros.

Exemplificando ...

Considere um Vetor de 20 posies para o Registro de alunos.

Algoritmo registro_aluno;
Declare reg_aluno [20] REGISTRO (matr, nome, curso: literal, periodo: inteiro, media:
real);
i: inteiro;
...
INICIO
<comandos>;
FIM.
Figura 122 Declarao de um Vetor de Registros para Aluno

Considere um Vetor de 100 posies para o Registro de produtos.


Algoritmo registro_produto;
Declare produto [100] REGISTRO (cod, descricao:literal, preco: real);
i: inteiro;
...
INICIO
<comandos>;
FIM.
Figura 123 Declarao de um Vetor de Registro para Produtos

Prof. Antnio Maria e Profa. Ana Rublia 120


Algoritmos e Estruturas de Dados I

14.6 Representao Grfica de Vetor de Registro


A representao grfica de um Vetor de Registro apresentada como um Vetor onde cada
posio h um registro, como mostrado na Figura 124.

produto[100]

produto produto produto produto


cod B002 cod C024 cod H112 cod A223
descricao tomada descricao abajur ... descricao torradeira descricao fita
preco 1.99 preco 85.00 preco 122.00 preco 0.50

1 2 ... 99 100

Figura 124 Representao Grfica do Vetor de Registros produto

Prof. Antnio Maria e Profa. Ana Rublia 121


Algoritmos e Estruturas de Dados I

14.7 Manipulao de Dados do Vetor de Registro


Para inserir, calcular, modificar um valor em um Registro de uma determinada posio do
Vetor preciso referenciar a posio do Vetor e o Campo que se deseja manipular. Portanto,
utiliza-se a Notao de Vetor para indicar qual posio se deseja manipular e o campo para
indicar em que parte do registro haver modificao, como mostrado na Figura 125:
...
produto[2].cod C024;
produto[2].descricao abajur;
produto [2].preco 85.00;
...
produto[99].cod H112;
produto[99].descricao torradeira;
produto [99].preco 122.00;
...
Figura 125 Exemplo de comandos para manipular o Vetor de Registros produto

14.8 Operaes de Entrada e Sada Utilizando Vetor de Registros


Como no caso de vetores, visto na seo 12.4, utiliza-se um comando de repetio como o
PARA, percorrendo assim todo Vetor de Registros.

Exemplificando...
Considere um algoritmo para leia 100 registros de produtos e imprimi-los na tela. Cada registro
dever conter o cdigo do produto, sua descrio e seu preo unitrio.
Algoritmo registro_produto;
Declare produto[100] REGISTRO (cod, descricao:literal, preco: real);
i: inteiro;

INICIO
// Entrada de Dados de 100 Registros de Produto
PARA i DE 1 AT 100 FAA
Escreva(Entre com o Cdigo do Produto: );
Leia(produto[ i ].cod);
Escreva(Entre com a Descrio do Produto: );
Leia(produto[ i ].descricao);
Escreva(Entre com o Preo Unitrio do Produto: );
Leia(produto[ i ].preco);
FIMPARA;

// Imprimindo os 100 registros Produto


PARA i DE 1 AT 100 FAA

Prof. Antnio Maria e Profa. Ana Rublia 122


Algoritmos e Estruturas de Dados I

Escreva(O Cdigo do Produto : , produto[ i ].cod);


Escreva(A Cdigo do Descrio : , produto[ i ].descricao);
Escreva(O Preo Unitrio do Produto : , produto[ i ].preco);
FIMPARA;
FIM.
Figura 126 Operaes de Entrada e Sada, utilizando Vetor de Registros

Exerccios Resolvidos:
1. Elabore um algoritmo que leia informaes de descrio, preo, quantidade e ano de
vencimento dos produtos de um supermercado. O algoritmo dever fazer: a) o cadastro
de 100 produtos; b) listar todos os produtos cuja quantidade em estoque seja maior que
20 unidades; e c) listar todos os produtos cujo vencimento seja menor que 2011.

Algoritmo produto_supermercado;
Declare prod[100] REGISTRO (
descricao : literal
preco: real
qde: inteiro
venc:inteiro);
i: inteiro;
INICIO
PARA i DE 1 AT 100 FAA
Escreva(Entre com a Descrio do Produto: );
Leia(prod[ i ].descricao);
Escreva(Entre com o preo: );
Leia(prod[ i ].preco);
Escreva(Entre com a quantidade: );
Leia(prod[ i ].qde);
Escreva(Entre com o ano de vencimento: );
Leia(prod[ i ].venc);
FIMPARA;

Escreva(Produtos com quantidade em estoque maior que 20 unidades. );


PARA i DE 1 AT 100 FAA
SE (prod[ i ].qde > 20) ENTO
Escreva(prod[i].descricao);
FIMSE;
FIMPARA;

Escreva(Produtos com data de vencimento menor que 2011. );


PARA i DE 1 AT 100 FAA
SE (prod[ i ].venc < 2011) ENTO
Escreva(prod[i].descricao);
FIMSE;
FIMPARA;
FIM.
Figura 127 Algoritmo produto_supermercado, usando Vetor de Registros

Prof. Antnio Maria e Profa. Ana Rublia 123


Algoritmos e Estruturas de Dados I

2. A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados sobre
o salrio, sexo, idade e nmero de filhos. Considerando 100.000 habitantes na cidade,
faa um algoritmo que calcule e mostre:
a. A mdia do nmero de filhos da populao;
b. A maior idade;
c. A mdia do salrio das mulheres.

Algoritmo pesquisa;
Declare pesq[100000] REGISTRO (
sal: real;
sexo: caractere;
idade: inteiro;
filhos: inteiro;);
i, maior: inteiro;
MF, SalF, cont : real;
INICIO
PARA i DE 1 AT 100000 FAA
Escreva(Informe o salrio: );
Leia(pesq[i].sal);
Escreva(Informe o sexo, usando F para feminino e M para masculino: );
Leia(pesq[i].sexo);
Escreva(Informe a idade: );
Leia(pesq[i].idade);
Escreva(Informe o nmero de filhos: );
Leia(pesq[i].filhos);
FIMPARA;

MF 0;
PARA i DE 1 AT 100000 FAA
MF MF + pesq[ i ].filhos; // acumula qde de filhos para calcular media
FIMPARA;
MF MF / 100000;
Escreva(A mdia do nmero de filhos da populao: , MF);

maior pesq[ 1 ].idade;


PARA i DE 1 AT 100000 FAA
SE (pesq[ i ].idade > maior) ENTO
maior pesq[ i ].idade;
FIMSE;
FIMPARA;
Escreva(A maior idade : , maior);

SalF 0;
cont 0;
PARA i DE 1 AT 100000 FAA
SE (pesq[ i ].sexo = F) E (pesq[ i ].sal > 2000)ENTO
SalF SalF + pesq[ i ].sal; // acumula salrio feminino maior que 2000
para calcular media
cont cont +1;
FIMSE;
FIMPARA;

Prof. Antnio Maria e Profa. Ana Rublia 124


Algoritmos e Estruturas de Dados I

SalF (SalF / cont) ;


Escreva(A mdia do salrio das mulheres : , SalF);
FIM.
Figura 128 Algoritmo pesquisa, usando Vetor de Registros

14.8.1 EXERCCIOS PROPOSTOS


1. Elabore um algoritmo para leia 30 registros de funcionrios e imprimi-los na tela. Cada
registro dever conter a matrcula do funcionrio, nome, sexo, ano de contratao e
salrio.
2. Para o exerccio anterior calcule e mostre os funcionrios do sexo feminino e atribua 15%
de aumento ao salrio dos funcionrios contratados de 2008 a 2011 inclusive.

Prof. Antnio Maria e Profa. Ana Rublia 125


Algoritmos e Estruturas de Dados I

15 MODULARIZAO: PROCEDIMENTOS E FUNES


A estruturao de um algoritmo em mdulos uma boa prtica que facilita a construo e a
manuteno de programas grandes e complexos.
O mtodo de modularizao consiste na diviso do algoritmo em mdulos (tambm
chamados de sub-algoritmos, subprogramas ou sub-rotinas) que realizam tarefas especficas.

Algumas vantagens da aplicao da modularizao na programao so:


1. Maior legibilidade - permite a diviso e a estruturao de um algoritmo em partes
logicamente coerentes, simplificando seu entendimento;
2. Independncia na escrita e teste dos mdulos do algoritmo - permite que diferentes
programadores trabalhem simultaneamente, atravs da codificao separada dos
diferentes mdulos;
3. Criao nica de um mdulo frequentemente solicitado se uma mesma sequncia
de comandos utilizada vrias vezes no programa, ela pode ser solicitada e
executada para diferentes valores; e
4. Reutilizao de mdulos - programas complexos podem ser elaborados a partir de
unidades menores j desenvolvidas e testadas.

Algoritmo

Algoritmo Procedimento Procedimento Procedimento Funo Funo Funo


Principal 1 2 n 1 2 n

Figura 129 Representao Grfica de um algoritmo modularizado

Cada mdulo, alm de ter acesso s variveis do algoritmo que o chamou (variveis
globais), pode ter suas prprias variveis (variveis locais), que existem apenas durante sua
chamada.
A modularizao pode ser feita declarando-se Procedimentos e Funes, chamados em
qualquer parte do algoritmo. Para entender a diferena entre procedimentos e funes e como
declar-las, necessita-se compreender os conceitos retorno de valor e parmetro, melhor
explicado por meio de exemplos.

Vimos na seo 5.5.2 em Funes pr-definidas a funo que calcula a raiz quadrada de um
nmero denominada SQRT(x). Portanto, quando se faz a chamada desta funo usando a
expresso SQRT(25) no programa, espera-se obter a resposta da raiz quadrada de 25. A resposta,

Prof. Antnio Maria e Profa. Ana Rublia 126


Algoritmos e Estruturas de Dados I

o valor 5, denominado de retorno de valor ou retorno da funo. O valor 25 passado dentro


de parnteses na chamada da funo SQRT denomina-se parmetro ou argumento.

parmetro ou
argumento

resp SQRT(25);

A funo retorna o
valor 5
Figura 130 Exemplo de retorno de valor e parmetro

Uma funo retorna um nico valor e pode possuir vrios parmetros. Tendo conscincia
destes conceitos, torna-se fcil diferenciar Procedimentos de Funes.
Procedimentos so sub-rotinas que NUNCA retornam um valor como resultado, apenas
executam uma tarefa. Por exemplo, o comando escreva imprime uma mensagem na tela, mas no
retorna nenhum valor. O comando leia um procedimento que l um valor do teclado e o
armazena numa varivel, sem retornar valor.
Funes so sub-rotinas que SEMPRE retornam um valor como resultado. O tipo
retornado por uma funo pode ser do tipo bsico como inteiro, real, literal, caractere ou lgico,
ou pode ser do tipo declarado pelo usurio como um vetor, matriz, registro dentre outros.
A declarao de procedimentos e funes bastante similar, diferenciando apenas pelo fato
de que em Funo deve-se informar o tipo de dado a ser retornado, enquanto procedimento no
existe a declarao o tipo de retorno, pois ele no nunca retorna valor.
Ressalta-se que o aluno deve guardar e no esquecer esta definio: A diferena entre o uso
de um Procedimento e uma Funo : um Procedimento NUNCA retorna valor, enquanto uma
Funo SEMPRE retornar um valor.

15.1 PROCEDIMENTOS
Um procedimento um conjunto de comandos que realiza alguma operao ao qual se d
um nome e NUNCA retorna valor.
Pode-se dizer que um procedimento possui vida prpria, com suas prprias variveis
(varivel local), mas que para ser processado, deve ser chamado pelo algoritmo principal ou por
outro procedimento.

Um procedimento pode acessar as variveis declaradas no algoritmo principal (variveis


globais), desde que no estejam declaradas dentro do procedimento. Se uma varivel for

Prof. Antnio Maria e Profa. Ana Rublia 127


Algoritmos e Estruturas de Dados I

declarada dentro de um procedimento com o mesmo nome declarado no programa principal,


criada uma nova varivel local e a varivel global deixa de ser visvel dentro do procedimento.
Deste conceito, define-se o termo escopo de varivel, o qual pode ser de escopo global ou
escopo local.

15.1.1 Declarao de Procedimentos


Um procedimento possui um cabealho de identificao com o nome do procedimento,
uma lista opcional de parmetros, um bloco de declaraes e um bloco de comandos.

A sintaxe para declarao de procedimentos est apresentada na Figura 131.


...
PROCEDIMENTO <nome_do_procedimento> (<lista_de_parmetros> : <tipo>);
declare < lista-de-variveis> : <tipo>;
<comandos>;
FIMPROCEDIMENTO;
...
Figura 131 Declarao de Procedimento

Na declarao de um procedimento, o <nome_do_procedimento> obedece s mesmas


regras de nomenclatura de variveis, constantes e algoritmos, vide seo 4.3.
A declarao da lista de parmetros opcional. Caso no haja parmetros nada escrito
dentro dos parnteses.

De modo anlogo ao algoritmo principal, um procedimento possui a seo opcional de


declarao de variveis (variveis locais) utilizando a palavra-chave declare, e segue a sintaxe:

<lista_de_variveis> : <tipo>;
Figura 132 Declarao de Varivel em Procedimentos

Exemplificando...
Declarao do procedimento SEPARADOR sem parmetros. Este procedimento cria uma
linha como separador na tela usando asteriscos (*).

...
PROCEDIMENTO SEPARADOR ( );
declare i : inteiro;
PARA i de 1 AT 20 FAA
escreva (*);
FIMPARA;
FIMPROCEDIMENTO;
...

Prof. Antnio Maria e Profa. Ana Rublia 128


Algoritmos e Estruturas de Dados I

Figura 133 Declarao do Procedimento SEPARADOR

Declarao do procedimento IMPRIMIR sem parmetros. Este procedimento imprime


todos os nmeros de 1 at 1000.

...
PROCEDIMENTO IMPRIMIR ( );
declare i : inteiro;
PARA i de 1 AT 1000 FAA
escreva (i);
FIMPARA;
FIMPROCEDIMENTO;
...
Figura 134 Declarao do Procedimento IMPRIMIR

Declarao do procedimento SEPARADOR com 1 parmetro. Este procedimento cria uma


linha como separador na tela usando o smbolo passado como parmetro.

...
PROCEDIMENTO SEPARADOR ( smbolo : caractere);
declare i : inteiro;
PARA i de 1 AT 20 FAA
escreva (simbolo);
FIMPARA;
FIMPROCEDIMENTO;
...
Figura 135 Declarao do Procedimento SEPARADOR

Declarao do procedimento IMPRIMIR com 2 parmetros. Este procedimento imprime


todos os nmeros entre x1 e x2.

...
PROCEDIMENTO IMPRIMIR(x1, x2:inteiro);
declare i : inteiro;
PARA i de x1 AT x2 FAA
escreva (i);
FIMPARA;
FIMPROCEDIMENTO;
...
Figura 136 Declarao do Procedimento IMPRIMIR

Prof. Antnio Maria e Profa. Ana Rublia 129


Algoritmos e Estruturas de Dados I

Declarao do procedimento IMPRIMIR com 3 parmetros. Este procedimento imprime o


nome, salrio e idade de um funcionrio.

...
PROCEDIMENTO IMPRIMIR(nome:caractere; salario:real; idade:inteiro);
declare i : inteiro;
escreva (nome:, nome);
escreva (salario:, salario);
escreva (idade: , idade);
FIMPROCEDIMENTO;
...
Figura 137 Declarao do Procedimento IMPRIMIR

15.1.2 Procedimentos sem Passagem de Parmetros


Procedimentos sem passagem de parmetros so procedimentos declarados sem nenhum
parmetro. Isto ocorre em dois casos. No primeiro caso, o procedimento repete sempre as
mesmas linhas de comando. No segundo caso, o procedimento possui variao e se utiliza de
variveis globais para capturar o valor a ser utilizado em sua execuo.
Na Figura 138, apresenta-se o exemplo do primeiro caso, em que o procedimento no
possui parmetro e sua execuo ser sempre idntica.

Algoritmo teste_procedimento;
declare nome : literal;
PROCEDIMENTO SEPARADOR ( );
declare i : inteiro;
PARA i de 1 AT 20 FAA
escreva (*);
FIMPARA;
FIMPROCEDIMENTO;
INICIO
escreva (Algoritmo para testar chamada de um procedimento);
separador;
escreva (Aula de AEDI);
separador;
escreva (Digite seu nome:);
leia (nome);
separador;
escreva (O nome :, nome);
separador;
FIM.
Figura 138 Chamada ao Procedimento SEPARADOR

A Figura 138 mostra um procedimento que imprime uma linha com 20 asteriscos. Toda vez
que o procedimento SEPARADOR for chamado, ele sempre far a mesma coisa sem nenhuma
variao, ou seja, imprimir uma linha com 20 asteriscos.

Prof. Antnio Maria e Profa. Ana Rublia 130


Algoritmos e Estruturas de Dados I

Na Figura 139, apresenta-se o exemplo do segundo caso, em que o procedimento utiliza o


valor de uma varivel global para alterar o caractere impresso na tela.

Algoritmo teste_procedimento;
declare nome : literal;
simbolo: caractere;
PROCEDIMENTO SEPARADOR ( );
declare i : inteiro;
PARA i de 1 AT 20 FAA
escreva (simbolo);
FIMPARA;
FIMPROCEDIMENTO;
INICIO
escreva (Algoritmo para testar chamada de um procedimento);
escreva (Digite o caractere que deseja imprimir como separador de linha: );
leia(simbolo);
separador;
escreva (Digite novo caractere que deseja imprimir como separador de linha: );
leia(simbolo);
separador;
FIM.
Figura 139 Chamado ao Procedimento SEPARADOR

A Figura 139 mostra um algoritmo em que o usurio fornece o caractere que deseja
imprimir como separador de linha. Este caractere armazenado na varivel smbolo declarada
como de escopo global. A primeira vez que o procedimento SEPARADOR chamado, uma linha
com o caractere armazenado em smbolo ser impresso. Em seguida, novo caractere solicitado
ao usurio e, na sequencia, o procedimento SEPARADOR utilizar esse novo smbolo para
imprimir a linha com 20 caracteres. Observe que a variao do comportamento do procedimento
sem parmetro, somente foi possvel por que o procedimento utiliza uma varivel global que
pode ser alterada.

15.1.3 Procedimentos com Passagem de Parmetros


Ao chamar um procedimento, tambm possvel passar-lhe determinadas informaes
que recebem o nome de parmetros. Estes parmetros so valores passados na linha de chamada
entre parnteses e separados por vrgulas (quando houver mais de um).

A quantidade dos parmetros, sua sequncia e respectivos tipos no podem mudar,


devendo estar de acordo com o especificado na declarao. Portanto, se o programador definir
um procedimento com dois parmetros um inteiro e um real, nesta ordem, ento ao chamar o
procedimento, obrigatoriamente, dever ser passado um valor inteiro e um real, nesta ordem.

Prof. Antnio Maria e Profa. Ana Rublia 131


Algoritmos e Estruturas de Dados I

Exemplificando...
Voltemos ao exemplo da Figura 138 que declara um procedimento que cria uma linha como
separador na tela usando asteriscos (*). Mas agora alterando-o, permitindo o uso de diferentes
smbolos como separador.

Algoritmo teste_procedimento_com_parametro;
declare nome : literal;
PROCEDIMENTO SEPARADOR (simbolo : caractere);
declare i : inteiro;
PARA i de i AT 20 FAA
escreva (simbolo);
FIMPARA;
FIMPROCEDIMENTO;
INICIO
escreva (Testando chamada de procedimento com passagem de parmetro!);
separador (-);
escreva (Aula de AEDI);
separador (=);
escreva (Digite seu nome:);
leia (nome);
separador (+);
escreva (O nome :, nome);
separador (#);
FIM.
Figura 140 Algoritmo, usando Procedimento COM passagem de Parmetros

15.2 FUNES
Uma funo um conjunto de comandos que realiza alguma operao para a qual d-se um
nome e SEMPRE retorna um valor.

Como o Procedimento, uma Funo permite organizar um conjunto de comandos que


estariam repetidos em vrias partes do algoritmo

E tambm como no caso dos procedimentos, as funes precisam ser chamadas pelo
algoritmo principal para serem executadas. Ao se chamar uma funo, desvia-se a execuo do
algoritmo principal para realizar uma tarefa especfica. Aps sua execuo, no local onde foi
feita a chamada da funo atribui-se o valor retornado por ela.
O conceito de Funo vem da idia de funo matemtica, como raiz quadrada, seno,
cosseno, tangente, logaritmo etc, onde calcula-se um valor a partir de outro(s) fornecido(s)
funo.

Prof. Antnio Maria e Profa. Ana Rublia 132


Algoritmos e Estruturas de Dados I

Lembre-se que como uma funo sempre retorna um valor, elas devem ser chamadas de
forma a fazer sentido a substituio da chamada da funo pelo valor que ela retorna.
Por isso, em uma funo deve-se declarar tipos, consistentes com o tipo de valor por ela
calculado (inteiro, real, caractere, literal ou Lgico).

Alguns exemplos de chamadas so:

variavel Funcao(parmetros);
variavel Funcao(parmetros) + Z;

Figura 141 Exemplo de chamada de funo

A chamada de uma funo feita atravs da citao do seu nome, seguido pelos
parmetros entre parnteses (se houver), dentro de uma expresso.

15.2.1 Declarao de Funes


Uma funo possui um cabealho de identificao com o nome da funo, uma lista
opcional de parmetros, o tipo de dado do valor retornado, um bloco de declaraes e um
bloco de comandos.

A sintaxe para declarao de funes est apresentada na figura a seguir.


...
FUNCAO <nome_da_funcao> (<lista-de-parmetros> : <tipo>): <tipo_retornado>;
declare < lista-de-variveis> : <tipo>;
<comandos>;
retorne <valor de retorno>;
FIMFUNCAO;
...
Figura 142 Sintaxe para Declarao de Funes

Na declarao de uma funo, o <nome-da-funo> obedece s mesmas regras de


nomenclatura de variveis, constantes e algoritmos, vide seo 4.3.
A declarao da lista de parmetros opcional. Caso no haja parmetros nada escrito
dentro dos parnteses.
O nmero de parmetros e seu respectivo tipo devem ser respeitados, podendo-se construir
funes com e sem parmetros.

De modo anlogo ao algoritmo principal, uma funo possui a seo opcional de


declarao de variveis (variveis locais) utilizando a palavra-chave declare, e segue a sintaxe
...
declare <lista-de-variveis> : <tipo>;
...
Figura 143 Declarao de Varivel em Funes

Prof. Antnio Maria e Profa. Ana Rublia 133


Algoritmos e Estruturas de Dados I

Exemplificando...
Declarao da funo DIVIDIR com 2 parmetros. Esta funo divide dois nmeros
inteiros e retorna um nmero real.

Algoritmo Exemplo_funcao_com_parametro;
declare calc: real;
X,Y: inteiro;
FUNCAO DIVIDIR ( a, b : inteiro) : real;
retorne a/b;
FIMFUNCAO;
INICIO
Escreva ("Digite 2 nmeros inteiros para serem divididos);
Escreva ("Digite o 1 nmero= );
Leia(X);
Escreva ("Digite o 2 nmero= );
Leia(Y);
calc DIVIDIR( X ,Y );
Escreva ("A diviso de ", x, "por ", y, " ", calc);
FIM.
Figura 144 Algoritmo com chamada a Funo com 2 parmetros

15.2.2 Funes sem Passagem de Parmetros


Funes sem passagem de parmetros so funes declaradas sem nenhum parmetro.

Na declarao de uma funo, informe o <nome-da-funo>. A declarao da lista de


parmetros opcional, ento se no h passagem de parmetros nada escrito dentro dos
parnteses. Aps define-se o tipo de dado do valor que esta funo retorna, se ser: inteiro, real,
caractere, literal ou Lgico.

De modo anlogo ao algoritmo principal, a seo de declarao internas comea com a


palavra-chave declare, e continua com a seguinte sintaxe: <lista-de-variveis> : <tipo>; e segue
com os comandos a serem executados pela funo.

...
FUNCAO <nome_da_funcao>:<tipo_do_valor_retornado>;
declare < lista-de-variveis> : <tipo>;
<comandos>;
retorne <valor de retorno>;
FIMFUNCAO;
...
Figura 145 Declarao de Funo SEM passagem de parmetros

Prof. Antnio Maria e Profa. Ana Rublia 134


Algoritmos e Estruturas de Dados I

Exemplificando...
Algoritmo para calcular dividir dois nmeros reais, cuja funo NO possui parmetros.
Algoritmo Exemplo_funcao_sem_parametro;
declare calc, X,Y : real;
FUNCAO DIVIDIR : real;
retorne X/Y;
FIMFUNCAO;
INICIO
Escreva ("Digite 2 nmeros para serem divididos);
Escreva ("Digite o 1 nmero= );
Leia(X);
Escreva ("Digite o 2 nmero= );
Leia(Y);
calc DIVIDIR;
Escreva ("A diviso de , x, por , y, ", calc);
FIM.
Figura 146 Algoritmo com chamada a Funo sem parmetros

15.2.3 Funes com Passagem de Parmetros


Pode-se utilizar funo com passagem de parmetros. Para isso, ao se chamar uma funo
deve-se atribuir os parmetros.

...
FUNCAO <nome_da_funcao> (<lista-de-parmetros> : <tipo>): <tipo_retornado>;
declare < lista-de-variveis> : <tipo>;
<comandos>;
retorne <valor de retorno>;
FIMFUNCAO;
...
Figura 147 Declarao de Funo COM passagem de parmetros

Prof. Antnio Maria e Profa. Ana Rublia 135


Algoritmos e Estruturas de Dados I

Exemplificando...

Algoritmo _funcao_com_parametros;
declare calc, X,Y : real;

FUNCAO MULTIPLICAR (a,b: real) : real;


retorne a*b;
FIMFUNCAO;

INICIO
Escreva ("Digite 2 nmeros para serem multiplicados!);
Escreva ("Digite o 1 nmero= );
Leia(X);
Escreva ("Digite o 2 nmero= );
Leia(Y);
calc MULTIPLICAR( X , Y );
Escreva ("A multiplicao de , x, por , y, ", calc);
FIM.
Figura 148 Algoritmo com chamada a Funo COM parmetros

O algoritmo a seguir um exemplo de declarao e uso de uma funo para calcular o


valor de um nmero inteiro elevado ao quadrado.

Algoritmo Exemplo_funcao;
declare X, Y : inteiro;

Funcao QUAD(num : inteiro) : inteiro;


declare Z : inteiro;
Z num * num;
retorne Z;
Fimfuncao;

inicio
Escreva ("Digite um nmero inteiro);
Leia(X);
Y QUAD(X);
Escreva (X, " elevado ao quadrado = ", Y);
Fim.
Note que:

Prof. Antnio Maria e Profa. Ana Rublia 136


Algoritmos e Estruturas de Dados I

A funo QUAD recebe num como parmetro do tipo inteiro, ter um valor de retorno
do tipo inteiro e possui Z como uma varivel local do tipo inteiro;
O comando de chamada da funo QUAD aparece no comando de atribuio () no do
algoritmo principal.

Exerccios Resolvidos:

1. Usando funo, escreva um algoritmo que calcule a potencia cbica de um nmero


inteiro.

PROGRAMA Uso_Funcao;
declare num:inteiro;

FUNCAO POTENCIA (valor : inteiro) : inteiro;


declare resul: inteiro;
resul valor*valor*valor;
retorne resul;
FIMFUNCAO;

INICIO
Escreva ("Digite um nmero inteiro);
leia (num);
escreva ( POTENCIA(num) );
FIM.

2. Usando funo, escreva um algoritmo que dado um valor de salrio e um informado o


percentual de aumento, calcule o novo salrio.

Algoritmo aumento_salario;
declare sal, aum, novo_sal: real;

FUNCAO CALC (salario: real) : real;


declare perc, valor: real;
Escreva (Digite o percentual de aumento: );
Leia (perc);
valor (salario * perc) / 100;
retorne valor;
FIMFUNCAO;

INICIO
Escreva (Digite o salrio: );
Leia (sal);
aum CALC (sal);
novo_sal sal + aum;

Prof. Antnio Maria e Profa. Ana Rublia 137


Algoritmos e Estruturas de Dados I

Escreva (O nomo salrio : ,novo_sal);


FIM.
Figura 149 Algoritmo, usando Funo CALC_SAL (com passagem de parmetro)

3. Usando funes e procedimentos, escreva um algoritmo que receba:


O cdigo de um produto comprado, supondo que a digitao do cdigo do produto seja
sempre vlida (um nmero inteiro entre 1 e 10);
O peso do produto em quilos, e o cdigo do pas de origem, supondo que a digitao do
cdigo do pas seja sempre vlida, segundo as tabelas a seguir.

Cdigo do pas de Imposto


Cdigo do Preo por
origem
produto grama
1 0%
1a4 R$ 10,00
2 15%
5a7 R$ 25,00
3 25%
8 a 10 R$ 35,00

Depois calcule e mostre:


O peso do produto convertido em gramas;
O preo total do produto comprado;
O valor do imposto, sabendo-se que o imposto cobrado sobre o preo total do produto
comprado e que depende do pas de origem; e
O valor total, preo total do produto mais imposto.

Algoritmo Calcula_Preco;

declare peso_kg, peso_grama, preco_total, valor_imposto: real;


codigo, cod_pais:inteiro;

INICIO
lerdados;
peso_grama kg2grama( peso_kg );
preco_total CalcularPrecoTotal( codigo, peso_grama );
valor_imposto Imposto( cod_pais, preco_total );
valor_total ValorTotal( preco_total, valor_imposto );
ImprimirDados;
FIM.

PROCEDIMENTO lerdados( )
escreva("Digite o cdigo do produto: ");
leia(codigo);
escreva("Digite o peso do produto(kg): ");
leia(peso_kg);
escreva("Digite o cdigo do pas de origem: ");
leia(cod_pais);
FIMPROCEDIMENTO;

FUNCAO kg2grama(pesokg:real):real

Prof. Antnio Maria e Profa. Ana Rublia 138


Algoritmos e Estruturas de Dados I

retorne TRUNC(pesokg) * 1000 + FRAC(pesokg);


FIMFUNO;

FUNCAO CalcularPrecoTotal(cod:inteiro; pesogr:real):real


declare valor:real;
escolha (cod)
caso 1..4 : valor pesogr * 10;
caso 5..7 : valor pesogr * 25;
caso 8..10: valor pesogr * 35;
fimescolha;
retorne valor;
FIMFUNO;

FUNCAO Imposto(pais:inteiro, PTotal:real ):real;


declare imp:real;
escolha (pais)
caso 1: imp 0;
caso 2: imp PTotal * 0,15;
caso 3: imp PTotal * 0,25;
fimescolha;
retorne imp;
FIMFUNO;

FUNCAO ValorTotal(PTotal, imp:real):real;


retorne Ptotal + imp;
FIMFUNO;

PROCEDIMENTO ImprimirDados()
escreva("Peso em gramas: ", peso_grama);
escreva("Preco Total do Produto: "preco_total);
escreva("Valor do Imposto ",valor_imposto);
escreva("Valor Total ", valor_total);
FIMPROCEDIMENTO;

Prof. Antnio Maria e Profa. Ana Rublia 139


Algoritmos e Estruturas de Dados I

15.3 ESCOPO DE VARIVEIS VARIVEIS LOCAIS E GLOBAIS


Variveis Locais so declaradas dentro dos procedimentos e funes e existem apenas
dentro do procedimento e da funo onde foram declaradas. Elas no podem ser utilizadas em
outra parte do algoritmo.

Variveis Globais so declaradas normalmente no incio do algoritmo e existem em


qualquer parte do algoritmo, podendo ser utilizadas no principal do algoritmo, nos
procedimentos e funes.

Recomenda-se no usar variveis globais dentro de procedimentos e funes, pois esta


prtica cria dependncia do procedimento ou funo em relao varivel. Neste caso, se o
programador tentar reutilizar o procedimento ou funo em outro algoritmo, ento ele ter que
declarar uma varivel global com o mesmo nome no novo algoritmo que est construindo.
Recomenda-se que o programador sempre declare parmetros para passar valor do
algoritmo principal para as funes e procedimentos.

O algoritmo da Figura 150 apresenta um procedimento que imprimi na tela todos os


nmeros contidos no intervalo x1 e x2.
Algoritmo imprimir;
declare x1, x2 inteiro;
INICIO
escreva(Leia valor inicial: );
leia(x1);
escreva(Leia valor final: );
leia(x2);
imprimir;
FIM.

PROCEDIMENTO IMPRIMIR;
declare i : inteiro;
PARA i de x1 AT x2 FAA
escreva (i);
FIMPARA;
FIMPROCEDIMENTO;
Figura 150 Declarao do Procedimento IMPRIMIR

Na Figura 150, observa-se o trecho principal do algoritmo entre as palavras reservadas


incio e fim. Deve-se compreender que x1 e x2 so variveis de escopo global. Isto implica que
estas variveis so visveis e utilizveis em qualquer parte do programa, inclusive dentro de
procedimentos e funes. Por isto, pode-se utiliz-las no procedimento IMPRIMIR sem declar-
las, pois j foram declaradas no algoritmo principal e existem em todo algoritmo. Observa-se
ainda que dentro do procedimento IMPRIMIR declarou-e a varivel i.

Prof. Antnio Maria e Profa. Ana Rublia 140


Algoritmos e Estruturas de Dados I

Quando variveis so declaradas dentro de sub-rotinas como funes e procedimentos, elas


so denominadas de Variveis de Escopo Local. Isto implica que estas variveis so visveis e
utilizveis apenas dentro do procedimento ou funo onde foram declaradas. Por isto, a varivel
i no pode ser utilizada dentro do algoritmo principal. Caso o programador tente utilizar a
varivel de Escopo Local fora da funo ou procedimento onde ela foi declarada, o compilador
informar que a varivel no existe.

Caso o programador declarasse a varivel i no algoritmo principal, ento o algoritmo teria


duas variveis i. Quando o i utilizado estiver dentro do dentro do procedimento IMPRIMIR,
onde existe a declarao da varivel local i, o algoritmo usa a Varivel Local. Quando o i
utilizado estiver no algoritmo principal ou em outro procedimento ou funo que no h varivel
i declarada, ento, o algoritmo utiliza a varivel i de escopo global.
Para melhor compreender o que ocorre na execuo do algoritmo, o programador deve
guardar em mente que Variveis Locais existem apenas quando o procedimento ou funo est
em execuo, assim que a execuo volta para o algoritmo principal, toda Varivel Local
destruda e seus valores perdidos. Quando se chama novamente o procedimento ou funo, estas
variveis so criadas novamente. Apenas as Variveis Globais so criadas uma nica vez, quando
o algoritmo comea, e deixam de existir apenas quando o algoritmo encerra sua execuo.

15.4 PASSAGEM DE PARMETROS POR VALOR E POR REFERNCIA


Procedimentos e Funes podem ser criadas com ou sem parmetros, como apresentado em
sees anteriores. Quando declaram-se Procedimentos e Funes com parmetros, o
programador deve decidir se tais parmetros sero passados por valor ou por referncia. At o
momento, foram ensinados Procedimentos e Funes com passagem de parmetros por valor,
apesar desta nomenclatura no ter sido apresentada.

Nesta seo, apresentam-se as diferenas entre os conceitos, para que o programador tome
a melhor deciso de acordo com as necessidades do projeto

15.4.1 Passagem de Parmetros por Valor


Este o formato mais simples de se passar parmetros. Para melhor exemplificar a
passagem de parmetros por valor, considere a funo somar com a seguinte declarao:
FUNO SOMAR( X : inteiro, Y : inteiro) : inteiro

Alm da declarao da funo, imagine uma linha chamando a funo com a seguinte
declarao:
N1 10;
N2 20;
S SOMAR(N1, N2);

Prof. Antnio Maria e Profa. Ana Rublia 141


Algoritmos e Estruturas de Dados I

Quando o programa comea a ser executado, aloca-se na memria do computador as


variveis globais, e de acordo com a linha executada do programa, a memria modifica-se. Na
Figura 151, observa-se uma representao grfica da memria de um computador e a declarao
das variveis N1 e N2 com os valores alocados de 10 e 20, respectivamente. Porm, a funo
ainda no foi chamada, por isto, omite-se as variveis X e Y.

1 2 3 4 5 6
1 N1=10
2
3 N2=20
4
5
Figura 151 Memria do Computador com as Variveis Globais

Quando ocorre a chamada a funo Somar(N1, N2), ento o computador copia o valor 10
do primeiro parmetro N1 para a primeira varivel declarada no parmetro da funo,
denominada X. Logo em seguida, o computador copia o valor 20 do segundo parmetro N2 para
a segunda varivel declarada no parmetro da funo, denominada Y. A Figura 152 apresenta o
estado da memria aps copiar os valores de N1 e N2 para X e Y, respectivamente.
Aps compreender o que ocorre na memria do computador quando se passa parmetros
por valor, torna-se fcil explicar este tipo de passagem de parmetros. Define-se passagem de
parmetros por valor quando o computador copia o valor das variveis contidas na chamada de
uma funo ou procedimento para os parmetros declarados na funo. Portanto, as variveis so
distintas, e quando se altera o valor de X e Y dentro da funo ou procedimento, as variveis N1
e N2 no tm seus valores alterados, pois esto alocadas em locais diferentes na memria

1 2 3 4 5 6
1 N1=10
2
3 N2=20
4 X=10
5 Y=20
Figura 152 Memria do Computador Contendo os Parmetros X e Y

Prof. Antnio Maria e Profa. Ana Rublia 142


Algoritmos e Estruturas de Dados I

15.4.2 Passagem de Parmetros por Referncia


Um conceito importante para entender passagem de parmetros por referncia consiste em
compreender que duas variveis podem ocupar o mesmo espao de memria, ou ainda, pode-se
afirmar que um valor guardado na memria pode ser referenciado por variveis com nomes
distintos A e B, por exemplo.

O leitor deve aceitar que o computador consegue guardar o nmero 10 na memria e que
para acessar o nmero 10 voc pode chamar a varivel A ou B, veja a Figura 153.

Prof. Antnio Maria e Profa. Ana Rublia 143


Algoritmos e Estruturas de Dados I

C
A B
1 2 3 4 5 6
1 10
2 30
3
4
5
Figura 153 Variveis Ocupando o Mesmo Espao de Memria

A Figura 153 apresenta o valor 10 armazenado na posio 1x1 da memria, tendo as


variveis A e B associadas a esta posio. Neste caso, se for alterado o valor de A,
automaticamente, altera-se o valor de B e vice versa, pois A e B esto referenciando o mesmo
local da memria. Se for alterado o valor da varivel C, localizada na posio 2x4 da memria,
nem o valor de A e nem o de B sero afetados, pois elas esto em posio distintas na memria.

Uma analogia para esta situao imaginar que o apelido de seu irmo Francisco Chico.
Se Chico se formar em engenharia e algum lhe perguntar qual a profisso de Francisco, voc
responder: engenheiro. Logo, se voc cham-lo de Francisco ou Chico, estar referenciando a
mesma pessoa, o que acontece com Chico tambm se aplica a Francisco e vice versa.

Para exemplificar a passagem de parmetros por referncia, considere a funo


somar com a seguinte declarao:
FUNO SOMAR( var X : inteiro, var Y : inteiro) : inteiro

A palavra var destacada na declarao informa que X e Y so variveis que recebero


parmetros por referncia. Quando no se coloca a palavra var, automaticamente, o computador
entender que o programador quer passagem de parmetros por valor. Alm da declarao da
funo SOMA, considera as linhas a seguir contendo atribuies e chamada a funo:
N1 10;
N2 20;
S SOMAR(N1, N2);

Quando o programa comea a ser executado, aloca-se na memria do computador as


variveis globais, e de acordo com a linha executada do programa, a memria modifica-se. Na
Figura 154, observa-se a memria de um computador e a declarao das variveis N1 e N2 com
os valores alocados de 10 e 20, respectivamente, porm a funo ainda no foi chamada, por isto,
omite-se as variveis X e Y.

Prof. Antnio Maria e Profa. Ana Rublia 144


Algoritmos e Estruturas de Dados I

N N
1 2

1 2 3 4 5 6
1 10
2
3 20
4
5
Figura 154 Memria do Computador com as Variveis Globais

Quando ocorre a chamada a funo Somar(N1, N2), cujos parmetros foram declarados
com var, ento o computador cria as variveis X e Y, apontando para o mesmo local das
variveis N1 e N2, respectivamente, como mostrado na Figura 155. Portanto, ao referenciar a
varivel X, referencia-se tambm a varivel N1, e quando se referencia a varivel Y referencia-se
tambm a varivel N2, e vice versa.

X N Y
N 2
1
1 2 3 4 5 6
1 10
2
3 20
4
5
Figura 155 Memria do Computador com Passagem de Parmetros Por Referncia

Prof. Antnio Maria e Profa. Ana Rublia 145


Algoritmos e Estruturas de Dados I

16 RECURSIVIDADE
Um mdulo (Procedimento ou Funo) recursivo aquele que chama a si prprio n vezes
para resolver um problema. A utilizao da tcnica de recursividade em um algoritmo tem por
objetivo diminuir a complexidade do problema, aplicando-se o princpio de dividir para
conquistar.
Para aplicar a recursividade, deve-se dividir o problema sucessivamente em problemas
mais simples, at que a simplicidade do problema permita resolv-lo de forma direta, sem que a
funo ou procedimento tenham de chamar a si mesmos novamente.

Um exemplo simples de compreender a recursividade compreender o clculo de numero


fatorial. Por definio, o fatorial de um nmero natural n, representado por n!, o produto de
todos os inteiros positivos menores ou iguais a n. Por definio, 0!=1, caso contrrio o fatorial de
qualquer nmero seria 0 (zero), pois zero vezes qualquer nmero zero. Matematicamente,
define-se que:

4! = 4 . 3!
3! = 3 . 2!
2! = 2 . 1!
1! = 1 . 0!

Na ltima linha acima, basta substituir o 0! por 1, ento tem-se o resultado da conta de 4!.
Assim, tem-se a seguinte definio:

n! = 1 se n =0
n . (n-1)! se n>0

Portanto, para resolver 4! preciso multiplicar 3 por 3!, o que implica em recursividade,
pois para resolver qualquer fatorial de n, preciso calcular outro fatorial at se chegar a 0! que
por definio ser 1. Quando n vale 0, no caso do fatorial, diz-se que o algoritmo atingiu uma
condio de parada, no sendo necessrio calcular outro fatorial, apenas retornar um valor de
definio. Esta condio de parada deve estar presente em pelo menos um local dentro algoritmo
para que ele possa encerrar o clculo e no entrar em loop infinito.

Prof. Antnio Maria e Profa. Ana Rublia 146


Algoritmos e Estruturas de Dados I

Exemplificando...
Sabe-se que o fatorial de um nmero N (positivo) pode ser obtido multiplicando-o pelo
fatorial de seu predecessor:

Pela definio: FAT(N) = N * FAT(N - 1)

Algoritmo teste_recursividade;
declare num: inteiro;

FUNCAO FAT (n: inteiro): inteiro;


SE (n=0) ENTAO
FAT 1;
retorne FAT;
SENAO
FAT n * FAT(n-1);
retorne FAT;
FIMSE;
FIMFUNCAO;

INICIO
escreva (Digite um nmero para obter seu fatorial: );
leia (num);
escreva (Fatorial de ,num, : , FAT(num) );
FIM.

Figura 156 Funo Recursiva que calcula o fatorial de um nmero

Pela definio 4! calculado como:


4! = 4*3! = 4*(3*2!) = 4*(3*(2*1!)) = 4*(3*(2*(1*0!))) = 4*(3*(2*(1*1))) = 24
Note que funo chamada recursivamente com parmetro decrescente at chegar no caso
final, ou seja, 0!, cujo valor 1.
Este caso final a condio de parada que encerra a seqncia de chamadas recursivas.

Exemplificando...

A Figura 157 apresenta um exemplo de um procedimento recursivo que recebe como


parmetro um valor N inteiro, imprime-o na tela e chama novamente o prprio procedimento,
recurso. No exemplo a seguir, a condio de parada ser o valor zero, pois para valores maiores

Prof. Antnio Maria e Profa. Ana Rublia 147


Algoritmos e Estruturas de Dados I

que zero o procedimento recurso chamar novamente o prprio procedimento recurso.


Quando o parmetro n valer zero, o procedimento nada far, encerrando as chamadas recursivas.

importante o programador compreender que o funcionamento da recurso o mesmo


quando se chama uma funo somar num programa principal. O programa principal suspende
sua execuo e comea a executar a funo somar. Aps executar a funo somar, ela retorna um
valor o qual colocado no lugar da chamada da funo e o programa continua sua execuo.

Portanto, na Figura 157, observa-se que dentro da condio SE, o procedimento recurso
chamado. Neste caso, a execuo congelada (suspensa) e inicia-se outra execuo do mesmo
procedimento recurso com parmetro "n-1". Como, na nova execuo, h outra chamada ao
procedimento recurso, ento esta nova chamada tambm congelada, e outra execuo se inicia
do prprio procedimento. Somente aps atingir a condio de parada e o procedimento no for
chamado novamente, que as execues anteriormente congeladas continuaro a execuo do
ponto em que pararam.

PROCEDIMENTO recursao (n : inteiro);


SE n > 0 ENTAO
escreva (n);
recursao (n - 1);
FIMSE;
FIMPROCEDIMENTO;

Figura 157 Procedimento Recursivo que imprime um nmero em ordem decrescente

Para um valor inicial igual a 5 sada gerada ser:


SADA
5
4
3
2
1

O lugar onde se faz a chamada da recurso alterar o comportamento do algoritmo recursivo.

Prof. Antnio Maria e Profa. Ana Rublia 148


Algoritmos e Estruturas de Dados I

Exemplificando...

A Figura 158 apresenta o mesmo exemplo, alterando apenas a posio da chamada de


recurso. Aps execut-lo, manualmente, observe que a sada ser diferente, imprimindo-se o
valor recebido em ordem crescente, de 1 at N.

PROCEDIMENTO recursao (n : inteiro);


SE n > 0 ENTAO
recursao (n - 1);
escreva (n); //Esta linha ser executada ao final de cada execuo da rotina recursiva
FIMSE;
FIMPROCEDIMENTO;

Figura 158 Procedimento Recursivo que imprime um nmero em ordem crescente

Exemplificando...

A seqncia 0, 1, 1, 2, 3, 5, 8, 13, 21, ... conhecida como sequencia ou srie de Fibonacci.


Esta sequncia de nmeros tem a caracterstica da recursividade, onde:

O 1 termo somado ao 2 termo gera o 3 termo


O 2 termo somado ao 3 termo gera o 4 termo
O 3 termo somado ao 4 termo gera o 5 termo
e continua ...
A srie de Fibonacci pode ser obtida atravs da seguinte definio recursiva:

FUNCAO Fib (n : inteiro) : inteiro;


SE (n = 0) OU (n = 1) ENTAO
retorne n;
SENAO
retorne Fib(n-2) + Fib(n-1);
FIMFUNCAO;

Figura 159 Funo Recursiva para obter a srie de Fibonacci

Prof. Antnio Maria e Profa. Ana Rublia 149


Algoritmos e Estruturas de Dados I

16.1.1 EXERCCIOS PROPOSTOS


1) Escreva uma funo recursiva que retorne o somatrio de um intervalo de n1 at n2.
2) Escreva um procedimento recursivo para imprimir na tela todos os nmeros primos de 1
at 100.
3) Escreva um procedimento recursivo para imprimir na tela todos os nmeros primos de n1
at n2. Teste o algoritmo para n1=n2 tambm e veja se ele funciona. Caso no funcione,
faa correes.
4) Escreva um procedimento recursivo que imprima na tela os valores de um vetor de 100
posies.
5) Escreva uma funo recursiva que retorne a posio que contm o maior valor de um
vetor de 100 posies.
6) Escreva uma funo recursiva que retorne o segundo menor valor de um vetor de 100
posies.
7) Escreva uma funo recursiva que retorne a soma dos dgitos de um inteiro positivo n. A
soma dos dgitos de 652, por exemplo 13.
8) Escreva uma funo recursiva que retorne o somatrio dos nmeros inteiros positivos de
um vetor de 100 posies.
9) O algoritmo a seguir representa uma funo que calcula o maior divisor comum (MDC) dos
inteiros positivos utilizando o algoritmo de Euclides. Escreva uma funo recursiva equivalente.
FUNO Euclides (m:inteiro, n:inteiro) : inteiro;
declare r : inteiro;
REPITA
r = m % n;
m = n;
n = r;
AT (r = 0);
retorne m;
FIMFUNO;

10) Escreva uma funo recursiva que imprima na tela todos os nmeros fatoriais de 1 at 20,
utilizando apenas uma funo.
11) Escreva uma funo recursiva que imprima na tela todos os nmeros fatoriais de n1 at
n2, utilizando apenas uma funo. N2 MAIOR OU IGUAL a n1.

Prof. Antnio Maria e Profa. Ana Rublia 150


Algoritmos e Estruturas de Dados I

17 NDICE DE FIGURAS
Figura 1 - Algoritmo de Euclides para calcular o MDC.................................................................................7

Figura 2 - Algoritmo Erasttenes para encontrar nmeros primos de 2 at N.............................................8

Figura 3 Formulrio de Assinatura de Revista.........................................................................................11

Figura 4 Estrutura de dados Cliente........................................................................................................11

Figura 5 Variao de uma Estrutura de dados Cliente............................................................................12

Figura 6 - Exemplo de algoritmo usando Descrio Narrativa...................................................................14

Figura 7 - Fluxograma Fritar um ovo..........................................................................................................15

Figura 8 - Fluxograma Mdia.....................................................................................................................16

Figura 9 - Algoritmo Mdia em Pseudocdigo...........................................................................................17

Figura 10 Execuo de Teste de Mesa do Algoritmo Soma.....................................................................18

Figura 13 - Exemplo de declaraes de variveis.......................................................................................22

Figura 14 - Exemplo Alterao de valor de varivel...................................................................................23

Figura 15 Representao de criao de variveis na memria do computador......................................23

Figura 16 - Exemplo de declaraes de constantes...................................................................................25

Figura 21 Fluxograma de Comando Condicional SE ENTO SENO........................................................37

Figura 22 Exemplo de Comando Condicional SE ENTO SENO.............................................................37

Figura 23 Sintaxe do Comando Condicional Simples...............................................................................42

Figura 24 Exemplo de Algoritmo usando Comando Condicional Simples...............................................42

Figura 25 Sintaxe do Comando Condicional Composto...........................................................................43

Figura 26 Exemplo de Algoritmo usando Comando Condicional Composto...........................................43

Figura 27 Exemplo de Algoritmo usando Comando Condicional Simples...............................................44

Figura 28 Exemplo de Comando Condicional SE ENTO SENO, usando operador NO........................44

Figura 29 Exemplo de Comando Condicional SE ENTO SENO, usando operador OU..........................44

Figura 30 Exemplo de Indentao em Texto Comum..............................................................................46

Figura 31 Exemplo de Indentao...........................................................................................................47

Figura 32 Exemplo de Aninhamento de Comandos SE...ENTO...SENO, Algoritmo Maior....................48

Prof. Antnio Maria e Profa. Ana Rublia 151


Algoritmos e Estruturas de Dados I

Figura 33 Exemplo de Aninhamento de Comandos SE...ENTO...SENO, Algoritmo Aprovacao_Aluno......50

Figura 34 Exemplo de Aninhamento de Comandos SE...ENTO...SENO, Algoritmo triangulo...............51

Figura 35 Fluxograma de Comando Condicional ESCOLHA CASO............................................................52

Figura 36 Sintaxe do Comando Condicional ESCOLHA CASO..................................................................53

Figura 37 Algoritmo Aplicando o Comando SE...ENTO...SENO............................................................53

Figura 38 Algoritmo Aplicando o Comando ESCOLHA...CASO.................................................................54

Figura 39 Sintaxe do Comando Condicional ESCOLHA CASO Outra sintaxe 2.......................................54

Figura 40 Exemplo de Algoritmo usando Escolha Caso...........................................................................55

Figura 41 Exemplo de Algoritmo usando Escolha Caso...........................................................................56

Figura 42 Exemplo de Algoritmo de Tabuada Sem Comando de Repetio............................................59

Figura 43 Sada na tela do Algoritmo da Figura 42..................................................................................59

Figura 44 Categorizao dos Comandos de Repetio............................................................................61

Figura 45 Fluxograma de Comando de Repetio PARA.........................................................................62

Figura 46 Pseudocdigo do Comando de Repetio PARA......................................................................62

Figura 47 Exemplo Do PARA...FAA Sem A Clusula PASSO....................................................................63

Figura 48 Mensagens Impressas Na Tela Aps Execuo do Algoritmo da Figura 47..............................63

Figura 49 Pseudocdigo do Comando de Repetio PARA......................................................................64

Figura 50 Exemplo Do PARA...FAA com A Clusula PASSO....................................................................64

Figura 51 Mensagens Impressas Na Tela Aps Execuo do Algoritmo da Figura 50..............................64

Figura 52 Exemplo Do PARA...FAA Sem A Clusula PASSO....................................................................65

Figura 53 Mensagens Impressas Na Tela Aps Execuo do Algoritmo da Figura 52..............................65

Figura 54 Exemplo de Algoritmo usando Comando de Repetio PARA.................................................66

Figura 55 Exemplo de Somatrio de 1 a 50 usando Comando de Repetio PARA.................................66

Figura 56 Exemplo de Somatrio de 1 a N usando Comando de Repetio PARA..................................67

Figura 57 Exemplo de Somatrio dos mltiplos de 3 de 1 a N Usando a Clusula PASSO......................67

Figura 58 Exemplo de Somatrio dos mltiplos de 3 de 1 a N SEM a Clusula PASSO...........................68

Figura 59 Exemplo de Somatrio de 1 a N usando Comando de Repetio PARA..................................69

Prof. Antnio Maria e Profa. Ana Rublia 152


Algoritmos e Estruturas de Dados I

Figura 60 Exemplo de Somatrio de 1 a N usando Comando de Repetio PARA..................................69

Figura 61 Exemplo de Algoritmo Tabuada, usando PARA........................................................................70

Figura 62 Algoritmo atualizar_preco, usando PARA..................................................................................70

Figura 63 Fluxograma de Comando Repetio ENQUANTO....................................................................71

Figura 64 Pseudocdigo do Comando de Repetio ENQUANTO...........................................................71

Figura 65 Exemplo genrico de Comando Repetio ENQUANTO..........................................................72

Figura 66 Algoritmo de Comando ENQUANTO...FAA Para Escreva de 1 a 10 na tela............................73

Figura 67 Tela De Sada Aps Execuo do Algoritmo da Figura 66........................................................74

Figura 68 Algoritmo que imprime de 50 a 20 aplicando ENQUANTO...FAA..........................................75

Figura 69 Exemplo de Algoritmo, usando Comando de Repetio ENQUANTO......................................75

Figura 70 Algoritmo Soma usando ENQUANTO......................................................................................76

Figura 71 Exemplo de Somatrio de 1 a N usando Comando de Repetio ENQUANTO........................76

Figura 72 Exemplo de Somatrio dos mltiplos de 3 de 1 a N Usando ENQUANTO..............................77

Figura 73 Exemplo de Somatrio de 1 a N usando Comando de Repetio ENQUANTO........................77

Figura 74 Exemplo de Algoritmo, usando Comando de Repetio ENQUANTO......................................77

Figura 75 Algoritmo atualizar_preco, usando ENQUANTO......................................................................79

Figura 76 Algoritmo Imprimir Maior Nmero usando ENQUANTO.........................................................80

Figura 77 Fluxograma de Comando Repetio REPITA............................................................................81

Figura 78 Pseudocdigo do Comando de Repetio REPITA...................................................................82

Figura 79 Algoritmo de Comando ENQUANTO...FAA Para Escreva de 1 a 10 na tela............................83

Figura 80 Teste de Mesa do trecho REPITA ... AT...................................................................................83

Figura 81 Tela De Sada Aps Execuo do Algoritmo da Figura 66........................................................84

Figura 82 Algoritmo que imprime de 50 a 20 aplicando REPITA...AT....................................................85

Figura 83 Exemplo de Algoritmo, usando Comando de Repetio REPITA...AT.....................................86

Figura 84 Algoritmo Soma, usando REPITA...AT....................................................................................86

Figura 85 Exemplo de Somatrio de 1 a N usando Comando de Repetio REPITA...AT.......................87

Figura 86 Exemplo de Somatrio dos mltiplos de 3 de 1 a N Usando REPITA...AT.............................87

Prof. Antnio Maria e Profa. Ana Rublia 153


Algoritmos e Estruturas de Dados I

Figura 87 Exemplo de Somatrio de 1 a N usando Comando de Repetio REPITA...AT.......................88

Figura 88 Exemplo de Algoritmo, usando Comando de Repetio REPITA...AT.....................................88

Figura 89 Algoritmo atualizar_preco, usando REPITA.............................................................................89

Figura 90 Algoritmo Imprimir Maior Nmero usando ENQUANTO.........................................................89

Figura 91 Algoritmo Media_Aluno, usando Comando de Repetio REPITA...AT..................................93

Figura 92 Algoritmo Media_Geral, usando Comando de Repetio REPITA...AT...................................94

Figura 93 Exemplo de Algoritmo usando Comando de Repetio REPITA..............................................95

Figura 94 Algoritmo nomes_alunos.............................................................................................................95

Figura 95 Representao Grfica de um Vetor........................................................................................96

Figura 96 Declarao de Vetor em pseudocdigo...................................................................................96

Figura 97 Exemplo de Declarao de um Vetor de 5 posies do tipo inteiro........................................97

Figura 98 Vetor nome de 20 posies do tipo literal...............................................................................98

Figura 99 Algoritmo nomes_alunos utilizando Vetor, entrada e sada de dados.....................................98

Figura 100 Algoritmo nomes_alunos utilizando Vetor, processando dados............................................99

Figura 101 Representao de uma Matriz 5X10...................................................................................101

Figura 102 Declarao de matriz em pseudocdigo.............................................................................102

Figura 103 Exemplo de Declarao de uma Matriz 5X10 do tipo inteiro..............................................102

Figura 104 Declarao de Matrizes de diferentes dimenses...............................................................103

Figura 105 Atribuio de valores a Matriz M........................................................................................104

Figura 106 Representao de uma Matriz 5X10...................................................................................104

Figura 107 Entrada de dados em uma Matriz 3X5................................................................................105

Figura 108 Representao da Matriz num aps atribuio de valores..................................................106

Figura 109 Entrada e Sada de dados em uma Matriz 5X10..................................................................106

Figura 110 Algoritmo para somar nmero 5 a cada posio de uma matriz [5,10]...............................107

Figura 111 Algoritmo para somar os elementos da linha 2 e multiplicar os elementos da coluna 3....108

Figura 112 Algoritmo para encontrar maior valor da matriz e multiplic-lo pela matriz......................109

Figura 113 Algoritmo para somar duas matrizes..................................................................................110

Prof. Antnio Maria e Profa. Ana Rublia 154


Algoritmos e Estruturas de Dados I

Figura 114 Declarao de Registro em pseudocdigo...........................................................................112

Figura 115 Declarao de Registro Aluno.............................................................................................112

Figura 116 Declarao de Registro Produto..........................................................................................112

Figura 117 Representao Grfica do Registro reg_aluno.....................................................................113

Figura 118 Representao Grfica do Registro produto........................................................................113

Figura 119 Exemplo de comandos para manipular o Registro produto................................................113

Figura 120 Representao Grfica do Registro produto aps atribuies.............................................113

Figura 121 Entrada e Sada de Dados Registro Produto.....................................................................114

Figura 122 Declarao de um Vetor de Registros para Aluno...............................................................115

Figura 123 Declarao de um Vetor de Registro para Produtos............................................................115

Figura 124 Representao Grfica do Vetor de Registros produto........................................................116

Figura 125 Exemplo de comandos para manipular o Vetor de Registros produto................................117

Figura 126 Operaes de Entrada e Sada, utilizando Vetor de Registros.............................................118

Figura 127 Algoritmo produto_supermercado, usando Vetor de Registros..................................................118

Figura 128 Algoritmo pesquisa, usando Vetor de Registros.......................................................................120

Figura 129 Representao Grfica de um algoritmo modularizado......................................................121

Figura 130 Exemplo de retorno de valor e parmetro..........................................................................122

Figura 131 Declarao de Procedimento..............................................................................................123

Figura 132 Declarao de Varivel em Procedimentos.........................................................................123

Figura 133 Declarao do Procedimento SEPARADOR..........................................................................123

Figura 134 Declarao do Procedimento IMPRIMIR.............................................................................124

Figura 135 Declarao do Procedimento SEPARADOR..........................................................................124

Figura 136 Declarao do Procedimento IMPRIMIR.............................................................................124

Figura 137 Declarao do Procedimento IMPRIMIR.............................................................................125

Figura 138 Chamada ao Procedimento SEPARADOR.............................................................................125

Figura 139 Chamado ao Procedimento SEPARADOR............................................................................126

Figura 140 Algoritmo, usando Procedimento COM passagem de Parmetros......................................127

Prof. Antnio Maria e Profa. Ana Rublia 155


Algoritmos e Estruturas de Dados I

Figura 141 Exemplo de chamada de funo.........................................................................................128

Figura 142 Sintaxe para Declarao de Funes...................................................................................128

Figura 143 Declarao de Varivel em Funes....................................................................................128

Figura 144 Algoritmo com chamada a Funo com 2 parmetros........................................................129

Figura 145 Declarao de Funo SEM passagem de parmetros........................................................129

Figura 146 Algoritmo com chamada a Funo sem parmetros...........................................................130

Figura 147 Declarao de Funo COM passagem de parmetros.......................................................130

Figura 148 Algoritmo com chamada a Funo COM parmetros..........................................................131

Figura 149 Algoritmo, usando Funo CALC_SAL (com passagem de parmetro)................................132

Figura 150 Declarao do Procedimento IMPRIMIR.............................................................................135

Figura 151 Memria do Computador com as Variveis Globais............................................................137

Figura 152 Memria do Computador Contendo os Parmetros X e Y...................................................137

Figura 153 Variveis Ocupando o Mesmo Espao de Memria............................................................139

Figura 154 Memria do Computador com as Variveis Globais............................................................140

Figura 155 Memria do Computador com Passagem de Parmetros Por Referncia...........................140

Figura 156 Funo Recursiva que calcula o fatorial de um nmero......................................................142

Figura 157 Procedimento Recursivo que imprime um nmero em ordem decrescente.......................143

Figura 158 Procedimento Recursivo que imprime um nmero em ordem crescente...........................144

Figura 159 Funo Recursiva para obter a srie de Fibonacci...............................................................144

Prof. Antnio Maria e Profa. Ana Rublia 156


Algoritmos e Estruturas de Dados I

18 NDICE DE TABELAS
Tabela 1 - Execuo do algoritmo de Euclides para calcular o MDC dos nmeros 48 e 30..........................8

Tabela 2 - Execuo do algoritmo de Erasttenes para encontrar os nmeros primos de 2 a 30................9

Tabela 3 Simbologia utilizada em Fluxogramas....................................................................................... 15

Tabela 4 Tipo de Dados........................................................................................................................... 25

Tabela 5 - Exemplo de nomes vlidos e invlidos ...................................................................................... 27

Tabela 6 Operadores Aritmticos............................................................................................................ 32

Tabela 7 Hierarquia das Operaes Aritmticas...................................................................................... 32

Tabela 8 Funes pr-definidas.............................................................................................................. 33

Tabela 9 Operadores Relacionais............................................................................................................ 39

Tabela 10 Operadores Relacionais aplicados ao tipo INTEIRO ................................................................ 39

Tabela 11 Operadores Relacionais aplicados ao tipo REAL ..................................................................... 39

Tabela 12 Operadores Relacionais aplicados ao tipo CARACTERE ........................................................... 40

Tabela 13 Operadores Relacionais aplicados a CARACTERES maisculo e minsculo .............................40

Tabela 14 Operadores Relacionais aplicados ao tipo LITERAL ................................................................. 40

Tabela 15 Operadores Lgicos................................................................................................................ 42

Tabela 16 Variao de Sintaxe para o Comando ESCOLHA...CASO .......................................................... 56

Prof. Antnio Maria e Profa. Ana Rublia 157


Algoritmos e Estruturas de Dados I

19 RELAO DE CONES
Indicadores de aes requisitadas durante o estudo

FAA. Determina a existncia de tarefa a ser executada. Este cone indica que h uma
atividade de estudo para ser realizada.

BUSQUE. Indica a exigncia de busca por mais informao, seja ela em anexos do mdulo
impresso, em bibliografia especfica ou em endereos de Internet.

REFLITA. Indica a necessidade de se pensar mais detidamente sobre o(s) assunto(s)


abordado(s) e suas relaes com o objeto de estudo.

SAIBA MAIS. Apresenta informaes adicionais sobre o tema abordado de forma a


possibilitar a obteno de novas informaes ao que j foi referenciado.

REVEJA. Indica a necessidade de rever conceitos ou procedimentos abordados


anteriormente.

ACESSE. Indica a necessidade de acessar endereo(s) especfico(s), apontado(s) logo aps o


cone.

COMUNIQUE-SE. Indica a necessidade de dilogo com o tutor e/ou com os colegas.

TRABALHE EM EQUIPE. Indica a necessidade de ao colaborativa para a execuo de


atividade(s).

CONCLUSO OU CONSIDERAES FINAIS. Todas as unidades de estudo se encerram com


uma sntese das principais ideias abordadas, concluso ou consideraes finais acerca do
que foi tratado.

IMPORTANTE. Aponta uma observao significativa. Pode ser encarado como um sinal de
alerta que o orienta para prestar ateno informao indicada.

EXEMPLO OU CASO. Indica a existncia de um exemplo ou estudo de caso, para uma


situao ou conceito que est em estudo.

SUGESTO DE LEITURA. Indica bibliografia de referncia e tambm sugestes para leitura


complementar.

CHECKLIST ou PROCEDIMENTO. Indica um conjunto de aes (um passo a passo) a ser


realizado.

Prof. Antnio Maria e Profa. Ana Rublia 158


Algoritmos e Estruturas de Dados I

cones desenhados por Web Design Creatives Inc (http://www.webdesigncreatives.com/freebies/)

Prof. Antnio Maria e Profa. Ana Rublia 159


Algoritmos e Estruturas de Dados I

Prof. Antnio Maria e Profa. Ana Rublia 160

Anda mungkin juga menyukai