Você está na página 1de 42

Algoritmos

Enviado por:
Jedean Carlos Bendlin

Apostila de
Lgica de Programao

PLANO DE ENSINO 1 SEMESTRE

EMENTA
Introduo a Algoritmos, Portugus Estruturado, Variveis e Operadores
Matemticos e Lgicos, Estrutura de um programa de computador, Procedimentos e
Funes, Tipos de dados.
OBJETIVO GERAL
Instruir os conceitos bsicos de algoritmos de programao, familiarizando os
acadmicos com os recursos computacionais na resoluo de problemas reais. Com a
utilizao de pseudocdigos ou portugus estruturado, aplicar tanto prtica como
teoricamente, as estruturas bsicas de programao de computadores. A aplicao da
ementa servir como manual introdutrio para as demais disciplinas que trataro de
anlise e desenvolvimento de sistemas computacionais.
OBJETIVOS ESPECFICOS
Incentivar os acadmicos a raciocinarem logicamente na resoluo dos
problemas propostos, utilizando, de forma adequada, os recursos da
linguagem de programao.
Propor aos acadmicos a tomada de iniciativa prpria, a criatividade e a
pesquisa, itens indispensveis para o desenvolvimento e capacitao
profissional na rea de sistemas de informao.
CONTEDO PROGRAMTICO
Contedo
1.INTRODUO
Conceito
Tipos de algoritmos
Descrio geral dos algoritmos
2. LGICA DE PROGRAMAO
Formas de representao grfica
Princpios de resoluo de problemas
Tipos de variveis
Uso de Constantes
Frmulas matemticas
Instrues bsicas
3. TOMADAS DE DECISO
Desvio condicional simples
Desvio condicional composto
Desvio condicional encadeados
Prtica com Linguagem Pascal
4.LAOS DE REPETIO
Looping com teste lgico no incio
Looping com teste lgico no fim
Looping com varivel de controle
Prtica com Linguagem Pascal
5. MATRIZES
Matrizes de uma dimenso ou vetores
Buscas e ordenao
Matrizes com mais de uma dimenso
Prtica com Linguagem Pascal

C.H.
8

10

18

20

16

METODOLOGIA DE ENSINO

O mtodo de ensino prope problemas com a finalidade de desafiar o estudante a


utilizar conhecimentos j adquiridos em busca de uma adaptao a uma situao nova. A
interveno do professor no sentido de pequenas ajudas, devoluo de questes,
evidenciar falhas e preparar para novas estratgias. As situaes didticas devem
favorecer o compartilhamento do conhecimento, a discusso e a ao por parte dos
estudantes. Tambm sero utilizados exemplos prticos e concretos em problemas
diversos.
ATIVIDADES DISCENTES

Os alunos devem desenvolver atividades relacionadas ao contedo que


simulam situaes reais no desenvolvimento de sistemas orientados a objetos.

Fazer a anlise de softwares utilizados em empresas com intuito de criar


idias e as por em prtica.

Desenvolver pesquisas bibliogrficas e on-line.

Desenvolver solues para problemas apresentados em aula, utilizando


conhecimentos adquiridos.
PROCEDIMENTOS DE AVALIAO
Avaliaes Bimestrais - As avaliaes sero de forma contnua pela participao
dos alunos nas atividades de classe, com peso de 30% da nota integral. Trabalhos feitos
no laboratrio e atividades extra classe, individualmente ou em grupo de estudos, com
peso de 10% da nota integral. Uma prova bimestral para reconhecimento da fixao do
contedo, com valor de 60% da nota integral.
BIBLIOGRAFIA BSICA
FORBELLONE, A. L. V. ; EBERSPACHER, H. F. Lgica de programao. 2.ed.
So Paulo: Makron Books, 2000. 3ex.
MANZANO, J.A.N.G. ; YAMATUMI, W. Y. Estudo dirigido de algoritmos. So
Paulo:rica, 1997. 3ex.
LOPES, Anita; GARCIA, Guto. Introduo a Programao 500 algoritmos
resolvidos. Rio de Janeiro: Campus, 2002. 3ex
WOOD, S. Turbo pascal: guia do usurio. So Paulo: Mcgraw-Hill do Brasil, 1987.
1ex.
BIBLIOGRAFIA COMPLEMENTAR
GOODRICH, M. ; TAMASSIA R. Estruturas de Dados e Algoritmos em Java. So
Paulo: Bookman, 2002. 6ex.
BEZERRA, Eduardo. Princpios de Anlise e Projeto de Sistemas Com UML. Rio
de Janeiro: Campus, 2003. 6ex.
WORTMAN, L. A. Programando em turbo pascal:com aplicaes. Rio de Janeiro:
Campus,
1988. 1ex.
LAURA, Lemay. Aprenda em 21 dias Java 2. So Paulo: Campus, 2003. 3 ex.
SANTOS, Rafael. Introduo Programao Orientada a Objetos Usando Java.
So Paulo: Campus, 2003. 3ex.
NIEMEYER, Patrick. Aprendento Java. So Paulo: Campus, 2000. 3ex

PLANO DE ENSINO 2 SEMESTRE

EMENTA
Lgica de programao avanada incluindo sub-rotinas, registros, eficincia e
correo. Anlise de algoritmos de programao estruturados. Aplicao em uma
linguagem de programao.
OBJETIVO GERAL
Desenvolver ao aluno habilidades tcnicas necessrias ao conhecimento de
teorias para composio de programas.
CONTEDO PROGRAMTICO
Contedo
1. Estruturas de dados

Matrizes unidimensionais e multidimensionais

Registros

Matrizes de registros e registros de matrizes

Armazenamento permanente de dados utilizando arquivos


2. Modularizao de programas

Procedimentos e funes

Passagem de parmetros

Units

Exerccios de programao
3. Anlise de Algoritmos

Busca

Mtodos de Ordenao
4. Utilizao de Arquivos e Noes de ndices

C.H.
30

26

12

METODOLOGIA DE ENSINO
O mtodo de ensino baseado na Teoria das Situaes de Guy Brousseau (1996.
Recherches en Didactique des Mathmatiques, vol.9, n.3) em que problemas so
propostos com a finalidade de desafiar o estudante a utilizar conhecimentos j adquiridos
em busca de uma adaptao a uma situao nova. A interveno do professor no
sentido de pequenas ajudas, devoluo de questes, evidenciar falhas e preparar para
novas estratgias. As situaes didticas devem favorecer o compartilhamento do
conhecimento, a discusso e a ao por parte dos estudantes. Tambm sero utilizados
materiais concretos em problemas diversos, proporcionando uma mudana de contrato
didtico.
ATIVIDADES DISCENTES

Os alunos devem desenvolver atividades relacionadas ao contedo que


simulam situaes reais no desenvolvimento de sistemas orientados a objetos.

Fazer a anlise de softwares utilizados em empresas com intuito de criar


idias e as por em prtica.

Desenvolver pesquisas bibliogrficas e on-line.

Desenvolver solues para problemas apresentados em aula, utilizando


conhecimentos adquiridos.
PROCEDIMENTOS DE AVALIAO
Avaliaes Bimestrais - As avaliaes sero de forma contnua pela participao
dos alunos nas atividades de classe, com peso de 30% da nota integral. Trabalhos feitos

no laboratrio e atividades extra classe, individualmente ou em grupo de estudos, com


