Buscar

construcao_algoritmos_joaocarlos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE 
DEPART. DE INFORMÁTICA E MATEMÁTICA APLICADA - DIMAP 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
APOSTILA DE CONSTRUÇÃO DE ALGORITMOS 
DISCIPLINA: ALGORITMO E PROGRAMAÇÃO DE COMPUTADORES 
PROF.: JOÃO CARLOS XAVIER JÚNIOR 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Natal/RN 
Fevereiro, 2008 
1ª Unidade 
 
 
2
Lógica de Programação e Construção de Algoritmos 
 
 
1. LÓGICA 
É a ciência que estuda as leis e critérios de validade que regem o pensamento e a 
demonstração, ou seja, ciência dos princípios formais do raciocínio. A lógica auxilia os 
profissionais de informática na tomada de decisão (na solução dos problemas). 
 O uso corriqueiro da palavra lógica está normalmente relacionado à coerência e 
racionalidade. Freqüentemente associa-se lógica apenas à matemática, não percebendo sua 
aplicabilidade e relação com as demais ciências. Pode-se dizer que a lógica é a “arte de bem 
pensar”, que é a “ciência das formas do pensamento”. 
 Pode-se dizer ainda que a lógica tem em vista a “ordem da razão”. Ela estuda e 
ensina a colocar “ordem no pensamento”. 
 
Exemplo: 
• Todo mamífero é um animal. 
• Todo cavalo é um mamífero. 
• Logo, todo cavalo é um animal. 
 
 
2. ALGORITMO 
É uma seqüência finita de ações que descrevem como um problema pode ser resolvido. 
Quando as ações de um algoritmo obedecem à sintaxe de uma linguagem de programação, 
passamos a chamá-lo de programa. 
Algoritmo é a especificação formal dos passos para que um problema seja resolvido. 
Esta especificação é feita de forma escrita, representada por expressões imperativas. 
 
Exemplo: 
Pode-se escrever um primeiro algoritmo de exemplo, utilizando português coloquial, que 
descreva o comportamento na resolução de uma determinada atividade (a troca de uma 
lâmpada). 
 Algoritmo 01 
! pegar a escada. 
! posicionar a escada embaixo da lâmpada. 
! buscar uma lâmpada nova. 
! retirar a lâmpada velha. 
! colocar a lâmpada nova. 
O mesmo algoritmo pode ser demonstrado graficamente da maneira que é mostrado 
na figura 01. 
 
 
3. TIPOS DE INFORMAÇÕES 
As informações podem ser classificadas em dois tipos básicos: dados e instruções. 
• Dados são valores passados ou recebidos; 
1ª Unidade 
 
 
3
• Instruções são expressões imperativas passadas para o computador. 
 
Os dados podem ser caracterizados por três tipos: numéricos (inteiros e reais), 
caracteres e lógicos. 
• Inteiros: São todos os numéricos positivos ou negativos. Exclui-se deste qualquer 
número fracionário. 
• Reais: São todos os números positivos, negativos e fracionários. 
• Caracteres: São todas as seqüências contendo letras (A..Z, a..z), números (0..9) e 
símbolos especiais (#, ?, !, @) que estiverem entre aspas (“ “‘). Este tipo de dado 
também é conhecido como: alfanumérico, string, literal ou cadeia. 
• Lógicos: São todos os dados que possuírem valores verdadeiro e falso. É também 
conhecido como tipo booleano. 
 
 
Figura 01 - Mostra o algoritmo 01 na forma de fluxograma. 
 
 
4. CONSTANTES: 
Constantes são endereços de memória destinados a armazenar informações fixas, 
inalteráveis durante a execução do programa. 
 
Exemplos: 
 PI = 3.1415; 
 Circunferência = 360º; 
 Valor = falso; 
 
 
 
1ª Unidade 
 
 
4
5. VARIÁVEIS: 
Tem-se como definição de variável tudo aquilo que é sujeito à variação, que é incerto, 
instável ou inconstante. Variável é um dado /entidade que durante sua existência pode 
assumir diversos valores de um determinado tipo. 
Variáveis são identificadas por um nome (etiqueta) e estão associadas a células de 
memória. Como a memória de um computador é constituída por várias células, cada 
variável deve ser univocamente identificada. Cada variável pode guardar apenas um objeto 
(valor) de cada vez, sendo sempre esses valores de mesmo tipo. 
O nome associado a uma variável é denominado identificador. É uma boa prática 
utilizar nomes significativos (que digam mais ou menos o significado da variável) quando 
utilizarmos uma variável em um algoritmo; Algumas regras para nomear as variáveis: 
• Sempre começar por um caractere alfabético. Os caracteres seguintes podem ser 
alfabéticos ou numéricos; 
• Não colocar espaços nem outros sinais que possam ser confundidos com 
operadores; 
• Evitar nomes desnecessariamente compridos; 
 
Exemplos de identificadores válidos: Alpha, X, nota1, media, ABC, FGTS, CPF 
Exemplos de identificadores inválidos: 5E3, 4X, A(12), A:B, A-B, Nota/2. 
 
 
6. DECLARAÇÃO DE VARIÁVEIS 
As variáveis devem ser declaradas de acordo com a seguinte estrutura: 
 
<tipo>: <lista de identificadores>; 
 
Exemplos: 
 var 
 Inteiro: Idade, Ano; 
 Caractere: Nome, Endereço, Sexo; 
 Real: Peso, media; 
 Lógico: Certo, Aprovado; 
 
 
Exercícios: 
1. Assinale os identificadores válidos: 
a) (X) b) x c) ah! d) "aluno” 
e) #55 f) KM/L g) UYT h) AB*C 
i) CEP h) dia 
 
 
2. Declare adequadamente variáveis para armazenar a nota do aluno, o nome do aluno, o 
número de matrícula e o sexo. Usar os tipos primitivos que foram apresentados. 
 
 
 
1ª Unidade 
 
 
5
7. OPERAÇÃO DE ATRIBUIÇÃO 
Esta operação associa um valor a uma variável. O tipo do valor a ser atribuído deve ser o 
mesmo da variável. 
 
Estrutura sintática: 
<identificador> ← <expressão>; 
 
Exemplos: 
 A ← 21; 
 nome ← “CARLOS”; 
 X ← Falso; 
 
Onde a expressão à direita da operação (comando) de atribuição pode ser definida 
como um valor básico, uma constante, uma variável, ou qualquer combinação de dados, 
incluindo outras variáveis, números, etc. 
 
Exemplos: 
 media ← (n1*4 + n2*5 + n3*6)/15; 
 velocidade ← espaço/tempo; 
 Resposta ← ((A + B) = C); 
 dependendo dos valores de A, B e C, pode ser V ou F. 
 
 
8. OPERADORES ARITMÉTICOS 
Chamamos de operadores aritméticos o conjunto de símbolos que representa as operações 
básicas da matemática: 
Operador Função Exemplos 
+ Adição 2 + 3, X + Y 
- Subtração 4 – 2, N – M 
* Multiplicação 3 * 4, A * B 
/ Divisão 10/2, X1/X2 
 
Para representar as operações de radiciação e potenciação, usaremos as palavras-
chave rad e pot: 
Operador Função Significado Exemplos 
pot(x,y) Potenciação x elevado a y pot(2,3) 
rad(x) Radiciação Raiz quadrada de x rad(9) 
 
Para representar as operações matemáticas não-convencionais de resto da divisão e 
quociente da divisão inteira, usaremos mod e div. 
Operador Função Exemplos 
mod Resto da divisão 9 mod 4 (resulta em 1) 
div Quociente da divisão 9 div 4 (resulta em 2) 
 
1ª Unidade 
 
 
6
9. OPERADORES RELACIONAIS: 
Utilizamos os operadores relacionais para realizar comparações entre dois valores de 
mesmo tipo. Tais valores são representados por constantes, variáveis ou expressões 
aritméticas. Os operadores relacionais são: 
Operador Função 
= Igual a 
> Maior que 
< Menor que 
>= Maior ou igual 
<= Menor ou igual 
<> Diferente 
 
Obs: O resultado obtido de uma relação é sempre um valor lógico. 
 
 
10. OPERADORES LÓGICOS 
Utilizamos três conectivos básicos para a formatação de novas proposições lógicas 
compostas a partir de outras proposições lógicas simples. 
 Os operadores lógicos são: 
Operador Função 
Não Negação 
E Conjunção 
Ou Disjunção 
 
 A seguir mostraremos as tabelas-verdade que servem para representar as 
possibilidades combinatórias entre os valores de diversas variáveis lógicas, as quais se 
encontram em apenas duas situações (V ou F), e um conjunto de operadores lógicos. 
 
Operação de Conjunção: 
A B A e B 
F F F 
F V F 
V F F 
V V V 
Dica: Qualquer falsidade, significa falsidade. 
 