peso de 10% da nota integral. Uma prova bimestral para reconhecimento da fixao do
contedo, com valor de 60% da nota integral.
BIBLIOGRAFIA BSICA
DEITEL, H. M. Java Como Programar 4 ed, Porto Alegre: Bookman, 2003. 6ex.
LOPES, Anita GARCIA Guto. Introduo a Programao- 500 algoritmos resolvidos. Rio
de Janeiro: Campus, 2002.
BIBLIOGRAFIA COMPLEMENTAR
LAURA, Lemay. Aprenda em 21 dias Java 2. So Paulo: Campus, 2003. 3 ex.
SANTOS, Rafael. Introduo Programao Orientada a Objetos Usando Java. So
Paulo: Campus, 2003. 3ex.
NIEMEYER, Patrick. Aprendento Java. So Paulo: Campus, 2000. 3ex

1 Introduo

Conceito de algoritmo
um processo de clculo matemtico ou de resoluo de um grupo de problemas
semelhantes, em que se estipulam, com generalidade e sem restries. Podemos dizer
tambm, que so regras formais para obteno de um resultado ou da soluo de um
problema, englobando frmulas de expresses aritmticas.
A tcnica mais importante no projeto da lgica de programas chamada
programao estruturada, a qual consiste em uma metodologia de projeto, objetivando:
Agilizar a codificao da escrita da programao;
Permitir a verificao de possveis falhas apresentadas pelos programas;
Facilitar as alteraes e atualizaes dos programas.

2 Lgica de Programao

Formas de representao grfica


So vrios os smbolos utilizados na programao estruturadas, a seguir, uma
relao das simbologias mais utilizadas:

Terminal: indica o incio ou o fim de um programa


Conector: serve para a unio dos fluxos de informaes

Entrada: indica a entrada de informaes passadas pelo usurio, seja


por scaner, teclado, mouse ou qualquer dispositivo de entrada

Processamento: utilizado para fazer clculos e atribuio de valores

Sada: indica a sada de informaes processadas para o usurio por


qualquer dispositivo de sada como monitor, impressora, etc.

Condio: indica a diviso do fluxo por uma determinada condio.


Seta de fluxo de informaes: indica o caminho que o processamento
pode tomar.

Princpios de resoluo de problemas


Para desenvolver um diagrama correto, devemos levar como procedimentos
prioritrios, os itens a seguir:
1 Os diagramas de blocos devem ser feitos e quebrados em vrios nveis. Os
primeiros devem conter apenas as idias gerais, deixando para as etapas posteriores os
detalhamentos necessrios;
2 Para o desenvolvimento correto de um diagrama de bloco, sempre que
possvel deve ser feito de cima para baixo e da esquerda para a direita;
3 incorreto ocorrer cruzamento das linhas de fluxo de dados de um diagrama
de bloco.
4 Transcrever o diagrama de bloco em pseudolinguagem
Tomemos como exemplo uma escola qualquer, onde o clculo da mdia
7

realizado por quatro notas bimestrais que determinam a aprovao ou reprovao dos
seus alunos. Considere ainda, que o valor da mdia deve ser maior ou igual a 7 para que
haja aprovao. A primeira etapa se inicia e termina com um terminador e existe apenas
um processamento que indica a idia geral do problema:

inc io

Calcular a
mdia e
determinar a
aprovao

fim

O segundo detalhamento est no que se refere a entrada e sada dos dados do


problema:

incio

Ent rada com 4


notas

Calcular a
mdia e
determinar a
apro vao

Apresentar se
houver ou no
apro vao

fim

A terceira etapa consiste em trabalhar o termo determinar a aprovao. Para ser


possvel determinar algo necessrio estabalecer uma condio. Esta condio decide
sobre o resultado da aprovao:

incio

Ent rada com 4


notas

Calcular a
mdia

N
Mdia>=7

" rep rovado"

"apr ovado"

fim

Esta terceira etapa deve ser aperfeioada para trabalhar com variveis.

incio

ler
N1,N2,N3,N4
Calc ular
M=N1+N2+N3+N4
4

N
M>=7

"rep rovado"

"aprovado"

fim

A Quarta fase consiste em escrever o diagrama de bloco de forma narrativa


denominada pseudocdigo.

Programa mdia
Var
Resultado : caractere
N1,n2,n3,n4,soma,media : real
Inicio
Leia(n1,n2,n3,n4)
Soma<-n1+n2+n3+n4
Media <-soma/4
Se (media >=7) ento
Resultado <-APROVADO
Seno
Resultado<- REPROVADO
Fim_se
Escreva(Resultado)
fim

Tipos de variveis
Tipos Inteiros: So tipos inteiros, os dados numricos positivos ou negativos,
excluindo-se, destes qualquer fracionrio. Como exemplo deste tipo de dado, tm-se os
valores : 35,0,-56;
Tipos Reais: So tipos reais, os dados numricos positivos, negativos e nmeros
fracionrios. Ex. : 35,0,-56,1.2,-45.897
Tipos Caracteres: So caracteres, as sequncias contendo letras, nmeros e
smbolos especiais. Uma sequncia de caractere deve ser indicada entre aspas(). Ex.:
PROGRAMAO,Rua Alfa, ,98.
Tipos Lgicos: So tipos lgicos ou boleanos, os dados com valores verdadeiro
ou falso, e deve ser escrito entre pontos. Ex.: .Falso.,.Verdadeiro..
O nome de uma varivel utilizado para sua identificao e posterior uso dentro
de um programa, sendo assim, necessrio estabelecer algumas regras de utilizao
das mesmas:

Nomes de variveis podero ser atribudos com um ou mais caracterres;


O primeiro caractere do nome de uma varivel no poder ser em hiptese
alguma, um nmero, sempre dever ser uma letra;
O nome de uma varivel no poder possuir espaos em branco;
No poder ser nome de uma varivel, uma instruo de programa;
No podero ser utilizados outros caracteres a no ser letras e nmeros.
Obs.: o caracter _ Under-line ou sub-linha considerado uma letra.

Uso de Constantes
Tem-se como definio de constante tudo aquilo que fixo ou estvel. E existiro
vrios momentos em que este conceito dever estar um uso. Por exemplo, o valor 1.23
da frmula a seguir uma constante: RESULTADO=ENTRADA*1.23.
Operadores aritmticos
Operador
+