Operação de Disjunção: 
A B A ou B 
F F F 
F V V 
V F V 
V V V 
Dica: Qualquer verdade, significa verdade. 
 
 
1ª Unidade 
 
 
7
11. COMANDO DE ENTRADA DE DADOS: 
Para que o algoritmo possa receber os dados que necessita, usaremos o comando leia, cuja 
finalidade é atribuir o dado a ser fornecido à variável identificada. 
 leia (<lista de identificadores>); 
Obs: O comando leia representa a entrada de dados mais comum em um sistema 
computacional, via teclado. 
 
Exemplos:Leia (nota1): 
 Leia (nota1, nota2, nota3); 
 
 
12. COMANDO DE SAÍDA DE DADOS 
Para que o algoritmo possa mostrar os dados que calculou, usaremos o comando escreva, 
cuja finalidade é exibir o conteúdo da variável identificada. 
 Escreva (<lista de itens>); 
 
Exemplos: 
Escreva (x); 
Escreva (A, Nota); 
Escreva (A + B); 
Escreva (“Bom Dia”, Nome); 
 Escreva (2+1 >= 5+3); 
 
 
13. BLOCOS 
Estrutura sintática que define um conjunto de ações como uma única função. Dessa forma, 
um algoritmo pode ser visto como um bloco. Os limites de um bloco são delimitados pelas 
palavras início e fim. 
 A seguir temos a estrutura sintática de um bloco: 
 Início 
 <conjunto de ações separadas por ponto e vírgula> 
 Fim 
 
Exemplo: 
 início 
 // início do bloco (algoritmo) 
 // declaração de variáveis 
 // seqüência de variações 
 fim 
 
 
 
 
1ª Unidade 
 
 
8
Exercícios: 
3. Escreva um algoritmo que leia dois números e calcule a soma deles. 
 
4. Escreva um algoritmo que leia 3 notas e calcule a média. A seguir imprima a média. 
 
5. Escreva um algoritmo que leia a matricula, nome e sexo de um aluno. A seguir imprima 
todas as informações digitadas via teclado. 
 
6. Escreva um algoritmo que calcule o salário dos funcionários de uma empresa. O salário 
bruto é R$ 750,00. Porém esse salário pode ser acrescido de horas extras. A única dedução 
existente nessa empresa é o INSS que é de 11% para todos os empregados. Sabendo que o 
salário líquido é o bruto – o INSS, calcule o salário líquido. 
 
 
14. ESTRUTURAS DE SELEÇÃO 
A maioria dos algoritmos precisa de um fluxo de controle mais flexível. Nos algoritmos 
estudados até aqui, o fluxo de controle era sempre seqüencial. Cada ação era executada na 
seqüência em que aparecia; entretanto, existem situações em que apenas uma das várias 
opções deve ser executada (seleção). 
 Uma estrutura de seleção permite então a escolha de um grupo de ações (bloco) a 
ser executado quando determinadas condições, representadas por expressões lógicas ou 
relacionais, forem ou não satisfeitas. 
 
 
14.1 SELEÇÃO SIMPLES 
Em um algoritmo quando precisamos executar uma ação que depende de uma condição ser 
VERDADEIRA, adotamos o seguinte modelo. 
 
Sintaxe: 
se <condição> então 
ação; // comando único (ação primitiva) 
fim_se 
 
 Onde <condição> é uma expressão lógica que, quando avaliada(inspecionada) 
resulta em valor V ou F. Se <condição > for verdadeira, a ação associada ao então é 
executada. Caso contrário encerra-se o comando. 
 
 Quando vinculada à condição forem associadas várias ações, basta escrevê-las como 
um bloco: 
 
Sintaxe: 
se <condição> então 
inicio 
 ação 1; 
 ação 2; 
1ª Unidade 
 
 
9
 ... 
fim; 
fim_se 
 
 Se <condição> for verdadeira, então todas as ações serão executadas. Caso 
contrário, nenhuma delas será executada. 
 
Exemplo: 
 Tomando o algoritmo anterior para cálculo da média, considerar que a aprovação só 
ocorrerá se a média for igual ou superior a 7. 
 
 Programa Media01; 
 var 
 Nota1, nota2, nota3: Real; 
 
 início 
 Leia (nota1, nota2, nota3); 
 se ((nota1 + nota2 + nota3)/3) >= 7) então 
 escreva(‘Aluno Aprovado, Parabéns!’); 
 fim_se; 
 fim. 
 
 
14.2 SELEÇÃO COMPOSTA 
Quando tivermos situações em um algoritmo que duas alternativas dependem de uma 
mesma condição, uma condição ser verdadeira e outra condição ser falsa, adotamos o 
seguinte modelo: 
 
Sintaxe: 
 se <condição> então 
 início 
 ação 1; 
 ação 2, 
 fim 
 senão 
 Ação alternativa; 
fim_se 
 
 Quando a condição for verdadeira, o bloco vinculado ao então será executado. Caso 
contrário, a condição resulta em F, a ação primitiva associada ao senão é executada. Se o 
problema requisitasse várias ações para esse caso, deveríamos agrupar essas ações em um 
bloco, como foi feito no caso do então. 
 
1ª Unidade 
 
 
10
Exemplo: 
 Programa Media02; 
 var 
 nota1, nota2, nota3: Real; 
 início 
 leia (nota1, nota2, nota3); 
 se ((nota1 + nota2 + nota3)/3) >= 7) então 
 escreva (“Aluno Aprovado, Parabéns !”); 
 senão 
 escreva (‘Aluno Reprovado, estude mais da 
próxima vez’); 
 fim_se; 
 fim. 
 
 
14.3 SELEÇÃO ENCADEADA HOMOGÊNEA 
Quando, devido à necessidade de processamento, agruparmos várias seleções, formaremos 
uma seleção encadeada. Normalmente, tal formação ocorre quando uma determinada ação 
ou bloco deve ser executado se um grande conjunto de possibilidades ou combinações de 
situações for satisfeito. O encadeamento utiliza o mesmo padrão lógico: 
 
 se <condição 1> então 
 início 
 ação1; 
 ação2; 
 fim 
 senão se <condição 2> então 
 ação3; 
 senão se <condição> então 
 ação4; 
fim_se; 
fim_se; 
 
 
Exercício: 
7. Escreva um algoritmo que efetue o cálculo do reajuste de salário de um funcionário. 
Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja menor 
que R$ 500,00, se o salário for igual a R$ 500,00 mas menor ou igual a R$ 1.000,00, seu 
reajuste será de 10%, caso seja maior que R$ 1.000,00, o reajuste será de 5%. 
 
 
 
 
1ª Unidade 
 
 
11
14.4 SELEÇÃO MÚLTIPLA ESCOLHA 
Quando um conjunto de valores discretos precisa ser testado e ações diferentes são 
associadas a esses valores, estamos diante de uma seleção encadeada homogênea do tipo 
se-senão-se. Como esta situação é bastante freqüente na construção de algoritmos que 
dependem de alternativas, utilizaremos uma estrutura específica para este casos, a seleção 
múltipla escolha. 
 A estrutura abaixo permite expressar de forma mais conveniente uma seleção 
envolvendo múltipla escolha: 
 
Sintaxe: 
 escolha x 
 caso 1: 
 ação1; 
 caso 2: 
 ação2; 
 caso 3: 
 ação3; 
 caso 4: 
 ação4; 
 fim escolha; 
 
Exemplo: 
 escolha y 
 caso 1, 2: 
 x ← x +5; 
 caso 3: 
 x ← x – 4; 
 caso 4..6: 
 x ← x * 2; 
 caso contrario: 
 x ← x + 1; 
 fim escolha; 
 
Exemplo 02: 
 início 
 // Declaração das variáveis 
 Preço: Real; 
 Origem: Inteiro; 
 Leia (Preço); 
 Leia (Origem); 
 
 escolha Origem 
 caso 1: 
1ª Unidade 
 
 
12
 escreva (Preço, “ – produto do Sul”); 
 caso 2: 
 escreva (Preço, “ – produto do Norte”); 
 caso 3: 
 escreva (Preço, “ – produto do Leste”); 
 caso 4: 
 escreva (Preço, “ – produto do Oeste”); 
 caso 7,8,9: 
 escreva (Preço, “ – produto do Sudeste”); 
 caso 10..20: 
 escreva (Preço, “– produto do C-oeste”); 
 caso 5,6,25..50: 
 escreva (Preço, “ – produto do Nordeste”); 
 caso contrário: 
 escreva (Preço, “ – produto Importado”); 
 fim_escolha; 
 
 
15. ESTRUTURAS DE REPETIÇÃO 
As estruturas de repetição são usadas sempre que uma determinada ação ou várias ações 
precisão ser executados várias vezes. 
 As estruturas de repetição são classificadas em três tipos. Veja abaixo a definição 
dos tipos. 
 
15.1 REPETIÇÃO COM VARIÁVEL DE CONTROLE 
Quando se conhece o número de vezes que um trecho do algoritmo deve ser repetido pode-
se utilizar a estrutura para. 
 Essa estrutura descreve a repetição de um número definido de vezes fixando limites 
iniciais e finais para a variável de controle. 
 
Sintaxe: 
para <var controle> de inicio até fim passo valor faça 
comando 1; 
comando 2; 
comando 3; 
fim_para; 
 
! variável de controle é a variável que terá seu valor testado; 
! início é o valor inicial da variável de controle; 
! fim é o valor final da variável de controle; 
! valor é o incremento dado à variável. 
 
Exemplo: 
 Programa Repetição03; 
 var 
 x, r, cont : inteiro; 
1ª Unidade 
 
 
13
 inicio 
 para (cont de 1 até 5 passo 1 faça) 
 início 
 leia (x); 
 r ← x * 3; 
 escreva (r); 
 fim 
 fim_para; 
 fim. 
 
15.2 REPETIÇÃO COM TESTE NO INÍCIO DO LOOPING 
Consiste em uma estrutura de controle de fluxo de execução que permite repetir diversas 
vezes um mesmo trecho do algoritmo, porém, sempre verificando antes de cada execução 
se é “permitido” executar o mesmo trecho. 
 Para realizar a repetição com teste no início, utilizamos ocomando enquanto que 
permite que um bloco, ou uma ação simples, seja repetida enquanto uma determinada 
<condição> for verdadeira. 
 
Sintaxe: 
 enquanto (<condição>) faça 
 ação 1; 
 ação 2; 
 .. 
 ação N; 
 fim_enquanto 
 
Exemplo: 
 Programa Repetição01; 
 var 
 x, r, vezes : Inteiro; 
 
 inicio 
 vezes ← 1; 
 enquanto (vezes <= 5) faça 
 início 
 Leia (x); 
 r ← x * 3; 
 escreva (r); 
 vezes ← vezes + 1; 
 fim 
 fim_enquanto; 
 fim. 
F
V
ENQUANTO Condição
1ª Unidade 
 
 
14
15.3 REPETIÇÃO COM TESTE NO FINAL DO LOOPING 
Para realizar a repetição com teste no final, utilizamos a estrutura repita, que permite que 
um bloco, ou uma ação simples, seja repetida até que uma determinada <condição> seja 
verdadeira. 
 O modelo genérico deste tipo de repetição é o seguinte: 
 
Sintaxe: 
 repita 
 ação 1; 
 ação 2; 
 .. 
 ação N; 
 até <condição>; 
 
Exemplo: 
 Programa Repetição02; 
 var 
 x, r, vezes: Inteiro; 
 inicio 
 vezes ← 1; 
 repita 
 início 
 leia (x); 
 r ← x * 3; 
 escreva (r); 
 vezes ← vezes + 1; 
 fim 
 até (vezes > 5); 
 fim. 
 
Obs: A utilização de uma estrutura repita no lugar de uma estrutura enquanto corresponde 
a utilizar como condição para o repita a negação da condição do enquanto. 
 
15.4 CONSIDERAÇÕES ENTRE OS TIPOS DE ESTRUTURAS DE LOOPINGS 
Foram apresentadas três estruturas de controle a nível de repetição: enquanto, repita e 
para, cada qual com sua característica de processamento. Dentro deste aspecto, você deve 
ter notado que as estruturas enquanto e repita são dinâmicas, ao passo que a estrutura 
para é mais estática. 
• Toda estrutura enquanto pode ser convertida para repita e vice-versa 
• Toda estrutura para pode ser convertida para enquanto, mas nem toda estrutura 
enquanto pode ser convertida para estrutura para 
V
F
REPITA 
Condição
1ª Unidade 
 
 
15
16. ESTRUTURAS DE CONTROLE ENCADEADAS 
Assim como há o encadeamento das estruturas de decisão, há também o encadeamento das 
estruturas de repetição. Tal encadeamento pode ser entre estruturas do mesmo tipo, como 
também entre estruturas de tipos diferentes. 
 
Exemplos: 
 enquanto (condição1) faça 
 enquanto (condição2) faça 
 instruções; 
 fim_enquanto; 
 fim_enquanto; 
 
 enquanto (condição1) faça 
 repita 
 instruções; 
 até que (condição2); 
 fim_enquanto; 
 
 para (<var1> de <início> até <fim> passo <incr>) faça 
 para (<var1> de <início> até <fim> passo <incr>) 
faça 
 instruções; 
 fim_para; 
 fim_para; 
 
 
 Programa Fatorial; 
 var 
 N, Fat, Cont: Inteiro; 
 início 
 Fat ← 1; 
 Leia (N); 
 Enquanto (N >=1) faça 
 início 
 Para Cont de 1 até N passo 1 faça 
 Fat ← Fat * Cont; 
 fim_para; 
 Escreva (“Fatorial de”, N, “é ”, Fat); 
 Leia (N); 
 fim 
 fim_enquanto; 
 fim. 
 
1ª Unidade 
 
 
16
Lista de Exercício I 
 
 
1. Escreva um algoritmo que peça dois números inteiros e que indique qual deles é o maior. 
 
2. Escreva um algoritmo que leia um número e diga se este é par ou ímpar. 
 
3. Escreva um algoritmo que leia vários números, e que diga quantos desses números são 
pares e quantos são ímpares. O programa deve permitir somente valores maiores que 0. 
 
4. Escreva um algoritmo que leia três números reais e diga qual deles é o maior. 
 
5. Escreva um algoritmo que calcule o fatorial de um número. 
 
6. Escreva um algoritmo que leia vários notas e dê a média delas. O programa permitirá 
somente notas maiores que 0. 
 
7. Escreva um algoritmo que teste vários números e diga se eles são primos ou não. O 
programa finaliza quando for digitado um número menor ou igual a 1. 
 
8. Escreva um algoritmo que leia dois números e imprima a soma, subtração, produto e 
divisão deles. 
 
9. Escreva um algoritmo que imprima todos os números ímpares de 1 a 100. 
 
10. Escreva um algoritmo que leia vários números e imprima o quadrado e o cubo de cada 
número lido. O programa terminará quando for digitado o número 0. 
 
11. Escreva um algoritmo que leia dois números e faça a divisão entre eles. Depois mostre 
o resto e o dividendo dessa divisão. 
 
12. Escreva um algoritmo para converter várias temperaturas em graus Celsius para 
Fahrenheit (°F = 32 + 1.8° * C). Temperaturas negativas não serão válidas para esse 
algoritmo. 
 
13. Escreva um algoritmo que leia dois lados de um triângulo retângulo e calcule a 
hipotenusa. 
 
14. Escreva um algoritmo que dados os litros gastos e os quilômetros percorridos por um 
automóvel, calcule os gastos de combustível em Reais/Km e em litros/100Km (considere 
que um litro custa R$ 1,70). 
 
15. Escreva um algoritmo que dado um determinado valor em Reais, indique quantas 
células de R$ 100,00, R$ 50,00, R$ 10,00, R$ 5,00, R$ 2,00 e R$ 1,00, serão necessárias 
para essa quantia (com o mínimo de cédulas possível). 
 
1ª Unidade 
 
 
17
16. Escreva um algoritmo que leia vários números e imprima a tabuada de cada número 
lido. O algoritmo encerra quando for digitado o número 0. 
 
17. Escreva um algoritmo que leia a hora atual em horas, minutos e segundos, calcule e 
expresse resultado apenas em segundos segundos. 
 
18. Escreva um algoritmo que leia a idade de uma pessoa expressa em anos, meses e dias, e 
mostre-a apenas em dias. 
 
19. Escreva um algoritmo que tendo como dados de entrada a altura e o sexo de uma pessoa 
(‘M’ = masculino e ‘F’ = feminino), calcule seu peso ideal, utilizando as seguintes 
fórmulas: 
 
 para homens: (72.7 * altura) – 58; 
 para mulheres: (62.1 * altura) – 44.7; 
 
20. Escreva um algoritmo que leia vários números e escreva os 20 primeiros múltiplos de 
cada número lido. Por exemplo, caso o número lido seja 7, seus múltiplos seriam 7, 14, 21, 
28, ... Use o número 0 como terminador desse algoritmo. 
 
21. Dados o nome e a idade de um nadador, classifique-o em uma das seguintes categorias: 
 
 Infantil A -- de 5 a 7 anos 
 Infantil B -- de 8 a 10 anos 
 Juvenil A -- de 11 a 13 anos 
 Juvenil B -- de 14 a 17 anos 
 Sênior -- maiores de 17 anos. 
 
22. Escreva um algoritmo que leia o sexo, altura e peso de um grupo de 250 pessoas e 
informe: 
 
a) Média das alturas dos homens e dos pesos das mulheres. 
b) O homem mais alto e a mulher mais gorda. 
 
 
 
 
 
 
 
 
2ª Unidade 
 
 
18
17. VETORES OU MATRIZES DE UMA DIMENSÃO 
Este tipo de estrutura em particular é também conhecido como matrizes unidimensionais. 
Sua utilização mais comum está vinculada à criação de tabelas. Vetor é uma única variável 
dimensionada com um determinado tamanho. A dimensão de um vetor é constituída por 
constantes inteiras e positivas. Os nomes dados aos vetores seguem as mesmas regras de 
nomes utilizados para inicializar as variáveis simples. 
 
 Observe que para resolver um problema trivial de somatório de médias de 8 alunos, 