Operao
Manuteno de sinal (nmeros
positivos

Prioridade Matemtica
1

10

Seta
cima

Inverso de sinal (nmeros


negativos)
para
Exponenciao

/
*
+
-

1
2

Diviso
Multiplicao
Adio
Subtrao

3
3
4
4

Frmulas matemticas
Na programao comum usar frmulas matemticas, mas para facilitar a escrita
da programao as frmulas so escritas de uma forma diferenciada, como mostrados
nos exemplos a seguir:
(Exemplificar a frmula do raio e da rea)

Instrues bsicas
Cada linguagem de programao usa um conjunto de palavras onde cada uma
desenvolve uma ao. Estas palavras reservadas de cada linguagem so conhecidas
como comandos ou instrues. Daqui para frente vamos utilizar instrues em portugus
estruturado, tais como : inicio, fim, var , programa, enquanto, se, ento, seno, para,
escreva, leia, faa, repita e at que, entre outras que sero estudadas.
Exemplo de algoritmo
Ler dois valores
Efetuar a soma destes valores
Apresentar o resultado

Exerccios
1 Indique o tipo de varivel que podero armazenar os valores abaixo.
I : inteiro;
R : real;
S : String ou Literal ou Caractere;
L : Lgico ou Booleano.
( )1000
( )-456
( )-1.56

( ) 0
( )34
( ).falso.

( ) -900
( )Casa 8
( )1.87

( ).Verdadeiro.
( )0
( ).F.

2 Assinale com X os nomes vlidos de uma varivel


( )Endereco
( )NomeUsuario

( )21brasil
( )Nome_usuario

( )Fone$com
( )Nome*usuario
11

( )End-A
( )23

( )Cidade3
( )N23

( )#Cabec

3 Desenvolva a lgica de um programa que efetue o clculo da rea de uma


circunferncia, apresentando a medida da rea calculada.
Frmula : Area=Pi*Raio**2
4 Elaborar um algoritmo que calcule o salrio de um professor onde o usurio
dever entrar com o nmero de aulas dadas, o valor da hora aula e o percentual de
desconto do INSS.
5 Ler dois valores A e B, efetuar a troca dos valores de forma que a varivel A
passe a possuir o valor da varivel B e que a varivel B passe a possuir o valor da
varivel A. Apresentar os valores trocados
6 Ler dois valores A e B, efetuar as operaes de adio, subtrao,
multiplicao e diviso de A por B, apresentando no final os quatro resultados obtidos.
7 Efetuar o clculo do valor de uma prestao em atraso, utilizando a frmula:
PRESTAO:=VALOR+(VALOR*(TAXA/100)*TEMPO).
8 Indique o tipo de varivel que podero armazenar os valores abaixo.
I : inteiro;
R : real;
S : String ou Literal ou Caractere;
L : Lgico ou
Booleano.
( )-900
( )4.54

( )0
( )34

( ) -900
( ).falso.

( ).Verdadeiro.
( )Real

9 Assinale com X os nomes vlidos de uma varivel


( ) Dia 21
( )x*y

( )7quedas
( )C/C
( )Senha_conta2 ( )Nome Cliente

10 Desenvolva um fluxograma com os 3 nveis de detalhamento e o portugues


estruturado de um programa que permita ao usurio digitar um nmero e que apresente
como resultado este nmero elevado ao quadrado.

12

3 Tomadas de Decises

Voc j aprendeu como trabalhar com entrada, processamento e sada. Apesar de


j conseguir solucionar problemas e transform-los em programas, os recusrsos aqui
estudados so limitados, pois haver momentos em que um determinado valor dentro de
um programa necessitar ser tratado para se efetuar um processamento mais adequado.
Desvio condicional simples
Para aprender-mos devio condicional devemos conhecer os operadores utilizados
para se estabelecer uma condio. So eles:
Operadores Relacionais
Simbolo

Significado
Igual a
Diferente de
Maior que
Menor que
Maior ou igual a
Menor ou igual a

=
<>
>
<
>=
<=
Operador Lgico .e.
Condio1
F
V
F
V

Condio 2
F
F
V
V

Resultado
F
F
F
V

Condio 2
F
F
V
V

Resultado
F
V
V
V

Operador Lgico .ou.


Condio1
F
V
F
V
Operador Lgico .no.
Condio
V
F

Resultado
F
V

Imagine a seguinte situao: um programa que apresente a mdia escolar de um


aluno. Baseado em sua mdia, se o aluno tiver nota maior ou igual a 7 devera apresentar
uma mensagem parabenizando o aluno.

13

Para solucionar o problema proposto ser necessrio trabalhar uma nova


instruo: SE...ENTO...FIM_SE. Esta instruo tem por finalidade tomar uma deciso.
Sendo a condio verdadeira, sero executadas todas as instrues que estejam entre a
instruo se...ento e a instruo fim_se.
Sintaxe :
SE <condio> ENTO
<instrues para condio verdadeira>
FIM_SE
<instrues executadas se a condio for falsa ou aps condio ser verdadeira>
Exemplo : elaborar um programa que pessa dois valores para as variveis A e B.
Efetuar a soma dos dois valores. Apresentar o resultado se a soma for maior que 10.

Desvio condicional composto


O desvio condicional composto utiliza a estrutura SE...ENTO...SENAO...FIM_SE,
como mostra a sintaxe :
SE <condio> ENTO
<instrues para condio verdadeira>
SENAO
<instrues para condio falsa>
FIM_SE
Exemplo : Ler dois valores A e B. Efetuar a soma dos dois valores e implicar em X.
Verificar se X maior ou igual a 10, caso sim, mostre X+5, seno, mostre X-7.

Exerccios :
1 Determine o resultado lgico das expresses abaixo baseado nos seguintes
valores: X=1, A=3,B=5,C=8 e D=7.
.no.(x>3)
(X<1).e..no.(b>d)
.no.(d<0).e.(c>5)
.no(x>3).ou.(c<7)
(a>b).ou.(c<=5)
(x>=2)
(x<1).e.(b>=d)
(d<0).ou.(c>5)
.no.(d>3).ou..no.(b<7)
(a>b).ou..no.(c>b)
2 Efetuar a leitura de dois valores e apresent-los em ordem crescente.

14

Desvio condicional encadeados


Sintaxe :
SE <condio> ENTO
SE <condio> ENTO
<instrues para condio verdadeira>
SENAO
<instrues para condio falsa>
FIM_SE
SENAO
SE <condio> ENTO
<instrues para condio verdadeira>
SENAO
<instrues para condio falsa>
FIM_SE
FIM_SE
Exemplo : Ler 4 notas escolares de um aluno. Se o a mdia do aluno for maior ou
igual a 7 apresentar a mdia e uma mensagem dizendo que foi aprovado, senao, efetuar
a leitura da nota do exame, somar mdia e dividir por dois, se a mdia for maior ou
igual a 5 apresentar a mdia e uma mensagem dizendo que est aprovado, senao
apresentar uma mensagem que est reprovado.
Exerccios:
1 Elaborar um programa que efetue o clculo do reajuste de salrio de um
funcionrio. Considere que o funcionrio dever receber um reajuste de 15% caso seu
salario seja menor que 500. Se o salario for maior ou igual a 500 mas n\menor ou igual a
1000, seu reajuste ser de 10%, e caso seja ainda maior que 1000, o reajuste dever ser
de 5%.
ler um valor para o salario
verificar se o valor de salario < 500; se sim, reajustar em 15%
verificar se o valor de salario <=1000; se sim, reajustar em 10%
verificar se o valor de salario > 1000; se sim, reajustar em 5%
apresentar o valor reajustado.
2 Efetuar a leitura de trs valores (a,b,c) apresent-los em ordem crescente.
3 Efetuar a leitura de trs valores (a,b,c) e efetuar o clculo da equao de
segundo grau, apresentando as duas razes, se para os valores informados for possvel
efetuar o referido clculo.
4 Ler dois valores numricos e apresentar a diferena do maior para o menor.
5 Efetuar a leitura de um nmero inteiro positivo ou negativo e apresent-lo como
sendo positivo.
6 Efetuar a leitura de 4 numeros inteiros e apresentar os que so divisiveis por 2
ou 3.

15

4 Laos de Repetio

Looping com teste lgico no incio


Este tipo de estrutura efetua um teste lgico no incio do looping, verificando se
permitido executar o trecho de intrues subordinado a este looping. Esta estrutura
conhecida
como:
enquanto,
atravs
do
conjunto
de
instrues
ENQUANTO...FAA...FIM_ENQUANTO.
Esta estrutura, tem o seu funcionamento controlado por deciso, podendo executar
um determinado conjunto de instrues enquanto a condio verificada for verdadeira. No
momento em que esta condio se torna falsa o processamento da rotina desviado
para fora do looping.
SINTAXE
ENQUANTO <condio> FAA
<conjunto de instrues para condio verdadeira>
FIM_ENQUANTO
Exemplo: Considere o problema: Pedir a leitura de um valor para a varivel x,
multiplicar este valor por 3, implicando-o varivel de resposta R e apresentar o valor R
obtido, repetindo esta seqncia por 5 vezes.
Passos:
 criar uma varivel para servir como contador com valor inicial 1;
 enquanto o valor do contador for < ou = a 5, processar os passos 3,4 e 5;
 Ler um valor para a varivel X;
 Efetuar a multiplicao do valor de x por 3, implicar o resultado em r;
 apresentar o valor calculado contido na varivel R;
 Acrescentar +1 varivel contador;
 Quando contador for maior que 5, encerrar o processamento do looping.
Sujesto: fazer o mesmo exerccio enquanto o usurio desejar.
Exerccio de aprendizagem
Elaborar o algoritmo de um programa que efetue o calculo da fatorial do nmero 5.
Fatorial o produto9 dos nmeros naturais desde 1 at o interiro n. Sendo assim o
clculo de um fatorial conseguido pela multiplicao sucessiva do nmero de termos.
Exemplo:
CONTADOR
1
2
3
4
5

FATORIAL
1
1
2
6
24

RESULTADO
1
2
6
24
120

Logo vemos que o fatorial de 5 120.


16

PROGRAMA FATORIAL
VAR contador, resultado: INTEIRO;
INICIO
Resultado<-1
Contador<-1
ENQUANTO contador<=5 FAA
Resultado<-resultado+contador
Contador<-contador+1
FIM_ENQUANTO
ESCREVA(O fatorial de 5 ,resultado)
FIM
Exerccios de Fixao:
1 - Apresentar todos os valores numricos interios mpares situados na faixa de 0 a
20.
2 - Apresentar o total da soma obtida dos cem primeiros nmeros inteiros.
3 - Apresentar os resutlados de uma tabuada de um nmero apresentado pelo
usurio. Todo o programa deve se repetir enquanto o usurio desejar.
4 - Apresentar os quadrados dos nmeros intereiros de 15 a 200
Looping com teste lgico no fim

Caracteriza-se por uma estrutura que efetua um teste lgico no fim de um looping,
denominada repita, sendo conseguida com a utilizao do conjunto de instrues
repita...at_que.
A estrutura repita...at_que tem o seu funcionamento controlado tambm por
deciso, porm ir efetuar a execuo de um conjunto de instrues pelo menos uma vez
antes de verificar a validade da condio estabelecida. Diferente da estrutura enquanto
que execugta somente um conjunto de instrues, enquanto a condio verdadeira.
Exemplo: "Pedir a leitura de um valor para a varivel X, multiplicar este valor por 3,
colocando o resultado em uma varivel R e apresentar o valor. Tudo isso dever ser
repetido por 5 vezes".
Criar uma varivel contador;
Ler um valor para a varivel X;
Efetuar a multiplicao do valor de X por 3, implicando o resultador em R;
Apresentar o valor calculado contido na varivel R;
Acrescentar 1 ao contador;
Repetir os passos 2,3,4 e 5 at que o contador seja maior que 5.

Exerccios:

17

a) Apresentar todos os valores numricos inteiros pares situados na faixa de 100 a