por exemplo, sem a utilização de vetor, seria necessário a declaração de 8 variáveis 
diferentes para receber cada valor correspondente a média de cada aluno. Já com a 
utilização de vetor, declara-se apenas um vetor que possua o tamanho de 8 elementos. 
 
Exemplo: 
Variáveis Simples Vetor 
MD1 = 4.5 MD[1] = 4.5 
MD2 = 6.5 MD[2] = 6.5 
MD3 = 8.0 MD[3] = 8.0 
MD4 = 3.5 MD[4] = 3.5 
MD5 = 6.0 MD[5] = 6.0 
MD6 = 7.0 MD[6] = 7.0 
MD7 = 6.5 MD[7] = 6.5 
MD8 = 6.0 MD[8] = 6.0 
 
 Observe que o nome é um só, o que muda é a informação indicada dentro dos 
colchetes. A esta informação dá-se o nome de índice, sendo este o endereço onde o 
elemento está armazenado. É necessário que fique bem claro que elemento é o conteúdo do 
vetor, neste caso os valores das notas. No caso de MD[1] = 4.5, o número 1 é o índice, ou 
seja endereço cujo elemento é 4.5. 
 
Exemplo: 
 Program Média_Turma; 
 var 
 MD: vetor[1..8] de Real; 
 Soma, Media: Real; 
 I: Inteiro; 
 inicio 
 Soma ← 0; 
 para I de 1 até 8 passo 1 faça 
 início 
 leia (MD[I]); 
 Soma ← Soma + MD[I]; 
 fim 
 fim_para; 
 Media ← Soma / 8; 
 escreva (Media); 
 fim. 
2ª Unidade 
 
 
19
 Note que a estrutura deste programa permiteuma grande mobilidade, pois se houver 
a necessidade de aumentar o número de alunos, bastaria re-dimensionar o vetor, de tal 
forma que o valor final da instrução para seria acrescido. 
 
 A tabela a seguir, mostra como ficam os valores armazenados no vetor: 
 
Vetor: MD 
Índice Elemento 
1 4.5 
2 6.5 
3 8.0 
4 3.5 
5 6.0 
6 7.0 
7 6.5 
8 6.0 
 
17.1 ESCRITA DE DADOS DE UM VETOR 
O processo de escrita de um vetor é bastante parecido com o processo de leitura de seus 
elementos. Para esta ocorrência deverá ser utilizada a instrução escreva seguida da 
indicação da variável e seu índice. 
 
Exemplo: 
 Program Média_Turma; 
 var 
 MD: vetor[1..8] de Real; 
 Soma, Media: Real; 
 I: Inteiro; 
 início 
 Soma ← 0; 
 
// Inclusão dos Dados. 
 para I de 1 até 8 passo 1 faça 
 início 
 leia (MD[I]); 
 Soma ← Soma + MD[I]; 
 fim 
 fim_para; 
 // Escrita dos Dados. 
 para I de 1 até 8 passo 1 faça 
 escreva (MD[I]); 
 fim_para; 
 Media ← Soma / 8; 
 escreva (Media); 
 fim. 
2ª Unidade 
 
 
20
17.2 MANIPULAÇÃO DE DADOS DO TIPO CARACTERE EM UM VETOR OU 
MATRIZ 
Para se declarar um vetor que armazenará dados do tipo caractere, basta definir um nome, a 
quantidade de elementos e indicar que tipo de dados é do tipo caractere. 
 
Exemplo01: 
 Programa Lista_Nome; 
 var 
 nome: vetor [1..20] de caractere[30]; 
 cont: inteiro; 
 início 
 // Inclusão dos nomes. 
 para cont de 1 até 20 passo 1 faça 
 Leia (nome[cont]); 
 fim_para; 
 
 // Escrita dos nomes cadastrados. 
 para cont de 1 até 20 passo 1 faça 
 Escreva (nome[cont]); 
 fim_para; 
 fim. 
 
Exemplo02: 
 Programa Soma_Vetores; 
 var 
vet1, vet2, vet3: Vetor [1..50] de inteiro; 
 I: inteiro; 
 início 
para i de 1 até 50 passo 1 faça 
 inicio 
 // Inclusão de elementos vetores vet1 e vet2. 
leia (vetor1[i], vetor2[i]); 
 
// Adição dos elementos dos vetores. 
vet3[i] ← vet1[i] + vet2[i]; 
 
// Impressão do resultado. 
escreva (vetor3[i]); 
 fim 
fim_para; 
fim. 
 
17.3 ORDENAÇÃO DE VETORES 
Uma operação com vetores muito utilizada tanto no meio acadêmico quanto no meio 
comercial, é a ordenação de valores ou elementos de um vetor. Observe o vetor abaixo: 
 [1] [2] [3] [4] [5] [6] [7] 
10 -1 34 -5 8 15 1 
2ª Unidade 
 
 
21
 Agora, como seria o pseudocódigo que pudesse colocar cada número na sua ordem 
crescente. Veja o pseudocódigo abaixo, ele trás uma rotina de ordenação simples. 
 
 Programa Ordena_Vetor 
 início 
 var 
 inteiro: Vetor[1..7], I, J, Aux; 
 //Digitação e armazenação de valores numéricos. 
 para I de 1 até 7 passo 1 faça 
 início 
 Escreva (“Digite um valor qualquer.:”); 
 Leia (Vetor[I]); 
 fim 
 fim_para 
 
 //Ordenação dos elementos do vetor. 
para I de 1 até 6 passo 1 faça 
 para J de I+1 até 7 passo 1 faça 
 início 
 se (Vetor[I] > Vetor[J]) então 
 início 
 Aux ← Vetor[I]; 
 Vetor[I] ← Vetor[J]; 
 Vetor[J] ← Aux; 
 fim 
 fim_se 
 fim 
 fim_para 
 fim_para 
 
 //Impressão dos elementos do vetor. 
para I de 1 até 7 passo 1 faça 
 Escreva (Vetor[I]); 
 fim_para 
 fim 
 
 Após a execução do pseudocódigo acima, o vetor ficaria assim: 
 
 
 
 
 
17.4 MÉTODO DE PESQUISA EM VETORES 
Quando se trabalha com vetores, estes poderão gerar grandes tabelas onde ficaria difícil 
localizar determinado elemento de forma rápida. Imagine um vetor que possua 4.000 
elementos (4.000 nomes de pessoas). Em geral usa-se o método seqüencial para efetuar a 
operação de busca em um vetor. 
 [1] [3] [3] [4] [5] [6] [7] 
-5 -1 1 8 10 15 34 
2ª Unidade 
 
 
22
 Este método consiste em efetuar a busca de uma informação desejada a partir do 
primeiro elemento seqüencial até o último. Tal método de pesquisa é considerado lento, 
porém eficiente nos casos em que um vetor encontra-se com seus elementos desordenados. 
 
Exemplo: 
 Programa Pesquisa_Seqüencial; 
 var 
 nome: vetor [1..10] de caractere[30]; 
 I: inteiro; 
 resp: caractere[3]; 
 pesq: caractere[30]; 
 acha: lógico; 
 
 inicio 
 para I de 1 até 10 faça 
 leia (nome[I]); 
 fim_para 
 
 resp ← “SIM”; 
 
 // inicio da rotina de pesquisa 
 enquanto (resp = “SIM”) faça 
 inicio 
 escreva (“Entre nome a ser pesquisado.: “) 
 leia (pesq); 
 I ← 1; 
 acha ← falso; 
 enquanto (I <= 10) .e. (acha = falso) faça 
 se (pesq = nome[I]) então 
 acha ← verdadeiro; 
 senão 
 I ← I + 1; 
 fim_se; 
 fim_enquanto; 
 
 se (acha = verdadeiro) então 
 escreva (pesq, “ foi encontrado na 
 posição “, I); 
 senão 
 escreva (pesq, “ não foi encontrado “); 
 fim_se; 
 
 // fim da rotina de pesquisa 
 escreva (“Deseja continuar ?”); 
 leia (resp); 
 fim 
 fim_enquanto; 
 fim. 
 
 