200.
b) Apresentar o total da soma obtido dos cinco primeiros nmeros inteiros.
c) Apresentar a tabuada de um nmero qualquer. Todo o programa deve se repetir
enquanto o usurio desejar.
d) Apresentar todos os nmeros divisveis por 4 que sejam menores que 20.
e) Apresentar os quadrados dos nmeros inteiros de 2 a 50.
f) Elaborar um programa que apresente no final, o somatrio dos valores pares
existentes na faixa de 10 at 20.

Looping com varivel de controle


Os loopings que possuem um nmero finito de execues podero ser
processados atravs de estrutura para, sendo conseguida com a utilizao das intrues
para...de...at...passo...faa...fim_para.
Esta estrutura tem o seu funcionamento controlado por uma varivel denominada
contador. Sendo assim, poder executar um determinado conjunto de instrues um
determinado nmero de vezes.
Sintaxe:
PARA <varivel> DE <incio> AT <fim> PASSO <incremento> FAA
<instrues>
FIM_PARA
Para exemplificar considere o problema anterior : "Pedir a leitura de um valor para
a varivel X, multiplicar este valor por 3, colocando o resultado em uma varivel R e
apresentar o valor. Tudo isso dever ser repetido por 5 veses".
Definir um contador variando de 1 a 5;
Ler um valor para a varivel X;
Efetuar a multiplicao do valor de X por 3, implicando o resultador em R;
Apresentar o valor calculado contido na varivel R;
Repetir os passos 2,3,4 e 5 at que o contador seja maior que 5.
Exerccios:
a) Apresentar todos os valores numricos inteiros mpares situados na faixa de
1000 a 1500.
b) Apresentar o total da soma obtido de N nmeros inteiros onde N um nmero
digitado pelo usurio.
c) Apresentar a tabuada de um nmero qualquer.
d) Apresentar os nmeros divisveis por 3 que sejam menores que 12.
e) Elaborar um programa que apresente no final, o somatrio dos valores pares
existentes na faixa de 10 at 20.

18

5 - Matrizes

As matrizes consistem em uma tcnica de programao que permite trabalhar com


o agrupamento de vrias informaes dentro de uma mesma varivel. Este agrupamento
ocorrer obedecendo sempre ao mesmo tipo de dado, e por esta razo chamado de
estruturas de dados homogneas ou matriz.

Matrizes de uma dimenso ou vetores


Este tipo de estrutura tambm denominado por alguns como matrizes
unidimensionais. Sua utilizao mais comum est vinculada creao de tabelas.
Caracteriza-se por ser definida uma nica varivel dimensionada com um determinado
tamanho. A dimenso de uma matriz constituda por constantes interias e positivas. Os
nomes dados s matrizes seguem as mesmas regras de nomes utilizados para indicar as
variveis simples.
Para se Ter uma idia de como utilizar matrizes em uma determinada situao,
considere o seguinte problema: Calcular e apresentar a mdia geral de uma turma de 8
alunos. A mdia a ser obtida deve ser a mdia geral das mdias de cada aluno obitida
durante o ano letivo. Desta forma ser necessrio somar todas as mdias e divid-las por
8. A tabela a seguir, apresenta o nmero de alunos, suas notas bimestrais e respectivas
mdias anuais.

ALUNO
1
2
3
4
5
6
7
8

MDIA
4.5
6.5
8.0
6.5
6.0
7.0
6.5
6.0

Agora basta escrever um programa para efetuar o clculo das 8 mdias de cada
aluno. Para representar a mdia do primeiro aluno ser utilizada a varivel MD1, para o
segundo MD2 e assim por diante. Ento tem-se:
MD1=4.5;MD2=6.5;MD3=8.0;MD4=6.5;MD5=6.0;MD6=7.0;MD7=6.5;MD8=6.0.
Com o conhecimento adquirido at este momento, seria ento elaborado um
programa que efetuaria a leitura de cada nota, a soma das mesmas e a diviso do valor
da soma por 8, obtendo-se desta forma a mdia, conforme exemplo abaixo:

19

Programa mdia_turma
Var
MD1,MD2,MD3,MD4,MD5,MD6,MD7,MD8 : real
Soma, media : real
Inicio
Soma<-0
Leia MD1,MD2,MD3,MD4,MD5,MD6,MD7,MD8
Soma<- MD1+MD2+MD3+MD4+MD5+MD6+MD7+MD8
Media<-soma/8
Escreva media
Fim