2ª Unidade 
 
 
23
Lista de Exercício II 
 
 
Vetor: 
1. Escreva um algoritmo que leia um vetor de 50 posições de números inteiros e mostre 
somente os positivos. 
 
 
2. Escreva um algoritmo que leia os nomes e salários dos 150 funcionários de uma empresa 
e armazene-os em vetores. A seguir, ler o nome de uma pessoa e verificar se ela é 
funcionária da empresa. Se for, então deve ser informado seu salário. 
 
 
3. Escreva um algoritmo para armazenar 15 valores inteiros e distintos em um vetor. Após, 
encontrar o menor valor contido no vetor e sua posição. 
 
 
4. Escreva um algoritmo que leia um vetor inteiro de 20 posições. Crie um segundo vetor e 
copie todo o conteúdo dos elementos do 1° para o 2° vetor. Porém, todo o conteúdo do 1° 
vetor que for negativo, deve ser transformado em 0. Imprima ambos os vetores. 
 
 
5. Escreva um algoritmo que permita a digitação de 30 nomes em um vetor de string. A 
seguir imprima os elementos desse vetor da metade para o fim e da metade para o início. 
 
 
6. Escreva um algoritmo que permita a digitação de 20 nomes em um vetor de string. A 
seguir, faça a pesquisa de um determinado nome testando se esse nome existe. Se existir, 
mostre qual seu índice. 
 
 
7. Escreva um algoritmo que faça a multiplicação dos conteúdos de dois vetores inteiros 
(números positivos e negativos). Atribua o resultado desta multiplicação a um terceiro vetor 
e faça a impressão do mesmo. 
 
 
8. Escreva um algoritmo que permita a digitação de 50 valores inteiros (positivos e 
negativos) em um vetor. A seguir imprima o vetor com o resumo de quantos números 
negativos e quantos números positivos pares e ímpares foram digitados. 
 
 
 
 
 
 
 
2ª Unidade 
 
 
24
18. MATRIZES BIDIMENSIONAIS 
Matrizes bidimensionais são utilizadas freqüentemente para representar tabelas de valores 
consistindo em informações organizadas em linhas e colunas. Para identificar um elemento 
específico de tabela, deve-se especificar os dois índices. Por convenção, o primeiro índice 
identifica a linha, enquanto o segundo identifica a coluna do elemento. 
 
Exemplo: 
 coluna 1 coluna 2 coluna 3 coluna 4 
linha 1 A [1] [1] A [1] [2] A [1] [3] A [1] [4] 
linha 2 A [2] [1] A [2] [2] A [2] [3] A [2] [4] 
linha 3 A [3] [1] A [3] [2] A [3] [3] A [3] [4] 
 
 Observe que estudaremos apenas as matrizes bidimensionais. Porém, a literatura 
trata também de multidimensionais, que são aquelas que possuem mais de dois índices. 
 
18.1 OPERAÇÕES BÁSICAS COM MATRIZES DE DUAS DIMENSÕES 
Uma matriz de duas dimensões estará sempre fazendo menção a linhas e colunas e será 
representada por seu nome e seu tamanho (dimensão) entre colchetes, desta forma seria 
uma matriz de duas dimensões TABELA [1..3, 1..4], onde seu nome é TABELA, 
possuindo um tamanho de 3 linhas e 4 colunas, ou seja, é uma matriz 3 por 4 (3 x 4). Isto 
significa dizer que poderão ser armazenados 12 elementos (veja tabela acima). 
 
Atribuição: 
 Notas[I, J] ← 8.5; 
 Nomes[I, J] ← ‘JOSÉ DA SILVA’; 
 
Leitura: 
 Leia (Notas[I, J]); 
 Leia (Nomes[I, J]); 
 
Impressão: 
 Escreva (Notas[I, J]); 
 Escreva (Nomes[I, J]); 
 
Exemplo: 
 Programa Ler_Notas; 
 var 
 notas: vetor [1..8, 1..4] de real; 
 I, J: inteiro; 
 
 inicio 
 // Rotina de leitura. 
 paraI de 1 até 8 faça 
 para J de 1 até 4 faça 
 leia (notas [I, J]); 
 fim_para; 
2ª Unidade 
 
 
25
 fim_para; 
 // Rotina de impressão. 
 para I de 1 até 8 faça 
 para J de 1 até 4 faça 
 escreva (notas [I, J]); 
 fim_para; 
 fim_para; 
 fim. 
 
18.2 OPERAÇÕES BÁSICAS COM MATRIZES 
Não há muita diferença entre manipular valores inteiros/reais em vetores e matrizes. Os 
valores são guardados em células/elementos da mesma forma. Que muda na verdade é a 
forma de endereçar esses elementos. 
 
Por exemplo: 
Vetor[4] → seria o quarto elemento do vetor. 
 Matriz[2, 1] → seria o quarto elemento da matriz. 
 
 Então como fazer para copiar todos os valores contidos nos elementos de uma 
matriz 3x3 para um vetor de 9 elementos? 
 
 
Outros Exemplos: 
Dado uma matriz A, imprimir os elementos em uma ordem inversa: 
 
 
 
 
 
 
 
Dado uma matriz 3x3 com os seguintes valores, imprimir somente a diagonal principal: 
 
 
 
 
 
 
Ou, somente a diagonal secundária: 
 
 
 
 
 
 
 
Matriz A
1 2 3 
4 5 6 
7 8 9 
Matriz B
9 8 7 
6 5 4 
3 2 1 
-4 50 25 
 
 1 21 3 
 
99 -7 48 
-4 50 25 
 
 1 21 3 
 
99 -7 48 
-4 50 25 
 
 1 21 3 
 
99 -7 48 
-4 50 25 
 
 1 21 3 
 
99 -7 48 
2ª Unidade 
 
 
26
19. REGISTRO 
É uma estrutura de dados que trabalha com vários dados de tipos diferentes (os campos) em 
uma mesma estrutura. Por isso, este tipo de dado é considerado heterogêneo. Até então se 
trabalhou com dados do mesmo tipo, ou seja, com tipos de dados homogêneos. 
 
 Todo registro é formado por campos. Por exemplo, imagine um cadastro pessoal 
onde você tem nome, endereço, bairro, cep, estado civil, etc. Estes itens formam os 
campos de um registro. 
 
19.1 DECLARAÇÃO DE REGISTRO 
Para se declarar um tipo registro usa-se a instrução tipo em conjunto com a instrução 
registro ... fim_registro, conforme sintaxe indicada abaixo. 
 
Sintaxe: 
 tipo 
 <identificador> = registro 
 <lista dos campos e seus tipos> 
 fim_registro 
 
 var 
 <variáveis> : <identificadores> 
 
 Tomando como exemplo a proposta de se criar um registro denominado Aluno, 
cujos compôs são Nome, Nota1, Nota2, Nota3 E Nota4, este seria assim declarado: 
 
 tipo 
 CAD_ALUNO = registro 
 NOME : caractere[35]; 
 NOTA1 : real; 
 NOTA2 : real; 
 NOTA3 : real; 
 NOTA4 : real; 
 fim_registro; 
 
 var 
 Aluno : Cad_Aluno; 
 
 Observe que é especificado um registro denominado CAD_ALUNO, o qual é um 
conjunto de dados heterogêneos (um campo tipo caractere e quatro do tipo real). Desta 
forma é possível guardar em uma mesma estrutura vários tipos diferentes de dados. 
 
19.3 LEITURA DE REGISTROS 
A leitura de um registro é feita da mesma forma de uma variável comum, usa-se a instrução 
leia seguida do nome da variável registro e seu campo correspondente separado por um 
caractere “.” ponto. 
 
2ª Unidade 
 
 
27
Exemplo: 
 Programa Leitura; 
 
 tipo 
 CAD_ALUNO = registro 
 Nome : caractere[35]; 
 Nota1 : real; 
 Nota2 : real; 
 Nota3 : real; 
 Nota4 : real; 
 fim_registro; 
 
 var 
 Aluno : Cad_Aluno; 
 
 inicio 
 leia (Aluno.Nome); 
 leia (Aluno.Nota1); 
 leia (Aluno.Nota2); 
 leia (Aluno.Nota3); 
 leia (Aluno.Nota4); 
 fim. 
 
 Uma leitura de registros também pode ser feita como leia ALUNO. Neste caso, 
estaria sendo feita uma leitura do tipo genérica, onde todos os campos estariam sendo 
referenciados implicitamente. A forma explicita apresentada acima é mais legível, uma vez 
que se faz referência a um campo específico. 
 
19.4 ESCRITA DE REGISTROS 
O processo de escrita de um registro também se parece bastante com a escrita de uma 
variável comum, usa-se a instrução escreva de forma semelhante ao processo de leitura. 
Assim sendo, observe o código abaixo: 
 
Exemplo: 
 Programa Escrita; 
 
 tipo 
 CAD_ALUNO = registro 
 Nome : caractere[35]; 
 Nota1 : real; 
 Nota2 : real; 
 Nota3 : real; 
 Nota4 : real; 
 fim_registro; 
 
 var 
 Aluno : Cad_Aluno; 
 inicio 
2ª Unidade 
 
 
28
 Escreva (Aluno.Nome); 
 Escreva (Aluno.Nota1); 
 Escreva (Aluno.Nota2); 
 Escreva (Aluno.Nota3); 
 Escreva (Aluno.Nota4); 
 fim. 
 