Perceba que para receber a mdia foram utilizada 8 vairveis. Com a tcnica de
matrizes poderia Ter sido utilizada apenas uma varivel com a capacidade de armazenar
8 valores.
Vamos utilizar como representao de nome a forma mais comum usada pelas
linguagens de programao, que o nome da varivel e em seguida, entre colchetes, a
dimenso da mesma. Desta forma, teramos uma matriz MD[1..8], onde seu nome MD,
possuindo um tamanho de 1 a 8.
MD[1]=4.5;
MD[2]=6.5;
MD[3]=8.0;
MD[4]=3.5;
MD[5]=6.0;
MD[6]=7.0;
MD[7]=6.5;
MD[8]=6.0
Observe que o nome um s, o que muda a informao indicada dentro dos
colchetes. A esta informao d-se o nome de ndice, sendo este o endereo onde o
elemento est armazenado.
Para definir as variveis no portugus estruturado utilizaremos a seguinte sintaxe:
VARIAVEL : Matriz[<dimenso>] de <tipo de dado>
Desta forma utilizaria-mos no exemplo :
Var
MD : Matriz[1..8] de real;

Obs.: outros autores podero utilizar outros tipos de declarao, isto tambm
acontece com as linguagens de programao.
A leitura e escrita da matriz feita passo a passo, um elemento por vez com as

20

instrues leia e escreva, como as variveis simples, embora deva-se observar o ndice.
Exemplo:
Escreva MD[2]
Leia MD[1]

{este comando escrevera o valor 6.5}

{este comando efetua a leirua de um valor para a nota do 1 aluno}

Abaixo apresentado o algoritmo da leitura da notas dos 8 alunos, clculo da


mdia e a apresentao da mesma e apresentao das notas lidas.
Programa mdia_turma
Var
MD : matriz[1..8] de real
Soma, media : real;
I : inteiro;
Inicio
Soma<-0
Para i de 1 at 8 passo 1 faa
Leia MD[i]
Soma<-soma+MD[i]
Fim_para
Media<-soma/8
Escreva media
Para i de 1 at 8 passo 1 faa
Escreva MD[i]
Fim_para
Fim
Exerccios
1 - Desenvolva um programa que efetue a leitura de 10 valores para uma matriz A
e que esses valores sejam passados para a matriz B acresentando 10 porcento a cada
elemento.
2 - Desenvolva um programa que efetue a leitura de 10 valores para uma matriz A
e que esses valores sejam passados para a matriz B verificando se o ndice for par
dever ser multiplicado por 5 e se for impar, somado a 5.
3 - Desenvolva um programa que efetue a leitura de 10 elementos para uma matriz
A e apresente no final a somatria dos elementos mpares.
4 - Ler duas matrizes A e B com 20 elementos. Construir uma matriz C, sendo esta
formada pelos elementos de A subtratdos dos elementos de B.
5 - Ler duas matrizes A e B de 4 elementos cada. Construir uma matriz C, sendo
esta a juno das duas outras matrizes. Desta forma, C dever Ter o dobro de
elementos, ou seja, 8.
6 - Ler 20 elementos de uma matriz A e construir uma matriz B de mesa dimenso
com os mesmos elementos de A, sendo que estes devero estar invertidos, ou seja, o
primeiro elemento de A passa a ser o ltimo de B, o segundo elemento de A passa a ser
o penltimo de b e assim por diante.

21

Matrizes com mais de uma dimenso


Em matrizes unidimensionais a manipulao dos elementos " feita atras de um
nico looping (enquanto, para ou repita). No caso de matrizes com mais dimenses,
devera ser utilizado o nmero de loopings relativo ao tamanho de sua dimenso Desta
forma, uma matriz de duas dimenses dever ser controlada com dois loopings, sendo
que de trs dimenses dever ser controlada por trs loopings e assim por diante.
Nestas matrizes, os seus elementos sero tambm manipulados de forma
individualizada, sendo a referncia feita sempre atravs de dois ndices : o primeiro para
indicar a linha e o segundo para indicar a coluna. Desta forma para referenciar um
elemento que est na Segunda linha e na terceira coluna de uma matriz, tem-se
tabela[2,3]. Para declarar uma matriz de 8 linhas e 5 colunas, por exemplo, ficaria :
VAR <nomevariavel> : MATRIZ[dimenso1,dimenso2] DE <tipodedado>;
Caso 1 - Como modelo, vamos utilizar dos exemplos, o primeiro, que efetue a
leitura de 4 notas para 4 bimestres e apresente no final as mdias de cada bimestre :
Existe uma tabela aqui
PROGRAMA EXEMPLO1
{declarao das variveis}
VAR
Notas : MATRIZ[1..4,1..4] DE REAL;
Nota, Bim : integer;
Soma : REAL;
INICIO
{leitura dos elementos da matriz}
PARA bim DE 1 ATE 4 FACA
PARA nota DE 1 ATE 4 FACA
LEIA(notas[bim,nota])
FIM_PARA
FIM_PARA
{clculo e apresentao das mdias}
PARA bim DE 1 ATE 4 FACA
Soma <-0
PARA nota DE 1 ATE 4 FACA
Soma <- soma +notas[bim,nota]
FIM_PARA
ESCREVA(A nota do bimestre ,bim, ,soma/4)
FIM_PARA
FIM

Caso2 - Imaginemos a seguinte matriz tridimensional:

22

jk

Gf

sa

Ee

Considerando esta matriz com 2 linhas e 3 colunas e cada elemento (clula) da