19.5 ESTRUTURA DE UM REGISTRO DE CONJUNTOS (VETORES) 
Como o nome indica, é possível definir um vetor ou mesmo uma matriz dentro de um 
registro. Considere ainda o exemplo do registro Aluno, onde temos o campo Nome tipo 
caractere[35] e mais quatro notas sendo, Nota1, Nota2, Nota3 e Nota4 tipo real. Neste caso, 
um campo Nota poderá ser digitado 4 vezes, ao invés de termos a digitação de 4 campos 
diferentes. 
 
 Para esclarecer o que foi dito acima, veja a seguinte declaração: 
 
Exemplo01: 
 tipo 
 Bimestre = vetor [1..4] de Real; 
 Cad_Aluno = registro 
 Nome : Caractere[35]; 
 Nota : Bimestre; 
 fim_registro; 
 
 Observe que ao ser especificado o registro Cad_Aluno, existe nele um campo 
chamado Nota do tipo Bimestre, onde Bimestre é a especificação de um tipo de vetor com a 
capacidade para quatro elementos. 
 
 Também poderíamos ter a mesma estrutura escrita de outra froma, seja o exemplo 
abaixo: 
 
Exemplo02: 
 tipo 
 Cad_Aluno = registro 
 Nome : Caractere[35]; 
 Nota : vetor[1..4] de Real; 
 fim_registro; 
 
 A leitura de um registro de conjunto é efetuada com a utilização da instrução leia, 
geralmente dentro de uma estrutura de repetição. Veja o exemplo abaixo para um melhor 
entendimento do assunto abordado. 
 
Exemplo: 
 Programa Leitura; 
 tipo 
 Bimestre = vetor [1..4] de Real; 
2ª Unidade 
 
 
29
 Cad_Aluno = registro 
 Nome : Caractere[35]; 
 Nota : Bimestre; 
 fim_registro; 
 
 var 
 Aluno: Cad_Aluno; 
 I: inteiro; 
 
 inicio 
 Leia (Aluno.Nome); 
 para I de 1 até 4 passo 1 faça 
 Leia (Aluno.Nota[I]); 
 fim_para; 
 fim. 
 
 O processo de escrita de um registro de conjunto segue os mesmos padrões usados 
acima. Veja exemplo abaixo: 
 
Exemplo: 
 inicio 
 Escreva (Aluno.Nome); 
 para I de 1 até 4 passo 1 faça 
 Escreva (Aluno.Nota[I]); 
 fim_para; 
 fim. 
 
19.6 ESTRUTURA DE UM CONJUNTO DE REGISTROS 
Até agora, toda a teoria vista se refere à manipulação de leitura e escrita de um único 
registro. Por isso, há a necessidade de se criar mecanismos que podem manipular vários 
registros ao mesmo tempo. O primeiro deles, refere-se à implementação de Vetores ou 
conjuntos de registros. O segundo, e mais complexo corresponde à leitura e gravação física 
dos registros, que compõe um arquivo físico. Este último será estudado mais à frente. 
 Para se declarar um conjunto de registros é necessário em primeiro lugar, possuir a 
definição de um registro, ou seja, é necessário ter o formato de um único registro para então 
definir o número de registros que serão manipulados pelo algoritmo ou programa. 
 Veja a seguir a definição do tipo registro e também a definição do conjunto de 
registros para oito alunos: 
 
Exemplo: 
 tipo 
 Bimestre = vetor [1..4] de Real; 
 Cad_Aluno = registro 
 Nome : Caractere[35]; 
 Nota : Bimestre; 
 fim_registro; 
 
2ª Unidade 
 
 
30
 var 
 Aluno: Vetor [1..8] de Cad_Aluno; 
 
 A leitura será feita de forma semelhante as anteriores. No entanto, serão utilizadas 
duas estruturas de repetição, pois além de controlar a entrada das quatro notas de cada 
aluno, tem-se que controlar a entrada de oito alunos. Assim sendo, observe o código 
(algoritmo) abaixo: 
 
 Programa Leitura; 
 tipo 
 Bimestre = vetor [1..4] de Real; 
 Cad_Aluno = registro 
 Nome : Caractere[35]; 
 Nota : Bimestre; 
 fim_registro; 
 
 var 
 Aluno: Vetor [1..8] de Cad_Aluno; 
 I, J: inteiro 
 
 inicio 
 para J de 1 até 8 passo 1 faça 
 início 
 Leia (Aluno[J].Nome); 
 para I de 1 até 4 passo 1 faça 
 leia (Aluno[J].Nota[I]); 
 fim_para; 
 fim 
 fim_para; 
 fim. 
 
 O processo de escrita não difere muito do processo de leitura. Veja abaixo somente 
a parte que trata da escrita. 
 
Exemplo:inicio 
 para J de 1 até 8 passo 1 faça 
 início 
 Escreva (Aluno[J].Nome); 
 para I de 1 até 4 passo 1 faça 
 Escreva (Aluno[J].Nota[I]); 
 fim_para; 
 fim 
 fim_para; 
 fim. 
 
 
2ª Unidade 
 
 
31
19.7 ESTRUTURAS DE REGISTROS DE UM ARQUIVO 
Como mencionado na seção anterior, uma estrutura de registros faz parte de um arquivo, 
que é gravado fisicamente em disco. Os registros também são constituídos de campos. Ou 
seja, toda a estrutura não difere em nada das estruturas estudadas até aqui. 
 Para manipular vários registros, precisa-se de uma estrutura de repetição (loop) que 
controle a quantidade dos mesmos. A seguir, usa-se um comando que nomeia o arquivo e 
outro que o deixa pronto para ser gravado fisicamente em disco. 
 O código a seguir mostra os passos necessários para a manipulação e gravação de 
um arquivo composto por vários registros. 
 