tabela dividida em 4 partes, temos uma matriz com 3 dimenses que pode ser
declarada da seguinte maneira:
VAR
Tabela : array[1..2,1..3,1..4] de caractere;
A maneira mais correta de efetuar a leitura e escrita de matrizes utilizando um
lao de repetio para cada dimenso da matriz. `
Para efetuar a leitura do elemento que est na linha 2 coluna 3 elemento 4
utilizamos:
Escreva(Digite o elemento da linha 2 coluna 3 elemento 4:);
Leia(tabela[2,3,4];
Ou para ler todos os elementos:

Programa Leitura;
Var
Tabela: array[1..2,1..3,1..4] de caractere;
l,c,e: integer;
inicio
para l de 1 ate 2 passo 1 faa {percorre as linhas de 1 a 2}
para c de 1 ate 3 passo 1 faa {percorre as colunas de 1 a 3}
para e de 1 at 4 passo 1 faa {percorre os elementos de 1 a 4}
escreva(Digite o elemento da linha ,l, coluna ,c, elemento ,e, : );
leia(tabela[l,c,e];
fim_para
fim_para
fim_para
fim

23

Exerccios
1 Desenvolver um programa de agenda que cadastre o nome, endereo, cep de
4 pessoas e em seguida liste-os.
2 Crie um programa que faa a leitura de 10 nomes de alunos onde cada aluno
dever ter 4 notas. Para isso crie uma matriz unidimensional para armazenar os nomes e
uma bidimensional para as notas. Aps efetuar a leitura o programa deve apresentar os
alunos e as mdias.

24

6 - Buscas e ordenao de matrizes

Busca sequencial
Caso1: Efetuar a leitura de 5 nomes para uma matriz A. Solicitar um valor para
pesquisa do usurio, pesquisar na matriz os nomes que coicidem com o valor e
apresentar os nomes e as posies dos elementos encontrados. Caso no tenha
encontrado, apresente uma mensagem que o valor de busca no foi encontrado.
Caso2: Efetuar a leitura de 5 alunos para uma matriz alunos e suas 5 mdias
para uma matriz chamada medias. Apresente os alunos que tm nota manor que 7
dizendo que esto para exame. Se no foi encontrado nenhum aluno, apresente uma
mensagem que nenhum aluno ficou para exame.
Algoritmos de busca
(matria aplicada a estrutura de dados)
Ordenao
Imagine um programa com 5 elementos inteiros em uma matriz A dispostos como
mostrado a tabela abaixo :
MATRIZ A
INDICE
ELEMENTO
1
9
2
8
3
7
4
5
5
3
Ou seja :
A[1]=9
A[2]=8
A[3]=7
A[4]=5
A[5]=3
Para efetuar o processo de troca necessrio aplicar o mtodo de propriedade
distributiva, sendo assim, o elemento que estiver em A[1] dever ser comparado com os
elementos que estiverem em A[2], A[3], A[4] e A[5]. Depois, o elemento que estiver em
A[2] no necessita ser comparado com o elemento que estiver em A[1], pois j foram
anteriormente comparados, passando a ser comparado somente com os elementos que
estiverem em A[3], A[4] e a[5]. Na sequncia, o elemento que estiver em A[3]
comparado com os elementos que estiverem em A[4] e A[5] e por fim o elemento de a[4]
comparado com A[5]. A cada comparao se o primeiro elemento comparado for maior
que o segundo os valores devero ser trocados utilizando-se uma varivel de troca.

Exemplo :
25

Programa ordenacao;
Var
A : matriz[1..5] de inteiros;
I, J, troca : inteiro;
Inicio
Para i de 1 at 5 passo 1 faa
Leia A[i]
Fim_para
Para i de 1 at 5 passo 1 faa
Para j de i+1 at 5 passo 1 faa
Se A[j]<A[i] ento
Troca <- A[i]
A[i] <- A[j]
A[j] <- troca
Fim_se
Fim_para
Fim_para
Para i de 1 at 5 passo 1 faa
Escreva A[i]
Fim_para
Fim

26

7 - Registros

At agora aprendemos a trabalhar com uma estrutura de dados de tipos


homogneos (matrizes). Os registros so estruturas de dados que se diferenciam das
matrizes, devido o fato de possurem campos onde definimos tipos de dados diferentes
para cada campo.
Sintaxe:
Type <identificador> = record
<lista dos campos e seus tipos>
end;
Var <variveis> : <identificador>;
No captulo anterior, um exerccio de aprendizagem solicitava que fosse informado
o nome de 10 alunos e suas 4 notas bimestrais, o que obrigou a utilizao de duas
matrizes, uma para conter os nomes, por seus valores serem do tipo caractere e a outra
para conter as notas, por seus valores serem do tipo real. Com registros podemos
armazenar os mesmos dados em apenas uma estrutura que seria:
TYPE
CAD_ALUNO = RECORD
NOME : STRING;
NOTA1 : REAL;
NOTA2 : REAL;
NOTA3 : REAL;
NOTA4 : REAL;
END;
VAR
ALUNO : CAD_ALUNO;
O acesso a estes dados, tanto para leitura quanto para a escrita seria :
READLN(ALUNO.NOME)
READLN(ALUNO.NOTA1)
WRITELN(ALUNO.NOME)
WRITELN(ALUNO.NOTA1)

Estrutura de um registro de conjunto


Consiste em estabelecer uma estrutura de registro onde um campo do registro
do tipo matriz. Exemplo:

TYPE

27

CAD_ALUNO = RECORD
CODIGO : INTEGER;
NOME : STRING;
NOTAS : ARRAY[1..4] OF REAL;
END;
VAR
ALUNO : CAD_ALUNO;
Leitura : READLN(ALUNO.NOTAS[1]);
Escrita : WRITELN(ALUNO.NOTAS[2]);
Estrutura de um conjunto de registros
Consiste em estabelecer uma matriz de tipo registro. Exemplo:
TYPE
CAD_ALUNO = RECORD
CODIGO : INTEGER;
NOME : STRING;
NOTA1 : REAL;
NOTA2 : REAL;
NOTA3 : REAL;
NOTA4 : REAL;
END;
VAR
ALUNO : ARRAY[1..10] OF CAD_ALUNO;
Leitura : READLN(ALUNO[1].NOTA1);
Escrita : WRITELN(ALUNO[2].NOME);
Exerccios:
1 Elaborar um programa que faa a leitura de 10 produtos contendo descrio,
quantidade, quantidade mnima e valor. Aps a leitura dos dados apresentar uma ficha de
compra onde devero ser listados todos os produtos que esto abaixo da quantidade
mnima. No final da lista apresentar o total a ser gasto para repor estes produtos.
{conjunto de registro}
2 - Efetuar a leitura de 4 notas bimestrais para 8 alunos. Apresentar o boletim
escolar dos alunos.
3 Elaborar um programa que contenha em um menu do seguinte formato :
PROGRAMA AGENDA DE TELEFONES
1 CADASTRAR
2 PESQUISAR
3 ALTERAR
4 CLASSIFICAR
5 LISTAR
6 - SAIR
ESCOLHA UMA OPO : [ ]
Construa rotinas que desempenham cada uma das funes do menu acima. Os
dados da agenda devero ser : nome, telefone e celular

28

8 Utilizao de Subrotinas
Os procedimentos e funes so utilizados na diviso de um programa complexo,
permitindo assim possuir a modularizao de um determinado problema, considerado
grande e de difcil soluo. A modularizao do cdigo nos d vrias vantagem na
linguagem pascal :
Para tarefas que devem ser efetuadas mais do que uma vez num programa, a
modularidade evita a necessidade de programao redundante (repetida) de
essencialmente o mesmo conjunto de instrues. Dessa forma, cada mdulo
pode ser definido apenas uma vez e depois acedido de vrios pontos do
programa.
Um conjunto diferente de dados pode ser processado de cada vez que o
mdulo acessado.
Facilidade na interpretao do cdigo.
O uso de mdulos de programa pode, portanto, reduzir apreciavelmente o tamanho
de um programa.
Uma sub-rotina , na verdade, um programa, e sendo um programa poder efetuar
diversas operaes computacionais (entrada, processamento e sada). As sub-rotinas
so dutilizadas na diviso de algoritmos complexos, permitindo assim possuir a
modularizao de um determinado problema, sonsiderado grande e de difcil soluo.
Sub Rotinas do tipo procedimento
Sintaxe :
PROCEDIMENTO <nome do procedimento>
VAR
<variveis>
INICIO
<instrues>
FIM

Exemplo : efetuar um programa que utilize um procedimento para determinar o


maior nmero entre 3 inteiros.
Exerccios :
1 Elaborar um programa que possua uma sub-rotina que apresente o total do
somatrio dos N primeiros nmeros inteiros. (1+2+3+4+...+N)
2 Elabore um programa que solicite do usurio 3 nmeros. Se a soma dos 3
nmeros for menor que 10, solicite os 3 nmeros novamente e saia do programa. Como o
programa pode solicitar 2 vezes os 3 nmeros, crie um procedimento para solicitar estes
3 nmeros.

29

Utilizao de Parmetros
Parmetros tm por finalidade servir como um ponto de comunicao bidirecional
entre as sub-rotinas e o programa principal.
Exemplo:
PROCEDIMENTO TROCA(A,B : INTEIRO);
VAR X : INTEIRO;
INICIO
X<-A;
A<-B;
B<-X;
FIM;
Exerccios :
1 Desenvolva um programa que solicite do usurio o seu salrio e o percentual
de acrescimo. Aps a leitura chame uma sub-rotina para calcular e apresentar o salrio
atualizado.
2 Desenolva um programa que solicite do usurio a base e a altura de um
tringulo retngulo e chame um procedimento para calcular e apresentar a rea do
triangulo.
3 Elaborar um programa que possua uma sub-rotina que apresente o total do
somatrio dos N primeiros nmeros inteiros. (1+2+3+4+...+N)
4 Elaborar um programa que utilize um procedimento para calcular a potncia de
um nmero, ou seja, chamando-se o procedimento POTENCIA(2,3) o procedimento deve
calcular e apresentar o resultado 8.
5 Construa uma procedure que receba como parmetro uma frase e um nmero
inteiro, esta procedure deve escrever a frase na tela repetidamente o nmero de vezes
que foi passado como parmetro.
Sub-rotinas do tipo funo
Uma funo um bloco de programa como os procedimentos, sua principal
diferena est no fato de a funo retornar um determinado valor. O valor de uma funo
retornado em seu nome.
Sintaxe :
FUNCAO <nome da funo>(<parametro1>,<parametro2> : <tipo>) : <tipo de retorno>;
VAR
<variveis>
INICIO
<instrues>
<nome da funo> := <valor de retorno>;
FIM
Exemplo : Desenolva um programa com uma funo que retorne o maior nmero

30

entre dois valores.


Exerccio :
1- Desenvolva um programa que solicite do usurio 2 valores e um operador (+,,/,*), chame um procedimento que receba como parmetro os valores solicitados ao
usurio e devolva a soma dos valores caso o operador seja +, a subtrao dos valores
caso o operador seja e assim por diante.
2 Desenvolva um programam com uma subrotina que receba um nmero N e
retorne ao programa principal o somatrio dos N primeiros nmeros inteiros. Apresente o
valor retornado pela funo.
3 Crie um programa que solicite do usurio a base e a altura de um tringulo
retangulo, chame uma funo que calcule e retorne a rea da figura. Apresente o valor
retornado pela funo.
4 Baseado no exemplo dado:
PROGRAM SOMA;
USES CRT;
VAR A,B,R : INTEGER;
BEGIN
CLRSCR;
WRITE('Entre com o valor de A : ');
READLN(A);
WRITE('Entre com o valor de B : ');
READLN(B);
R:=A+B;
WRITELN('O resultado da soma de A e B : ',R);
END.
A) construa um programa com uma procedure que calcule e apresente o resultado da
soma dos dois valores A e B passados como parmetro;
B) construa um programa com uma funo que calcule a soma dos dois valores A e B
passados como parmetro e retorne o resultado da soma para que este seja
apresentado.
5 Construa uma procedure que replique uma seqncia de um caracter o nmero
de vezes passados como parmtro.
Ex.: replica(-,20) esta chamada a procedure deve escrever vinte sinais de menos.
6 Construa uma funo que faa o acrscimo em porcentagem do valor passado
como parmetro. Ex.:
ValorAtual:=percentual(ValorAntigo,perc_acrescimo);
percentual(200,10)=220;

31

9 Arquivos

Um arquivo de suma importncia nos programas computacionais, desde o


tempo em que o primeiro computador surgiu, pois, para que um programa faa algum tipo
de operao, o mesmo precisa ser alimentado com informaes: estas, ou so
fornecidas pelo teclado, o que atualmente torna-se invivel, ou so fornecidos atravs de
um arquivo.
Conceitos
ITEM ou CAMPO: unidade de informao; o valor de um item pode ser um nmero
inteiro, uma cadeia de caracteres, um nmero decimal ou, ainda, uma data.
REGISTRO: conjunto de itens ou uma linha de uma tabela
ARQUIVO: conjunto de registros.
Exemplo de um arquivo de alunos:
R.A. N(6)
1
2
3
.
.
200

NOME C(30)
Ana Paula
Cristina
Renata

ENDEREO C(50)
Rua...
Av...
Rua...

MENS. Dec(8,2)
250,00
260,00
255,00

Pedro

Av...

270,00

Campos do arquivo: R.A., nome, endereo e mensal.


Tamanho do registro: 96 bytes
Total de registros: 200
Tamanho total do arquivo: 19200
Lembrando que:
1K 1024 bytes

1M 1024 K

1 G 1024 M

1 T 1024 G

CHAVE PRIMRIA (PK): uma chave que representa um valor diferente para cada
registro do arquivo, de tal forma que, dado um valor da chave primria, identificado um
nico registro do arquivo.
Exemplo de chave primria para o arquivo de alunos: R.A
Uma chave primria pode ser composta por mais de um campo.
CHAVE SECUNDRIA: difere de uma primria pela possibilidade de no possuir uma
valor diferente para cada registro. Assim, um valor de uma chave secundria identifica um
conjunto de registros. utilizada principalmente para buscas e ordenao.
CHAVE DE ESTRANGEIRA (FK): a chave usada para identificar o(s) registro(s)
desejado(s) em uma operao de acesso a um outro arquivo.
32

EXERCCIOS
Com base no arquivo de funcionrios abaixo, resolva as questes:
Filial
1
1
2
2
.
.

Matrcula
1024
1050
1029
1080

Nome
Vagner
Maria
Marcelo
Valria

Cargo
Porteiro
Zeladora
Digitador
Analista Sistemas

Data Adm
25/05/91
16/03/92
05/04/95
06/09/96

Salrio
350,00
200,00
600,00
1500,00

a)
b)
c)
d)
e)

Quais so os campos do arquivo?


Qual o 3 registro do arquivo?
Defina o tamanho de cada campo.
Calcule o tamanho dos registros (desconsidere a , do valor e a / da data).
Calcule o espao em disco que este arquivo ir ocupar, considerando que o mesmo
tem um total de 400 registros.
f) Defina a chave primria do arquivo.
g) Defina uma chave secundria para o arquivo, considerando que dever ser emitido
um relatrio ordenado por FILIAL, CARGO e MATRCULA.

O PASCAL, possui dois tipos de arquivos, os quais so:


1. Arquivos FILE
2. Arquivos TEXT

33

Arquivos FILE
Um arquivo do tipo FILE, tambm conhecido por arquivo randmico, ou de acesso
aleatrio, o arquivo mais importante do Pascal, sendo desta forma tambm o mais
utilizado. Um arquivo randmico caracterizado pelo fato de ser possvel buscar uma
determinada informao em qualquer posio que a mesma se encontre, sem haver a
necessidade de se percorrer todo o arquivo at se alcanar a informao desejada.
Sintaxe :
<Nome da varivel> : FILE OF<tipo>
Observao: Um arquivo FILE deve ser apenas um tipo de dado, ou seja : INTEGER,
REAL, RECORD, STRING, BYTE, etc.
Exemplo: Crie um programa que defina uma varivel como sendo um arquivo FILE de
STRINGs, crie tambm neste mesmo programa um tipo Arquivo de INTEGERs.
PROGRAM Exemplo;
TYPE
Meu_tipo = FILE OF INTEGER;
VAR
Minha_Varivel = FILE OF STRING;
BEGIN
END.
Estrutura Interna do Arquivo:
Quando um arquivo FILE criado, o mesmo possui a seguinte estrutura:
Posio Fsica
0
1
2

Informao

A posio fsica corresponde a um nmero que gerado automaticamente no


instante que uma informao qualquer includa no arquivo. Este nmero, corresponde
ao Endereo da informao no arquivo, sendo que atravs deste Endereo que
possvel recuperar qualquer informao, sem precisar percorrer todo o arquivo em busca
da mesma, ao invs disto basta fornecer o nmero da posio fsica da informao no
arquivo.
Observao:
Passaremos daqui por diante
a chamar as informaes
armazenadas em um arquivo de Registros.

34

Sub-Rotinas para Tratamento de Arquivos FILES

Existem uma grande quantidade de sub-Rotinas construdas especialmente para


manipular arquivos FILE. As principais so:

Rotina
: ASSIGN()
Funo
: Serve para associar um determinado Nome de arquivo, no disco ou
disquete com o arquivo definido pelo programador.
Sintaxe
: ASSIGN(Meu_Arquivo, STRING_Com_Nome_Arquivo_DOS).
Exemplo:
PROGRAM TESTE
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
BEGIN
ASSIGN (Arquivo, dados.dat);
END.

Rotina
: REWRITE()
Funo
: Cria e abre para E\S um arquivo. Caso o arquivo no exista, o mesmo ser
criado. Caso o arquivo j exista, todos os dados existentes nele sero apagados.
Sintaxe
: REWRITE(Meu_Arquivo);
Exemplo:
PROGRAM Teste;
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
REWRITE (Arquivo);
END.

35

Rotina
: RESET()
Funo
: Abre para E/S um arquivo que j exista. Caso o arquivo no exista ocorrer
um erro de execuo e o programa ser abortado.
Sintaxe
: RESET(Meu_Arquivo)
Exemplo:
PROGRAM Teste;
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
RESET (Arquivo);
END.

Rotina
Funo
Sintaxe
Exemplo:

: CLOSE()
: Fecha um arquivo que tenha sido aberto com RESET\REWRITE.
: CLOSE(Meu_Arquivo)
PROGRAM Teste;
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
REWRITE (Arquivo);
CLOSE (Arquivo);
END.

36

Rotina
: WRITE()
Funo
: A Rotina WRITE tem a mesma Funo de sada de informaes como at
agora j tnhamos trabalhado, somente que ao invs da informao ser apresentada no
vdeo, a mesma ser armazenada em um arquivo.
Sintaxe
: WRITE (Meu_Arquivo, Registro)
Exemplo:
PROGRAM Teste;
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
Reg : Registro;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
REWRITE (Arquivo);
WRITE (Digite o Nome: );
READ (Reg.Nome);
WRITE (Digite a Idade: );
READ (Reg.Idade);
WRITE (Arquivo, Reg);
CLOSE (Arquivo);
END.
Rotina
: READ()
Funo
: A Rotina READ tem a mesma Funo de entrada de informaes como at
agora j tnhamos trabalhado, somente que ao invs da leitura ser feita pelo teclado, a
mesma ser feita de um arquivo.
Sintaxe
: READ (Meu_Arquivo, Registro)
Exemplo:
PROGRAM Teste;
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
Reg : Registro;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
RESET (Arquivo);
READ (Arquivo,Reg);
WRITE (Nome = , Reg.Nome);
WRITE (Idade = , Reg.Idade);
CLOSE (Arquivo);
END.

37

Observao: Aps cada operao READ/WRITE no arquivo, o endereo do registro


corrente no arquivo incrementado em uma unidade. Assim por Exemplo, se o endereo
do registro corrente igual a 10, aps uma operao de READ/WRITE, o registro
corrente passar a ser o nmero 11.
Rotina
Funo
arquivo.
Sintaxe
Exemplo:

: FILEPOS()
: Retorna um nmero inteiro indicando qual o registro corrente em um
: Registro_Corrente : = FILEPOS (Meu_Arquivo)
PROGRAM Teste;
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
Corrente: INTEGER;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
RESET (Arquivo);
corrente : = FILEPOS(Arquivo);
WRITE (corrente);
CLOSE (Arquivo);
END.

Rotina
Funo
Sintaxe
Exemplo:

: FILESIZE()
: Retorna quantos registro existem armazenados no arquivo.
: Tamanho_Arquivo : = FILESIZE (Meu_Arquivo)
PROGRAM Teste;
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
Total : INTEGER;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
RESET (Arquivo);
Total : = FILESIZE (Arquivo);
WRITE (Total);
CLOSE (Arquivo);
END.

38

Rotina
: SEEK ()
Funo
: Posiciona o ponteiro do arquivo em um registro determinado, para que o
mesmo possa ser processado.
Sintaxe
: SEEK(Meu_Arquivo, Endereo_Registro)
Exemplo:
PROGRAM Teste;
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
Reg : Registro;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
RESET (Arquivo);
SEEK (Arquivo, 10);
READ (Arquivo, Reg);
WRITE (Nome = , Reg.Nome);
WRITE (Idade = , Reg.Idade);
CLOSE (Arquivo);
END.
Rotina
Funo
Sintaxe
Exemplo:

: EOF()
: Retorna TRUE caso se alcance o final do arquivo, FALSE caso contrrio.
: Chegou_Final : = EOF (Meu_Arquivo)

PROGRAM Teste;
TYPE
Registro = RECORD
Nome : STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
Reg : Registro;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
RESET (Arquivo);
WHILE NOT EOF(Arquivo) DO
BEGIN
READ (Arquivo, Reg);
WRITE (Nome = , Reg.Nome);
WRITE (Idade = , Reg.Idade);
END;
CLOSE (Arquivo);
END.

39

Rotina
: ERASE ()
Funo
: Elimina o arquivo do disco. importante notar que o arquivo a ser
eliminado no pode estar aberto.
Sintaxe
: ERASE (Meu_Arquivo)
Exemplo:
PROGRAM Teste;
TYPE
Registro = RECORD
Nome
: STRING;
Idade : BYTE;
END;
VAR
Arquivo : FILE OF Registro;
BEGIN
ASSIGN (Arquivo, Dados.Dat);
ERASE(Arquivo);
END.
Exerccios:
a) Faa um programa de incluso de dados em um arquivo chamado pessoas.dat. Os
registros deste arquivo devero ser formados de cdigo, nome e telefone de uma
pessoa.
b) Faa outro programa que abra o arquivo criado no exerccio anterior e liste todos
os dados no vdeo.
c) Elabore um programa para incluir produtos em um arquivo qualquer. A incluso
dever ser efetuada enquanto o usurio desejar. O produto composto de cdigo,
descrio, quantidade e valor. Quando o usurio no desejar incluir mais produtos,
chame uma procedure para listar os dados inclusos e o total em Reais do estoque.
d) Incluir um mdulo de consulta no arquivo de produtos do exerccio anterior.
e) Faa um programa com as seguintes rotinas:
1 Incluso de funcionarios: Devero ser includos clientes no arquivo func.dat
enquanto o usurio desejar. Os dados dos funcionrios so : cdigo, nome, salrio,
nfilhos.
2 - Processamento Folha de pagamento: Para cada funcionrio dever ser
criada uma folha de pagamento contendo: cdigo, codfun, salrio. O salrio da
folha dever ser igual ao salrio de seu cadastro mais 1% para cada filho que tiver.
3 Listagem de folha de pagamento: Dever ser uma listagem com o seguinte
lay-out :
Cod. Folha
Cod. Func.
Nome Func.
NFilhos
Salrio
...
...
Total da Folha:
f) Crie um arquivo de peas, com o seguinte Lay-Out: Nome de Pea, cor ,
quantidade, tamanho e deletado. O campo Deletado ser um campo Boolean, setado
inicialmente para FALSE , informando se o registro est ou no deletado do arquivo.
g) Faa a uma Rotina para deletar um, ou mais, registros do arquivo de peas. A
deleo consiste em setar o campo deletado do arquivo para TRUE.

40

h) Percorrer o arquivo de peas imprimindo somente as peas que no foram


deletadas
i) Faa uma Rotina que elimine fisicamente os registros do arquivo de peas que
foram marcadas para deleo, isto , onde o campo deletado est setado para TRUE.

41

Você também pode gostar