Exemplo: 
Programa Formulario_Inclusao; 
tipo 
 Cad_Pessoa = registro 
 Matricula: caractere[5]; 
 Nome: caractere[35]; 
 Sexo: caractere; 
 fim_registro; 
 
 Pasta = Arquivo de Cad_Pessoa; 
 var 
 Reg : Cad_Pessoa; 
 Pessoal : Pasta; 
 
 inicio 
 Abre(Pessoal; 
 Leia (Reg.Matricula); 
 Leia (Reg.Nome); 
 Leia (Reg.Sexo); 
 enquanto (Reg.Matricula <> '0') faça 
 inicio 
 Grava (Pessoal, Reg); 
 Leia (Reg.Matricula); 
 Leia (Reg.Nome); 
 Leia (Reg.Sexo); 
 fim 
 fim_enquanto; 
 Fechar (Pessoal); 
 fim. 
 
 Bem, a rotina de consulta dos dados já gravados em disco, poderia ser 
implementada da seguinte forma: 
 
Programa Formulario_Consulta; 
tipo 
 Cad_Pessoa = registro 
 Matricula: caractere[5]; 
2ª Unidade 
 
 
32
 Nome: caractere[35]; 
 Sexo: caractere; 
 fim_registro; 
 
 Pasta = Arquivo de Cad_Pessoa; 
 var 
 Reg : Cad_Pessoa; 
 Pessoal : Pasta; 
 
inicio 
 Abra (Pessoal); 
 // Lê o primeiro registro do arquivo. 
 Leia (Pessoal, Reg); 
 
 // Escreve na tela o primeiro registro. 
 Escreva ('Matricula.: ',Reg.Matricula); 
 Escreva ('Nome......: ',Reg.Nome); 
 Escreva ('Sexo......: ',Reg.Sexo); 
 
 //Rotina que irá ler os registros seguintes 
 enquanto (não fda (Pessoal)) faça 
 inicio 
 Leia (Pessoal, Reg); 
 Escreva ('Matricula.: ',Reg.Matricula); 
 Escreva ('Nome......: ',Reg.Nome); 
 Escreva ('Sexo......: ',Reg.Sexo); 
 fim 
 fim_enquanto; 
 Fecha (Pessoal); 
fim. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2ª Unidade 
 
 
33
Lista de Exercício II 
 
 
Matrizes: 
1. Escreva um algoritmo que armazene quaisquer valores inteiros em uma matriz 3x4, e 
imprima todo o conteúdo da referida matriz. 
 
 
 
2. Dada uma determinada matriz 4x4: 
 
 
 
 
 
 
 
 
3. Dada a seguinte matriz [3 x 3]: 
 
 
 
 
 
 
 
 
 
 
4. Escreva um programa que carregue uma matriz [4][4] e imprima somente sua diagonal 
principal. 
 
 
5. Escreva um programa que carregue uma matriz [4][4] e imprima somente os elementos 
que estiverem acima da diagonal principal. 
 
 
Registros: 
1. Dada a seguinte estrutura de um registro: 
 
 tipo 
 Cad_Aluno = registro 
 Caractere: Nome; 
 Real: Nota[1..4]; 
 fim_registro 
 var 
 Cad_Aluno[1..20]: Aluno; 
-4 50 25 
 
 1 21 3 
 
99 -7 48 
-4 50 25 -1 
 
 1 21 3 10 
 
99 -7 48 -6 
 
 0 15 -9 0
Escreva um algoritmo que imprima somente os 
valores positivos armazenados nela. Observe que a 
rotina de inclusão de valores deve também ser 
feita. 
 
Escreva um algoritmo que permita a escolha e 
alteração de um determinado elemento da referida 
matriz através da seleção de uma linha por uma 
coluna. 
2ª Unidade 
 
 
34
 
Escreva um programa que leia e imprima os dados de 20 alunos conforme estrutura acima 
descrita. 
 
 
2. Escreva um algoritmo que leia e imprima os dados dos 100 funcionários de uma 
empresa. Os dados são: Matrícula (numérica), Nome (caractere), Telefone (caractere) e 
CPF (numérica). 
 
 
3. Escreva um algoritmo que cadastre os 20 funcionários de uma pequena empresa. Os 
dados são: Nome(caractere), Sexo (caractere), CPF(numérico) e Matrícula (caractere). A 
matrícula do funcionário será formada pela letra referente ao sexo, seguida do ano e mais 
uma letra do alfabeto que dependerá da ordem de cadastramento. Exemplo, a primeira 
pessoa do sexo femenino terá uma matrícula igual a “F2003A”, e assim por diante. 
 
 
 
 
 
 
 
 
 
3ª Unidade 
 
 
35
20. PROGRAMAÇÃO MODULAR 
O objetivo de estudo, a partir de agora será a aplicação de sub-rotinas em algoritmos, 
também conhecidas pela denominação de módulos ou sub-algoritmos. 
No geral, problemas complexos exigem algoritmos complexos. Mas sempre é 
possível dividir um problema grande em problemas menores. Desta forma, cada parte 
menor tem um algoritmo mais simples, e é este trecho que é chamada de sub-rotina. Uma 
sub-rotina é na verdade um programa, e sendo um programa poderá efetuar diversas 
operações computacionais (entrada, processamento e saída). As sub-rotinas são utilizadas 
na divisão de algoritmos complexos, permitindo assim a modularização de um determinado 
problema, considerado grande e de difícil solução. 
Basicamente, há dois tipos de sub-rotinas, sendo que há algumas diferenças entre 
elas. O primeiro tipo é conhecido como procedimento, e o segundo é chamado de função. 
 
20.1 DECLARAÇÃO: 
Para modularizar um algoritmo, necessita-se de uma sintaxe para expressar essa nova 
estrutura compreendida por módulos. De certo modo, precisamos uniformizar determinado 
conjunto de ações afins, que obedeçam à mesma estruturação de um algoritmo, com o 
objetivo de representar um bloco lógico em especial. Para delimitar uma sub-rotina, 
utilizaremos o seguinte: 
 
Sintaxe: 
 Sub-rotina <nome da sub-rotina>; 
 var 
 <lista de variáveis> 
 início 
 <instruções>; 
 fim. 
 
A melhor maneira de se entender como trabalhar com uma sub-rotinas é fazer a sua 
aplicação em um programa mais complexo. Para tanto, imagine o seguinte problema: 
 
Criar um programa que apresente um menu de 3 opções: 
1. Adição; 
2. Subtração; 
3. Fim do Programa. 
 
 
Programa Exemplo Sub-Rotina; 
var 
 Opção: caractere; 
 
// Sub-rotina que efetua a adição entre dois números. 
Sub-rotina Faz_Adição; 
var 
 Num1, Num2: Real; 
3ª Unidade 
 
 
36
 
início 
 Escreva (‘Rotina de Soma’); 
 Escreva (‘Entre com o 1° Número’); 
 Leia (Num1); 
 Escreva (‘Entre com o 2° Número’); 
 Leia (Num2); 
 Escreva (‘A soma de ‘, Num1,’ + ‘, Num2, ‘é = ‘, 
Num1+Num2); 
fim. 
 
 // Sub-rotina que efetua a subtração entre dois números. 
Sub-rotina Faz_Subtração; 
var 
 Num1, Num2: Real; 
início 
 Escreva (‘Rotina de Subtração’); 
 Escreva (‘Entre com o 1° Número’); 
 Leia (Num1); 
 Escreva (‘Entre com o 2° Número’); 
 Leia (Num2); 
 Escreva (‘A subtração de ‘, Num1,’ – ‘, Num2, ‘é = 
‘, Num1-Num2); 
 fim. 
 
 // Programa Principal. 
 início 
 Opção ← ‘0’; 
 
 Enquanto (Opção <> ‘3’) faça 
 Escreva (‘1 – Adição’); 
 Escreva (‘2 – Subtração’); 
 Escreva (‘3 – Fim do Programa”) 
 Escreva (‘Escolha uma Opção.:’); 
 Leia (Opção); 
 
 se (Opção = ‘1’) então 
 Faz_Adição; 
 fim se; 
 
 se (Opção = ‘2’) então 
 Faz_Subtração; 
 fim se 
 fim enquanto; 
 fim. 
 
3ª Unidade 
 
 
37
O programa anterior apresenta a aplicação da técnica de programação estruturada, 
permitindo assim construir programas mais elaborados. Porém, no tocante a seleção de sub-
rotinas, a instrução se não constitui a melhor opção. Uma opção de seleção mais eficiente 
seria a instrução escolha... fim_escolha, que possuía a seguinte estrutura: 
 
Sintaxe: 
 escolha x 
 caso 1: 
 ação1; 
 caso 2: 
 ação2; 
 caso 3: 
 ação3; 
 caso 4: 
 ação4; 
 fim escolha; 
 
Então, o código do exemplo acima ficaria da seguinte forma: 
 início 
 opção ← ‘0’; 
 enquanto (Opção <> ‘3’) faça 
 escreva (‘1 – Adição’);escreva (‘2 – Subtração’); 
 escreva (‘3 – Fim do Programa’); 
 escreva (‘Escolha uma Opção.:’); 
 leia (Opção); 
 
 escolha opção 
 caso ‘1’: Faz_Adição; 
 caso ‘2’: Faz_Subtração; 
 caso contrário: escreva (‘opção 
inválida’); 
 fim escolha; 
 fim enquanto; 
 fim. 
 
20.2 VARIÁVEIS GLOBAIS E LOCAIS: 
No exemplo usado anteriormente, foram utilizadas variáveis dentro das sub-rotinas (A, B e 
R, respectivamente), e também fora delas (opcao). Isto ilustra os tipos de variáveis que 
podem ser utilizadas em um programa. As variáveis são dividas em dois grupos distintos: 
as Globais e as Locais. 
Uma variável é considerada Global quando é declarada no início do algoritmo 
principal de um programa, podendo ser utilizada por qualquer sub-rotina subordinada ao 
algoritmo principal. Assim sendo, este tipo de variável passa a ser visível a todas as sub-
rotinas hierarquicamente subordinadas à rotina principal. 
3ª Unidade 
 
 
38
Uma variável é considerada Local quando é declarada dentro de uma sub-rotina e é 
somente válida dentro da rotina à qual está declarada. Desta forma, as demais sub-rotinas e 
programa principal não poderão fazer uso de uma variável local, pois não podem visualizar 
a mesma. 
 
Exemplo: 
 Programa Troca_Valores_Exemplo01; 
 var 
 X, A, B: inteiro; 
 início 
 leia (A, B); 
 X ← A; 
 A ← B; 
 B ← X; 
 escreva (A, B) 
 fim. 
 
 
 Programa Troca_Valores_Exemplo02; 
 var 
 A, B: inteiro; 
Sub-rotina Troca; 
var 
 X: inteiro; 
início 
 X ← A; 
 A ← B; 
 B ← X; 
 fim. 
 
 início 
 leia (A, B); 
 Troca; 
 escreva (A, B); 
 fim. 
 
Observe que apesar do segundo exemplo ser um pouco maior que o primeiro, ele 
possibilita uma economia de espaço em memória, bastante interessante, pois o espaço a seu 
utilizado pela variável X é somente solicitado quando a sub-rotina TROCA é executada. 
Terminada a execução, a variável X é desconsiderada, ficando em uso somente os espaços 
reservados para as variáveis globais A e B. 
 
20.3 PARÂMETROS FORMAIS E REAIS: 
Parâmetros são considerados elos de ligação entre uma sub-rotina e o programa principal. 
Usando parâmetros é possível passar valores de uma sub-rotina ou rotina chamadora à outra 
sub-rotina e vice-versa. 
3ª Unidade 
 
 
39
 
São considerados parâmetros Formais quando forem declarados através de 
variáveis juntamente com a identificação do nome da sub-rotina. Estes serão tratados 
exatamente da mesma forma que são tratadas as variáveis globais e locais. 
 
Exemplo: 
 Sub-rotina CalcSoma(A,B: Inteiro); 
 var 
 Z : Inteiro; 
 início 
 Z ← A + B; 
 escreva (Z); 
 fim 
 
Observe que a variável Z é uma variável local e está sendo usada para armazenar a 
soma das variáveis A e B que representam os parâmetros formais da sub-rotina CalcSoma. 
Serão considerados parâmetros Reais quando estes substituírem os parâmetros 
formais, quando da utilização da sub-rotina por um programa principal ou por uma rotina 
chamadora. 
 
Exemplo: 
 início 
 leia (X); 
 leia (Y); 
 CalcSoma(X, Y); 
 
 leia (W); 
 leia (T); 
 CalcSoma(W, T); 
 CalcSoma(8, 2); 
 fim. 
 
No trecho acima, toda vez que a sub-rotina CalcSoma é chamada, faz-se uso de 
parâmetros reais. Desta forma, são parâmetros reais as variáveis X, Y, W e T, pois são 
fornecidos seus valores pela instrução leia e também os valores 8 e 2. 
 
20.4 PASSAGEM DE PARÂMETROS: 
A passagem de parâmetro ocorre quando é feita a substituição dos parâmetros formais pelos 
reais no momento da execução da sub-rotina. Estes parâmetros podem ser passados por 
Valor: 
 
" A passagem de parâmetro por valor caracteriza-se pela não alteração do valor do 
parâmetro real quando o parâmetro formal é manipulado dentro da sub-rotina. 
Assim sendo, o valor passado pelo parâmetro real é copiado para o parâmetro 
formal, que no caso assume o papel de variável local da sub-rotina. Desta forma, 
3ª Unidade 
 
 
40
qualquer modificação que ocorra na variável local da sub-rotina não afetará o valor 
do parâmetro real correspondente. 
 
Exemplo: 
 Programa Calc_Fatorial; 
 
 // início da sub-rotina 
 Sub- rotina(N: inteiro); 
 var 
 I, FAT : inteiro; 
 inicio 
 FAT ← 1; 
 para I de 1 até N passo 1 faça 
 FAT ← FAT * I; 
 fim_para; 
 escreva (FAT) 
 fim. 
 
 // início do programa 
 var 
 limite : Inteiro; 
 início 
 Escreva (‘Qual Fatorial: ‘); 
 Leia (limite); 
 Fatorial (limite); 
 fim. 
 
No exemplo acima, é indicado o uso da passagem de parâmetro por valor, no caso, a 
variável N é o parâmetro formal, que receberá o valor fornecido à variável limite, através 
da sub-rotina Fatorial. Este valor estabelece o número de vezes que o looping deve ser 
executado. Dentro do procedimento é encontrada a variável FAT que irá desempenhar um 
tipo de acumulador, tendo ao final do looping o valor do fatorial referente ao valor 
informado para o parâmetro N. 
 
Exercício: 
1. Escreva uma sub-rotina de ordenação para um algoritmo que carregue um vetor de 10 
elementos com valores inteiros. 
 
 
20.5 SUB-ROTINA: PROCEDIMENTO: 
Procedimento é um tipo de sub-rotina chamada pelo programa principal para desempenhar 
uma determinada ação específica. Por ser uma sub-rotina, o procedimento possui início e 
fim. No procedimento, parâmetros são passados, porém nenhum valor é retornado. 
 
Sintaxe: 
 Procedimento <nome do procedimento> (lista de parâmetros) 
3ª Unidade 
 
 
41
 var 
 <variáveis> 
 início 
 <instruções> 
 fim. 
 
Exemplo: 
 Programa Testa_Numeros; 
 
 // início do Procedimento 
 Procedimento Verifica(X: Inteiro); 
 inicio 
 se (X mod 2 = 0) então 
 Escreva (X, ‘ é par’); 
 senão 
 Escreva (X, ‘ é ímpar’); 
 fim_se; 
 fim. 
 
 // início do programa principal 
 var 
 N : Inteiro; 
 início 
 Escreva (‘Digite um Nº Qualquer: ‘); 
 Leia (N); 
 Enquanto (N > 0) faça 
 início 
 Verifica (N); 
 Escreva (‘Digite outro Nº ‘); 
 Leia (N); 
 fim 
 fim_enquanto; 
 fim. 
 
20.6 SUB-ROTINA: FUNÇÃO: 
Uma função também é um tipo de sub-rotina que contem início e fim, e sendo identificado 
por um nome, através do qual será referenciado em qualquer parte do programa principal. 
As características são semelhantes as do procedimento. 
 
Sintaxe: 
 função <nome da função> (parâmetros) : <tipo da função> 
 var 
 <variáveis> 
 início 
 <instruções> 
 fim. 
3ª Unidade 
 
 
42
Obs.: 
A principal diferença entre funções e procedimentos é que as funções retornam valores, 
enquanto que os procedimentos não. 
 
Exemplo: 
 Função Fatorial (N: inteiro) : inteiro; 
 var 
 I, FAT: inteiro; 
 início 
 FAT ← 1; 
 se (N = 0) então 
 FAT ← 1; 
 senão 
 início 
 para I de 1 até N faça 
 FAT ← FAT * I; 
 fim_para; 
 fim 
 fim_se; 
 FATORIAL ← FAT 
 fim. 
 
Observe que o nome da função, no caso Fatorial, é também o nome da variável 
interna que recebe o valor acumulado da variável FAT, caso o número fornecido para o 
parâmetro N não seja zero (0). Pois se for zero, o valor da função Fatorial é igualado a 1, 
que é o valor do fatorial de 0. Desta forma, uma função retorna um valor pelo seu próprio 
nome, pois é este nome, que é usado dentro do corpo da função para a recepção do valor 
calculado. 
Outro detalhe a ser considerado numa função além do seu nome ser usado como 
variável de retorno, é o fato da definição do seu tipo, no caso, função FATORIAL(N: 
inteiro) : inteiro, onde N está sendo considerado como inteiro dentro dos parênteses. Isto 
significa que o valor fornecido pelo parâmetro N é inteiro, porém existe uma segunda 
definição de tipo fora dos parênteses, que é o tipo de retorno da função. Desta forma entra 
um valor inteiro com o parâmetro N e sai um valor inteiro para Fatorial. Observe que 
poderá ocorrer o fato de se entrar um parâmetro de um tipo e retorna-lo como outro tipo. 
 
 
Exercícios: 
2. Escreva um algoritmo que contenha uma sub-rotina de procedimento, que esta receba 
dois valores reais, faça a multiplicação entre eles e escreva o resultado. 
 
3. Escreva um algoritmo que contenha uma sub-rotina defunção, e que esta receba dois 
valores reais e retorne o resultado da subtração entre eles. 
 
4. Escreva um algoritmo que contenha uma sub-rotina do tipo procedimento, e que esta 
sub-rotina receba vários números inteiros. O objetivo principal do procedimento é calcular 
3ª Unidade 
 
 
43
o quadrado de cada número passado como parâmetro. O programa principal se encerra 
quando o número 0 for digitado. 
 
5. Escreva um algoritmo que contenha uma sub-rotina do tipo função, e que esta sub-rotina 
receba vários números inteiros e retorne o cubo de cada número lido. O programa principal 
se encerra quando o número 0 for digitado. 
 
6. Escreva um algoritmo que calcule o mínimo múltiplo comum (MMC) entre dois 
números. Utilizar uma sub-rorina de procedimento que receba os valores, efetue o calculo 
do MMC. 
 
7. Escreva um algoritmo que calcule o máximo divisor comum (MDC) entre dois números. 
Utilizar uma sub-rorina de função que receba os valores, efetue o calculo do MDC e retorne 
o resultado. 
 
 
 
 
3ª Unidade 
 
 
44
Lista de Exercício III 
 
 
1. Escreva um algorítmo para calcular a Soma, Subtração, Divisão e Multiplicação de dois 
valores reais. Utilizar uma sub-rotina de procedimento que receba os valores, efetue as 
operações e imprima os resultados. 
 
2. Escreva um algoritmo que calcule o quadrado e o cubo de vários números digitado via 
teclado. Imprima os números e seus quadrados e cubos, respectivamente. Use uma rotina de 
função para resolver esse problema. Somente números inteiros e maiores que 1 serão 
permitidos. 
 
3. Escreva um algoritmo que calcule o fatorial de vários números. Só serão considerados 
válidos os números maiores que 1. Use uma sub-rotina de procedimento para resolver esse 
problema. 
 
4. Escreva um algoritmo que leia vários números e informe se eles são pares ou ímpares. O 
programa deve aceitar somente números maiores que zero (0). Use uma sub-rotina de 
função para desempenhar a avaliação dos números (se par ou ímpar). 
 
5. Escreva um algoritmo para calcular qualquer potência. Serão passados o expoente e a 
base para uma sub-rotina de função que retornará a potência. Ambos os valores da base e 
expoente devem ser inteiros e positivos. 
 
6. Escreva um algoritmo que tendo como dados de entrada a altura e o sexo de uma pessoa 
(‘M’ = masculino e ‘F’ = feminino), calcule seu peso ideal, utilizando as seguintes 
fórmulas: 
 para homens: (72.7 * altura) – 58; 
 para mulheres: (62.1 * altura) – 44.7; 
Utilize uma sub-rotina de função para resolver esse problema.

Continue navegando