You are on page 1of 70

1 VARIVEIS COMPOSTAS HOMOGNEAS

Correspondem a posies de memria, identificadas por um mesmo nome,


individualizadas por ndices cujo contedo de mesmo tipo. O conjunto de 10 notas dos
alunos de uma disciplina pode constituir uma varivel composta. ! este conjunto
associa"se um identificador NOTA #ue passar a identificar n$o uma nica posi$o de
memria, mas 10. ! refer%ncia ao contedo do n"simo elemento do conjunto ser
indicada pela nota$o NOTA [i], onde i um nmero inteiro ou uma varivel
numrica contendo um valor inteiro. &upondo"se #ue em um dado instante a varivel
composta NOTA contivesse os se'uintes valores(
NOTA
60 70 90 60 55 91 100 47 74 86
i 1 2 3 4 5 6 7 8 9 10
NOTA[3] est referenciando o )
o
elemento do conjunto cujo contedo *0.
1.1VARVES COMPOSTAS UNDMENSONAS
Conjunto de dados referenciados por um mesmo nome e #ue necessitam de
somente um ndice para #ue seus elementos sejam endereados.
&inta+e 01(
declare lista de identificadores [li:ls]:t
onde(
declare ( uma palavra c,ave-
lista de identificadores( nomes associados .s variveis #ue se deseja declarar
li( limite inferior do intervalo de varia$o dos ndices-
ls: limite superior do intervalo-
t: tipo dos componentes /#ual#uer um dos tipos primitivos, ou ainda um outro tipo #ue
pode ser construdo, o #ual veremos adiante0.
1+.( declare NOTA[1:10] real-
&inta+e 02/3ascal0(
Prof
a
Sirlei Lourdes Bach
Pg. 1
var A : array
1
[T1] of T2
onde(
A o novo identificador de tipo,
T1 denota o tipo do ndice e
T2 o tipo das componentes do vetor.
1+s.( var x: array [1..20] of real
y: array [TDias] of real
4e acordo com estas declaraes, a varivel + consiste em 20 componentes de tipo real com
valores de ndice 1, 2,..., 20 e y tem sete componentes definido em TDias
2
com valores de
ndices Seg, Ter, Qua, Qui, Sex, Sab, Dom.
Exerccio 1) Fazer um algoritmo que armazene a nota de 20 alunos e as mostre uma a
uma na tela.
incio
declare NOTA[1:20] real;
declare NOME[1:20] caracter;
inteiro: i;
para i:= 1 at 20
faa leia (NOME[i]);
leia (NOTA[i]);
fim para;
para i := 1 at 20
faa escreva (Nome =, NOME[i]);
escreva (Nota =, NOTA[i]);
fim para;
fim.
Exerccio 2) Fazer um algoritmo que calcule de 20 alunos a mdia aritmtica de 2 notas
armazenando-as. Mostrar em conjunto as mdias e os nomes dos alunos.
Exerccio 3) Fazer o algoritmo anterior mostrando na tela somente a mdia do aluno
desejado. Mostrar quanto alunos obtiveram mdia >= 80.
Exerccio 4) Fazer uma varivel de 100 elementos numricos e verificar se existem
elementos iguais a 30. Se sim, escrever as posies em que esto
armazenados.
Exerccio 5) Dados x valores, armazenar em vetor somente os nmeros
correspondentes aos pares. Mostr-los na tela.
Exerccio 6) Dados os tipos (a=alimentos), (b= limpeza), (c= frutas e verduras). Fazer
um algoritmo onde sejam digitados o tipo, o cdigo e a quantidade em
estoque. Separ-los em vetores diferenciados por tipo e permitir que seja
mostrado na tela todo o contedo do vetor desejado e no final totalizar:
1
arra5 6 vetor
2
tipo TDias = ( Seg, Ter, Qua, Qui, Sex, Sab, Dom );
Prof
a
Sirlei Lourdes Bach
Pg. 2
quantidade total de produtos computados e; o nmero de itens do vetor.
Exerccio 7) Dados 2 vetores A e B que armazenam nmeros inteiros, ambos
ordenados de maneira crescente, gerar um vetor C com os nmeros
maiores a partir da comparao de A com B. Gerar um vetor D com os
nmeros menores e mostr-los (C e D) na tela.
Exerccio 8) Dados vetores onde so armazenados dados de X alunos, cdigo, nome e
mdia final. nformar cdigo, nome e mdia do melhor e do pior aluno. Nos
casos de empate mostrar todos os alunos coincidentes.
Exerccio 9) Dado 2 vetores V1 e V2 com 10 nmeros cada. Gerar um vetor V3 com a
intercalao de V1 e V2.
Exerccio 10) Dado o vetor LSARB, ANARAP, LEVACSAC. Gerar um novo vetor sendo
que a primeira posio original ser a posio final do novo vetor.
Exerccio 11) Dados 2 vetores A e B com 10 nmeros cada. Gerar um vetor C somente
com os itens comuns de A e B. Mostr-lo na tela.
Prof
a
Sirlei Lourdes Bach
Pg. 3
1.2VARVES COMPOSTAS MULTDMENSONAS
&$o as variveis #ue necessitam mais de um ndice para individualiza$o de
seus elementos. !s variveis multidimensionais podem ser 7idimensionais, onde o
primeiro elemento representa a lin,a e o se'undo a coluna, ou tridimensionais, onde o
elemento representa a p'ina /face0.
&inta+e 01/3ortu'ol0(
declare LETRAS [1:3, 1:6] caracter- (Ex: 3 = linhas; 6 = colunas
declare CUBO [1:5, 1:3, 1:6] caracter- (Ex: ! = "#ginas; 3 = linhas, 6 = colunas
&inta+e 02/3ascal0(
var LETRAS: array [1..3,1..6] of char;
var CUBO : array [1..5,1..3,1..6] of char;
Exerccio 12) Dada uma matriz (4 x 4), fazer um algoritmo que multiplique os elementos
da diagonal principal por um elemento qualquer. Os elementos da matriz
devem ser lidos e mostrados no final.
inicio
declare MATRIZ[1:4, 1:4] real;
real: escalar;
inteiro: i, j;
leia i, j;
para i := 1 at 4 faa
para j := 1 at 4 faa
leia MATRIZ [i,j];
se (i = j) entao
MATRIZ[i,j] := ESCALAR * MATRIZ[i,j];
fimpara;
para i := 1 at 4 faa
para j := 1 at 4 faa
escreva MATRIZ [i,j];
fimpara;
fim.
Exerccio 13) Dada uma matriz (4 x 5), fazer um algoritmo para calcular a soma de todos
os seus elementos.
Exerccio 14) Dada uma matriz (4 x 4), obter uma nova matriz, onde as linhas sejam as
colunas e vice-versa.
Exerccio 15) Dada uma matriz (5 x 5), aps introduzir seus elementos, gerar um vetor
com a diagonal principal, mostrando-o na tela.
Prof
a
Sirlei Lourdes Bach
Pg. 4
Exerccio 16) Dada uma matriz (5 x 5), gerar uma matriz resultante onde a 1
a
coluna
contenha os elementos da diagonal principal e a 2
a
coluna os elementos
da diagonal secundria.
Exerccio 17) Dada uma matriz (4 x 5), calcular a soma dos elementos de cada linha
armazenando em um vetor.
Exerccio 18) Fazer um algoritmo que dada uma matriz tridimensional (4 x 3) com 3
faces armazene valores numricos inteiros entre 0 e 20. Mostrar na tela
quantas vezes um determinado valor (entre 0 e 20) est armazenado
repetidamente.
Exerccio 19) Dadas duas faces de uma matriz tridimensional (3 x 3), fazer um algoritmo
em que as linhas da face 2 sejam as colunas da face 1, e as colunas da
face 1 sejam as linhas da face 2.
Exerccio 20) Dada uma matriz (6 x 2) onde a primeira coluna um cdigo identificador
e a 2
a
coluna contm informao do estado civil. Fazer um algoritmo que
aps introduzido valores para a matriz sejam lidos nome e cdigo de
pessoas. Atravs deste cdigo informar o estado civil, ou mensagem de
erro quando no h cdigo.
Exerccio 21) Dada a tabela de seguros de uma empresa:
Faixa Valor do salrio % desco!o
1 at 2.000,00 2
2 2000,01 a 8.000,00 )
) 8000,01 a 9.000,00 :
8 9.000,01 a *.000,00 9
: mais de *.000,00 10
Sabe-se que ser lido matrcula e salrio de cada funcionrio. Fazer um
programa em que x funcionrios calcule:
a) Para cada funcionrio, o valor do desconto;
b) O valor total descontado;
c) O nmero de funcionrios na faixa 1.
Prof
a
Sirlei Lourdes Bach
Pg. 5
" TIPOS #E #A#OS #EFINI#OS PE$O %S%RIO
2.1TPOS DE DADOS ENUMERADOS
O tipo enumerado um escalar ordenado onde os valores #ue as variveis
deste tipo podem assumir s$o descritos atravs de uma lista de valores. Cada valor um
identificador o #ual tratado como uma constante. ! 'rande vanta'em #ue o
pro'ramador atri7ui nome aos valores, facilitando a pro'rama$o e a depura$o.
! defini$o de um tipo enumerado feita colocando"se entre par%nteses os
identificadores #ue as variveis podem assumir, separados por vr'ulas, como mostrado
a se'uir(
declare
Dias:(Domingo, Segunda, Terca, Quarta, Quinta, Sexta, Sabado);
;esse caso, os valores t%m a se'uinte ordem (
Domingo < Segunda < Terca < Quarta < Quinta < Sexta < Sabado
Ex.:
incio
declare
Dias :(Domingo,Segunda,Terca,Quarta,Quinta,Sexta,Sabado);
TotalHoras, HorasDeTrabalho : inteiro;
. . .
TotalHoras := 0;
para Dias := Segunda at Sabado faa
leia (HorasDeTrabalho);
TotalHoras := TotalHoras + HorasDeTrabalho;
fim para;
. . .
fim.
Outros exemplos:
declare
Meses :(Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez);
Renda : (Alta, Mdia, Baixa);
Ocupao: (Mdico, Professor, Outra);
Cor: (Preto, Marrom, Azul, Verde, Vermelho, Amarelo, Branco);
Prof
a
Sirlei Lourdes Bach
Pg. 6
2.2TPO SUBNTERVALO (SUBRANGE)
< lin'ua'ens #ue admitem tam7m um tipo denominado su7intervalo
/su7ran'e0, #ue representa um su7conjunto de valores de tipos escalares ordenados.
=ma varivel do tipo su7intervalo declarada da se'uinte forma (
declare
NumDiadoMes : 1..31;
LetrasMaiusculas : A..Z;
DiaDoAno : 1..365;
1m suma, o tipo"do"dado pode ser um dos tipos predefinidos ou um tipo
definido pelo usurio, como e+emplos(
declare
Soma, Total, Salario : real;
Idade, Contador : inteiro;
Ms : 1..12;
Dias : (SEG,TER,QUA,QUI,SEX,SAB,DOM);
2.3DECLARAO DE TPOS (TPO/TYPE )
=ma declara$o de tipo, permite #ue se associe um identificador . descri$o
de um tipo. =ma vez declarado, tal identificador pode ser usado da mesma forma #ue o
nome de um tipo predefinido.
Si!axe&
tipo ident = descrio-do-tipo;
[ident = descrio-do-tipo;]
...
Onde:
ident = o nome que passar a identificar o tipo definido.
Descrio-do-tipo = a descrio de um tipo vlido.
Exe'(lo:
tipo
TDias = (Dom,Seg,Ter,Qua,Qui,Sex,Sab);
TMeses= (Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez);
TMaiusculas = (`A'..'Z');
TContador = (1..MAXINT);
TDigito = (0..9);
TAno = (1900..2000);
Prof
a
Sirlei Lourdes Bach
Pg. 7
TRange = (min..max);
declare
Dias : TDias;
Meses : TMeses;
I, J : TContador;
Digito : Tdigito;
Intervalo : Trange;
...
fim.
2.4 USO DE NDCES COM CONTEDO SEMNTCO
Como vimos, os ndices de um vetor servem para acessar individualmente
seus elementos. >re#?entemente, esses ndices t%m um si'nificado intrnseco. 3or
e+emplo, se desejssemos contar as letras e+istentes em um te+to, poderamos declarar o
contador da se'uinte maneira(
tipo
Faixa = 1..26;
declare
Contador : vetor[ Faixa ] inteiro;
ficando subentendido que Contador[1] o contador da letra a, Contador[2] o contador da letra b
e assim sucessivamente. No entanto, o entendimento ficaria mais claro se usssemos como ndice
no um nmero inteiro para indicar a letra, mas a prpria letra, isto , Contador[a] para indicar o
contador da letra a, Contador[b] para para indicar o contador da letra b, etc. sto possvel uma
vez que o ndice de um vetor pode ser qualquer escalar ordenado (caracter, inteiro, lgico,
enumerado, subintervalo) . Assim, a declarao anterior ficaria melhor da seguinte forma :
tipo
Letras = a..z;
declare
Contador : vetor[Letras] inteiro;
EXEMPLO
Vejamos um exemplo completo usando o recurso de ndices com contedo semntico.
Exerccio 22) Programa para ler as vendas efetuadas durante uma semana por uma
equipe de vendedores. A seguir imprimir o valor das vendas indicando
quais os dias que tiveram vendas abaixo e acima da mdia.
incio
tipo
TDias = ( Seg, Ter, Qua, Qui, Sex, Sab, Dom );
declare
Prof
a
Sirlei Lourdes Bach
Pg. 8
Vendas : vetor[ TDias ] real;
Dia : TDias;
Total, Media : real;
{ Leitura das vendas da semana }
para Dia := Seg at Dom faa
leia(Vendas[ Dia ]);
fimpara;
{ Clculo da Mdia }
Total := 0;
para Dia := Seg at Dom faa
Total := Total + Vendas[ Dia ];
fimpara;
Media := Total / 7;
escreva( Vendas Dirias Comparadas com a Mdia );
escreva(SEG TER QUA QUI SEX SAB DOM);
para Dia := Seg at Dom faa
escreva( Vendas[ Dia ]);
fimpara;
para Dia := Seg at Dom faa
se (Vendas[Dia] > Media) ento
escreva(acima)
seno
se (Vendas[Dia] < Media) ento
escreva(abaixo)
seno
escreva (mdia);
fimpara;
fim.
Exerccio 23) O que ser impresso pelo algoritmo abaixo? Considere que existem os
cartes de dados com os valores.
incio
tipo semana = (seg, ter, qua, qui, sex, sab, dom);
tipo dia til = seg: sex;
tipo fimdesemana = sab; dom;
tipo f = vetor[diatil] lgico;
f: ausente;
semana: DIA, DIAUX;
fimdesemana: FOLGA;
diatil: TRABALHO;
leia (DIA);
leia (AUSENTE[DIA]);
se AUSENTE[DIA] ento
escreva (`FALTOU', DIA);
seno
para DIAUX := sab at dom faa
escreva (`TER FOLGA NO', DIAUX);
fimpara;
fim se;
escolha DIA:
caso: dom: escreva (`DOMINGO');
Prof
a
Sirlei Lourdes Bach
Pg. 9
caso: seg: ter: qua: qui: sex: TRABALHO := DIA;
caso: sab: escreva (`FOLGA');
seno escreva (`ERRO');
fim escolha;
escreva (TRABALHO);
fim.
Prof
a
Sirlei Lourdes Bach
Pg. 10
) ESTR%T%RA #E #A#OS HETEROGNEAS
@ sa7emos #ue um conjunto ,omo'%neo de dados composto por variveis
do mesmo tipo primitivo- porm, se tivssemos um conjunto em #ue os elementos n$o
s$o do mesmo tipo, teramos ent$o um conjunto ,etero'%neo de dados.
Aeremos a'ora o tipo de dados regis$ro como um a'lomerado ,etero'%neo de
dados, onde as componentes podem ser de tipos diferentes, ou seja, poderemos utilizar
as diversas estruturas de dados j vistas com7inadas na estrutura de um re'istro.
De%ini&'o( Be'istro um tipo de dado estruturado cujos elementos
constituintes n$o precisam ser de mesmo tipo. !ssim, podemos tanto nos referir
coletivamente a um conjunto de elementos #ue diferem entre si no tipo, #uanto a um
elemento especfico do conjunto, denominado cam"o (o regis$ro.
1+emplificando(
;uma dada aplica$o pode"se ter os se'uintes dados de funcionrios de uma
empresa /fi'. ).1 e ).20. 1m cada uma destas fi'uras, os dados est$o lo'icamente
relacionados enter si, pois constituem as informaes cadastrais do mesmo indivduo.
Cada conjunto de informaes do funcionrio pode ser referencivel por um
mesmo nome, por e+emplo, >CC<!. Dais estruturas s$o con,ecidas como re'istros e aos
elementos do re'istro d"se o nome de componentes ou campos.
>i'. ).1
>i'. ).2
O conceito de re'istro visa facilitar o a'rupamento de variveis #ue n$o s$o
do mesmo tipo, mas #ue 'uardam estreita rela$o l'ica.
Be'istros correspondem a conjuntos de posies de memria con,ecidas por
um mesmo nome e individualizados por identificadores associados a cada conjunto de
Prof
a
Sirlei Lourdes Bach
Pg. 11
posies.
;a varivel composta ,omo'%nea a individualiza$o de um elemento feita
atravs de ndices, j no re'istro, cada componente /ou campo0 individualizado pela
e+plicita$o de seu identificador.
3.1 DECLARAO DO TPO REGSTRO
Criam"se estruturas de dados a'rupados na forma de re'istros atravs da
se'uinte declara$o(
Sintaxe 01 (genrica):
declare lista-de-identificadores registro (campos)
onde(
lis$a)(e)i(en$i%ica(ores( s$o os nomes de est$o sendo associados aos re'istros #ue se
deseja declarar-
cam"os*com"onen$es( s$o declaraes eEou identificadores de variveis compostas,
separados por vr'ula.
regis$ro( uma palavra"c,ave.
Sintaxe 02 (construindo tipos):
! declara$o do tipo re'istro, consiste da palavra reservada registro ,
se'uida de uma lista de campos, e terminando com a palavra reservada fimregistro ,
de acordo com a sinta+e a7ai+o(
Sintaxe:
tipo nome-do-tipo = registro
tipo1 : campo1;
tipo2 : campo2;
...
tipoN : campoN;
fim registro;
nome-do-tipo : lista de variveis;
Onde:
) nome-do-tipo um identificador do tipo registro construdo;
) campo consiste no nome associado a cada campo do registro; e
) tipo o tipo de dados do campo, podendo ser qualquer um dos tipos bsicos ou tipo
anteriormente definido.
Exemplo 1:
Prof
a
Sirlei Lourdes Bach
Pg. 12
tipo TReg = registro
caracter : NOME ;
real : SALRIO;
inteiro : IDADE;
lgico : SEXO;
fim registro;
TReg: REG;
Dal especifica$o corresponde a defini$o de um modelo /TReg0 de um
re'istro /a'lomerado ,etero'%neo de dados0 e a cria$o de uma rea de memria
denominada B1F, #ue contm #uatro su7divises de tipos diferentes.
Exemplo 02:
tipo TNotas = vetor [1..3] de real;
tipo Reg_Aluno = registro
caracter : nome;
inteiro : matrcula;
Tnotas : notas;
fimregistro;
Reg_Aluno : PiorAluno, MelhorAluno;
3.2MANPULAO DE REGSTROS
3.2.1 Referncia aos Campos
Os nomes dos campos de um re'istro s$o semel,antes aos ndices de um
vetor. 1les permitem acessar individualmente cada informa$o. 3ara tal, colocamos o
identificador da varivel do tipo registro ao #ual o campo pertence, se'uida de um
ponto e finalmente o identificador do campo.
Sintaxe
identificador_do_registro.identificador_do_campo
Exemplo( &upondo"se #ue o re'istro >CC<!, num dado instante, contivesse os valores
da fi'ura ).2(
>CC<!.;OG1, estaria se referenciando ao contedo do campo ;OG1 do
re'istro >CC<!., isto , >ulano de Dal.
>CC<!.1&D!4OHCCACI, estaria se referenciando ao contedo do campo
Prof
a
Sirlei Lourdes Bach
Pg. 13
1&D!4OHCCACI do re'istro >CC<!., isto , &olteiro.
Exemplo
incio
tipo TNotas = vetor[1..3] de real;
tipo Reg_Aluno = registro
caracter : Nome;
inteiro : Matricula;
Totas : Notas;
fimregistro;
Reg!Al"no : Aluno1, Aluno2;
inteiro : i;
...
{ Leitura dos campos de Aluno1 }
leia( Aluno1.Nome, Aluno1.Matricula );
para i := 1 to 3 do
leia( Aluno1.Notas[i] );
{ Exibio dos campos de Aluno2 }
escreva( Aluno2.Nome );
escreva ( Aluno2.Matricula );
para i := 1 to 3 do
escreva( Aluno2.Notas[i] );
...
3.3ATRBUO DE CAMPOS E REGSTROS
{ Atribuio campo a campo }
Aluno1.Nome := Aluno2.Nome;
Aluno1.Matricula := Aluno2.Matricula;
para i := 1 at 3 faca
Aluno1.Notas[i] := Aluno2.Notas[i];
{ Atribuio do registro inteiro }
Aluno1 := Aluno2;
3.4VETORES DE REGSTROS
Guitas vezes encontramos um pro7lema no #ual temos #ue tra7al,ar com um
conjunto de re'istros de mesmo tipo. 3ara tais pro7lemas, podemos utilizar uma
estrutura de dados #ue com7ina vetores e registros.
3or e+emplo, supon,amos #ue temos uma classe com :0 alunos onde cada
aluno representado pelo re'istro Reg_Aluno assim, podemos criar um vetor de :0
Prof
a
Sirlei Lourdes Bach
Pg. 14
elementos, onde cada elemento do tipo Be'H!luno.
Exemplos
tipo TNotas = vetor[1..3] de real;
tipo Reg_Aluno = registro
caracter : Nome;
inteiro : Matricula;
Totas : Notas;
fimregistro;
VetClasse = vetor[ 1..50 ] de Reg_Aluno;
delare: VetClasse : Classe;
inteiro : i, j;
Os registros dos 50 alunos poderiam ser lidos da seguinte forma:
para i := 1 at 50 faa
leia(Classe[i].Nome, Classe[i].Matricula );
para j := 1 at 3 faa
leia(Classe[i].Notas[j] );
fimpara;
Os registros dos 50 alunos poderiam ser exibidos da seguinte
forma:
para i := 1 at 50 faa
escreva Classe[i].Nome, Classe[i].Matricula );
para j := 1 at 3 faa
leia( Notas[j] );
fimpara;
fimpara;
;as estruturas compostas ,omo'%neas /vetores e matrizes0 utilizamos tipos
de dados primitivos como sendo os elementos dessas estruturas. !'ora utilizaremos
como componente dessa estrutura n$o apenas um tipo primitivo, mas tam7m tipos
construdos. &upondo #ue #uisssemos manter um re'istro de informaes relativas a
passa'ens rodovirias de todos lu'ares de um Jni7us, utilizaramos um re'istro referente
a cada poltrona /3!&&!F1G0, e para a'rupar todos eles utilizaramos um conjunto
desses re'istros.
Como possumos 88 lu'ares num Jni7us, numerados se#?encialmente de 1
at 88, podemos, para uni"los, criar um vetor no #ual cada posi$o um elemento de
tipo construdo re'istro /3!&&!F1G0.
Prof
a
Sirlei Lourdes Bach
Pg. 15
;mero( 00001 >umante(HHHHHHHHHHHHHH
4e(HHHHHHHHHHHHHHHHH 3ara(HHHHHHHHHHHHHHHHHH
4ata( HHHHHEHHHHEHHHHH <orrio( HHHHHHH( HHHHHH
3oltrona( HHHHHHHHHHHH 4istKncia( HHHHHHHHHHHHHLm
Como possumos um vetor composto por re'istros, n$o podemos declarar
esse vetor sem antes ter declarado seus elementos- devemos ent$o declarar primeiro o
tipo construdo re'istro e depois o vetor.
1+emplos(
a) tipo REGPASSAGEM = registro
inteiro: NMERO;
caractere : ORIGEM, DESTINO;
caractere : DATA, HORRIO;
inteiro : POLTRONA;
real : DISTNCIA;
lgico : FUMANTE;
fimregistro;
tipo VETPASSAGEM = vetor [1..44] de REGPASSAGEM;
VETPASSAGEM : NIBUS;
70 4eclare um conjunto de re'istro #ue comporte as informaes de esto#ue de :00
produtos.
tipo MATDIAS = matriz [1..4, 1..6] de inteiro;
tipo REGPRODUTO = registro
caractere: NOME;
inteiro: CDIGO;
real: PRECO;
MATDIAS: BAIXA;
fimregistro;
tipo VETESTOQUE = VETOR [1..500] de REGPRODUTO;
VETESTOQUE: PRODUTO;
Prof
a
Sirlei Lourdes Bach
Pg. 16
1
2
)
M
M
88
3.5 MANPULAO
!o acessar as informaes contidas em um conjunto de re'istros, procedemos
utilizando o modo de acesso caracterstico de cada estrutura.
1+emplo(
a0 &e #uisssemos sa7er a 7ai+a do dcimo produto, da terceira semana do m%s e do
#uarto dia da semana, escreveramos(
PRODUTO[10].BAIXA[3,4]
70 1la7ore o trec,o de um al'oritmo #ue imprima o total de movimenta$o do esto#ue
para cada um dos :00 produtos(
...
para n := 1 at 500 faa
ACM := 0;
para i:=1 at 4 faa
para j:=1 at 6 faa
ACM := ACM + PRODUTO[n].BAIXA[i,j];
fimpara;
fimpara;
escreva (PRODUTO[n].NOME, ACM);
fimpara;
3.6EXEMPLO DO USO DE REGSTROS
EST%#O #E CASO
Pro*le'a
Uma empresa deseja avaliar o desempenho de sua equipe de vendedores para otimizar a
produo. Para isto, deseja que seja elaborado um programa com as seguintes especificaes.
E!rada
Para cada vendedor ser fornecido seu nome, a quantidade de tens vendidos no ms e a
quantidade de tens devolvidos pelos clientes.
Sa+da
Como resultado dever ser impresso para cada vendedor alm dos dados lidos, a venda
lquida (vendas menos devolues) e a diferena entre a venda lquida e a mdia das vendas
lquidas.
Sol,-.o
As informaes sobre cada vendedor sero definidas com um registro do seguinte tipo:
Prof
a
Sirlei Lourdes Bach
Pg. 17
tipo Reg_Vendedor = registro
caracter : Nome;
inteiro : Vendas,
Devolucoes,
Liquido,
Comparacao;
fimregistro;
Os dados como consistem de uma lista de vendedores, ser$o definidos como
um vetor de re'istros Be'HAendedor.
declare Vendedores : vetor [ 1.. NumVendedores ] de Reg_Vendedor;
O pro'rama consiste 7asicamente das se'uintes partes(
1.Ler os dados
2.Calcular a venda lquida de cada vendedor
3.Calcular a mdia das vendas lquidas
4.Calcular a diferena da venda lquida de cada vendedor com a mdia
5.mprimir os resultados
{Algoritmo que l as vendas e as devolues de um grupo de vendedores
e imprime uma tabela mostrando para cada vendedor os dados lidos, a
venda lquida e a comparao de sua venda lquida com a mdia das
vendas.}
incio
constante NumVendedores = 20;
tipo
Reg_Vendedor = registro
Nome : string(30);
Vendas,
Devolucoes,
Liquido,
Comparacao : inteiro;
fim!registro;
declare
Vendedor : vetor [ 1..NumVendedores ] de Reg_Vendedor;
Media, Soma, i : inteiro;
{ Leitura dos Dados }
para I := 1 at NumVendedores faa
com Vendedores[ i ] faa
leia( Nome, Vendas, Devolucoes );
{ Calculo das Vendas Liquidas e da Media das Vendas }
Soma := 0;
para i := 1 at NumVendedores faa
com Vendedores[i] faa

Liquido := Vendas - Devolucoes;
Soma := Soma + Liquido;
fimcom;
Media := Soma / NumVendedores;
Prof
a
Sirlei Lourdes Bach
Pg. 18
{ Comparacao das vendas de cada vendedor com a media }
para i := 1 at NumVendedores faa
Vendedores[I].Comparacao := Vendedores[i].Liquido - Media;
{ Impresso dos Resultados }
escreva(Resumo das Vendas);
escreva(Nome Vendas Devol Liquido DifMedia );
para i := 1 at NumVendedores faa
com Vendedores[i] faa
escreva(Nome, Vendas, Devolucoes, Liquido, comparacao);
#$.
Exerccio 24) Declarar um registro CAD que tem a seguinte forma:
;OG1
1;41B1NO
C3>
&1OO <D
;!&CCG1;DO
D1G413
onde endereo um re'istro contendo o nome da rua, nmero e cdi'o de
endereamento postal. <D um vetor numrico de tr%s elemento e D1G413 uma
varivel l'ica.
Exerccio 25) Acesse o campo CEP do registro declarado no exerccio anterior.
Exerccio 26) Dada a tabela a seguir:
Cdi'o ;ome
1 0001 !I>!C!D1
2 000) !IGOO!BC>1
) 000P !;!IC&D!
8 000Q !;DBO3RIOFO
: 0010 SOGS1CBO
P 0012 C!B3C;D1CBO
9 0018 GODOBC&D!
... .... ...
100 01** A1;414OB
Escrever um algoritmo que, dados 100 CDGOS DE PROFSSO (fornecidos
em 100 linhas) emita o NOME das profisses correspondentes. A tabela acima
tambm deve ser lida.
Exerccio 27) Em certo municpio, vrios proprietrios de imveis esto em atraso com o
pagamento do imposto predial. Desenvolver um algoritmo que calcule e
escreva o valor da multa a ser paga por esses proprietrios considerando
Prof
a
Sirlei Lourdes Bach
Pg. 19
que:
os dados de cada imvel( identifica$o /caracter0, valor do imposto e nmero de
meses em atraso-
as multas devem ser calculadas a partir do valor do imposto e de acordo com a
se'uinte ta7ela-
Aalor do imposto T por m%s em atraso
at BU :0,00 1
de BU :1,00 a BU 1Q0,00 2
de BU 1Q1,00 a BU :00,00 8
de :01,00 a BU 1.200,00 9
acima de BU 1.200,00 10
o ltimo re'istro lido, #ue n$o deve ser considerado, contm a identifica$o do
imvel i'ual a vazio-
na sada dever$o ser impressos( a identifica$o do imvel, valor do imposto, meses
em atraso e a multa a ser pa'a.
Prof
a
Sirlei Lourdes Bach
Pg. 20
/ AR0%IVOS
=m ar#uivo um conjunto de re'istros , no #ual cada re'istro n$o ocupa uma
posi$o fi+a dentro da estrutura, n$o possuindo portanto taman,o preesta7elecido. Os
re'istros, como sa7emos s$o formados por unidades de informaes denominadas
campos.
=tilizaremos como e+emplo 7sico um ar#uivo de uma 7i7lioteca, na #ual
todos os livros s$o catalo'ados por meio de um re'istro, compondo em seu conjunto um
ar#uivo correspondente ao acervo da 7i7lioteca.
Aejamos a fic,a de catalo'a$o de livros especificada(
Cdi'o do livro(HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Dtulo( HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
!utor( HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
!ssunto( HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
1ditora( HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH!no(HHHHHHHHHHHHHHHHHH
;esta fic,a, encontramos os dados referentes a um livro( Cdi'o, Dtulo,
!utor, etc., #ue formam uma estrutura de dados denominada re'istro.
Cdigo Ttulo Autor Assunto Editora Ano
12) +++ 5555 zzzz LLL 1**0
3erce7emos #ue a rela$o l'ica e+istente entre as informaes #ue refere a
mesma o7ra- assim, se armazenssemos todas as fic,as de controle, formaramos o
ar#uivo utilizado pela 7i7lioteca.
!r#uivo de >ic,as Catalo'rficas
3odemos comparar este ar#uivo de fic,as com o ar#uivo, mvel de ao, #ue
Prof
a
Sirlei Lourdes Bach
Pg. 21
Cdi'o do livro( :8*
Cdi'o do livro( 9:1
Cdi'o do livro( 8)P
Cdi'o do livro( 12)
Dtulo( +++
!utor( 555
!ssunto( zzz
1ditora( LLL !no( 1**0
possumos em uma 7i7lioteca.
;otamos tam7m #ue, como numa 7i7lioteca, as informaes do ar#uivo
podem ser manipuladas por #ual#uer um dos funcionrios, independente da se#?%ncia de
passos #ue cada um, em particular, utilize. Conclumos ent$o #ue um ar#uivo pode ser
manipulado por al'oritmos diferentes.
4.1DECLARAO
Aisto #ue um ar#uivo um conjunto de re'istros, precisamos definir o
re'istro #ue compe o ar#uivo primeiro, para somente ent$o definir o ar#uivo. &e'undo
nosso e+emplo, na 7i7lioteca cada livro representado por uma fic,a e esta
implementada por um re'istro.
tipo LIVRO = registro
inteiro: CDIGO, ANO;
caractere: TITULO, AUTOR, ASSUNTO, EDITORA;
fimregistro;
3odemos ent$o definir o ar#uivo, se'undo a sinta+e a7ai+o(
tipo IDENTIFICADOR = arquivo composto de <tipo>;
IDENTIFICADOR : lista de variveis;
Onde(
IDENTIFICADOR V representa o nome do tipo ar#uivo-
<tipo> V nome do tipo re'istro previamente definido-
lista de variveis V variveis #ue ser$o do tipo ar#uivo definido-
Prof
a
Sirlei Lourdes Bach
Pg. 22
Completando toda a declara$o necessria para utilizarmos o ar#uivo,
teramos(
tipo LIVRO = registro
inteiro: CDIGO, ANO;
caractere: TITULO, AUTOR, ASSUNTO, EDITORA;
fimregistro;
tipo ARQLIVRO = arquivo composto de LIVRO;
LIVRO: FICHA;
ARQLIVRO: ACERVO;
Onde(
" LIVRO o identificador do tipo re'istro #ue formar o ar#uivo-
" ARQLIVRO o identificador do tipo associado ao ar#uivo, formado pelos tipos de
re'istro ICABO-
" FICHA a varivel do tipo re'istro LIVRO-
" ACERVO a varivel de ar#uivo ARQLIVRO.
4.1.1 Manipulao
Feneralizando, podemos admitir #ue todo ar#uivo possui maneira
semel,antes de ser manipulado, independentemente de como foi conce7ido.
1+emplificando, frente a um ar#uivo de livros de uma 7i7lioteca, voc% poderia Der
apenas dois tipos de atitudes diferentes(
a0 ;o caso de ser um leitor, voc% procura a informa$o da localiza$o de certo livro
atravs das fic,as #ue re'istram o acervo.
70 Como funcionrio da 7i7lioteca, voc% intenciona acrescentar al'uma informa$o a
respeito de al'um livro.
Conclumos #ue podemos consultar eEou acrescentar al'uma informa$o ao
ar#uivo. Demos, ent$o, al'oritmos 7sicos envolvidos nestas duas circunstKncias.
Prof
a
Sirlei Lourdes Bach
Pg. 23
!7rir a 'aveta do ar#uivo
!c,ar fic,a procurada
Copiar informaes da fic,a
>ec,ar 'aveta do ar#uivo
!c,ar posi$o de inser$o
Fuardar fic,a nova
>ec,ar 'aveta do ar#uivo
!7rir a 'aveta do ar#uivo 1
2
)
8
4.1.2 Abrindo um Arquivo
;$o se pode o7ter al'uma informa$o contida numa 'aveta sem antes a7ri"la.
1m nossos al'oritmos, isto ser feito atravs do se'uinte comando(
abra (ARQUIVO);
+n(e(
!BW=CAO V representa o identificador da varivel de ar#uivo previamente definida.
;o nosso e+emplo(
abra (ACERVO);
!ps a e+ecu$o do comando de a7ertura, a fic,a #ue est . disposi$o ser
sempre a primeira #ue foi nele armazenada.
4.1.3 Fechando um Arquivo
;$o devemos manter uma 'aveta a7erta depois de us"la, pois isso dei+aria
seu contedo e+posto por a'entes e+ternos #ue poderiam danificar sua inte'ridade. 3or
isso, convm sempre fec,ar os ar#uivos aps sua utiliza$o.
feche (ARQUIVO);
!BW=CAO V representa o identificador da varivel de ar#uivo previamente definida.
;o nosso e+emplo(
feche (ACERVO);
4.1.4 Copiando um Registro
;um ar#uivo, n$o se devem retirar informaes, pois se assim fosse este se
tornaria vazio rapidamente. 4evemos enfatizar #ue, via de re'ra, um ar#uivo n$o deve
ser ,consumi(o- e sim consul$a(o, e, para tal, precisamos copiar o contedo #ue nos
interessa em al'um lu'ar. =tilizamos para tal(
Prof
a
Sirlei Lourdes Bach
Pg. 24
copie (ARQUIVO, REGISTRO);
- ARQUIVO V representa o identificador da varivel de ar#uivo previamente definida.
- REGISTRO V representa o identificador de um re'istro de formato i'ual .#uele #ue
compe o ar#uivo-
;o nosso e+emplo(
copie (ACERVO, AUX);
Wuem copia, copia de um lu'ar para outro lu'ar diferente. ;este comando copiam"se as
informaes da posi$o corrente do ar#uivo para o re'istro especificado no comando, o
#ual possui um formato id%ntico ao do re'istro #ue compe o ar#uivo. Bessaltamos #ue
todos os campos do re'istro s$o copiados para os respectivos campos do re'istro
esta7elecido no comando.
4.1.5Guardando um Registro
3ara 'uardarmos um re'istro no ar#uivo, faz"se necessrio #ue este possua
estrutura$o de campos id%ntica . dos re'istros j armazenados, e ao mesmo tempo
esteja completamente preenc,ido. 3ara efetuar esta opera$o, temos o comando(
guarde (ARQUIVO, REGISTRO);
" ARQUIVO V representa o identificador da varivel de ar#uivo previamente definida-
" REGISTRO V representa o identificador de um re'istro de formato i'ual .#uele #ue
compe o ar#uivo.
1+emplo(
guarde (ACERVO, AUX);
Wuem 'uarda, 'uarda al'uma coisa em al'um lu'ar- neste comando 'uarda"se
sempre al'uma informa$o de dado re'istro para a posi$o atual do ar#uivo.
4.1.6Concepo Sequencial
Wuando criamos um ar#uivo, utilizamos determinado padr$o de
comportamento #ue esta7elece o modo pelo #ual os re'istros s$o armazenados no
ar#uivo, isto , o al'oritmos esta7elece a estrutura$o do ar#uivo. Caso a 'rava$o dos
Prof
a
Sirlei Lourdes Bach
Pg. 25
re'istros /#ue n$o est$o em ordem0 no ar#uivo seja feita de forma contnua, um aps o
outro, teremos esta7elecido uma circunstKncia de se#?%ncia no armazenamento dos
re'istros, o7tendo um ar#uivo cuja concep$o dita se!"encial#
;estas circunstKncias, discorremos #ue a localiza$o de #ual#uer um dos
re'istros #ue foi armazenado indeterminada, ou seja, para acessar um re'istro
especfico precisamos o7edecer a sua ordem de 'rava$o, o #ue implica percorrer todos
os re'istros #ue o antecedem.
Como e+emplo de um ar#uivo de concep$o se#?encial, podemos utilizar
uma lista particular de telefones, na #ual o usurio armazenou nomes e telefones das
pessoas . medida #ue as con,eceu.
&upondo #ue o usurio ten,a con,ecimento de mais uma pessoa, precisa
portanto armazenar mais um telefone em sua lista. Como esta lista j possui al'uns
nomes, #ue devido .s circunstKncias foram 'ravados um aps o outro, s possvel
armazenar um telefone aps o ltimo re'istro /nome X telefone0 armazenado, o #ue nos
leva ent$o a ter de desco7rir onde est o ltimo re'istro. 3ara tal, ser necessrio
percorrer todos os re'istros do ar#uivo, a partir do primeiro, at encontrar o fim do
ar#uivo, o #ue pode ser feito com o au+lio do comando(
avance (ARQUIVO);
1ste comando posiciona o ar#uivo na posi$o consecutiva, ou seja, no
pr+imo re'istro. &e utilizado repetidas vezes permite percorrer o ar#uivo passando por
uma srie consecutiva de re'istros. 1 tam7m com o au+lio de(
fda (ARQUIVO);
1sta instru$o retorna verdadeiro #uando a posi$o corrente o >im 4o
!r#uivo, e falso em caso contrrio. O al'oritmo da a'enda telefJnica, para 'uardar um
novo telefone, utilizando estes comandos, ficaria(
inicio
tipo PESSOA = registro
caractere: NOME;
inteiro: FONE;
fimregistro;
tipo PESSOAL = arquivo composto de PESSOA;
PESSOA : AUX;
PESSOAL: AGENDA;
abra (AGENDA);
repita
avance (AGENDA);
ate fda (AGENDA);
Prof
a
Sirlei Lourdes Bach
Pg. 26
leia (AUX.NOME, AUX.FONE)
guarde (AGENDA, AUX);
feche (AGENDA);
fim.
O7servamos #ue(
" sempre #ue o comando !7ra e+ecutado, deparamo"nos com o primeiro conjunto de
informaes armazenada, ou seja, a posi$o corrente do ar#uivo o primeiro
re'istro-
" somente podemos 'uardar o re'istro #uando este estiver completamente preenc,ido,
o #ue neste caso foi 'arantido com um comando de leitura so7re am7os os campos-
" o comando Fuarde armazenar todas as informaes contidas no re'istro /re'istro
completo0 na posi$o corrente do ar#uivo, a #ual foi premeditadamante selecionada
como a ltima posi$o do mesmo.
&upondo, a'ora, #ue nosso usurio precise desco7rir o telefone de al'um
previamente armazenado, novamente, por descon,ecer a posi$o no ar#uivo da
informa$o procurada, teremos de vascul,ar o ar#uivo a partir do incio, em 7usca do
re'istro #ue contm o nome da pessoa procurada, para desco7rir seu respectivo telefone.
Dodavia, se todos os re'istros do ar#uivo tiverem sido c,ecados e, c,e'ando"se ao fim
do ar#uivo, n$o foi possvel encontrar o nome procurado, conclumos #ue este n$o
e+iste, ou seja, n$o foi re'istrado anteriormente.
incio
tipo PESSOA = REGISTRO
caractere: NOME;
inteiro: FONE;
fimregistro;
tipo PESSOAL = arquivo composto de PESSOA ;
PESSOA: AUX;
PESSOAL:AGENDA;
caractere: NOMEPROCURADO;
abra (AGENDA);
leia (NOMEPROCURADO);
repita
copie (AGENDA, AUX);
avance (AGENDA);
at (AUX.NOME = NOMEPROCURADO) ou (fda (AGENDA));
se (AUX.NOME = NOMEPROCURADO) ento
escreva (AUX.FONE);
seno escreva (Telefone no registrado!!);
fimse;
feche (AGENDA);
fim.
Prof
a
Sirlei Lourdes Bach
Pg. 27
O7servamos #ue(
n$o possvel apenas avanar os re'istros, visto #ue precisamos verificar se o
contedo de cada um deles o contedo esperado, por isso copia"se para um re'istro
au+iliar cada um dos re'istros armazendos-
mesmo precisando apenas do nome armazenado no ar#uivo para verificar o sucesso
da pes#uisa, atravs do comando copie preenc,emos todo o re'istro au+iliar.
&e al'um con,ecido j cadastrado na a'enda mudasse de telefone, teramos
de localizar seu re'istro correspondente no ar#uivo, copiar o seu contedo num re'istro
au+iliar e, em se'uida, alterar o campo fone de modo a atri7uir"l,e o novo nmero.
Dendo num re'istro au+iliar as informaes atualizadas, 7asta 'rav"lo na mesma
posi$o em #ue se encontrava antes, isto , 'ravar o re'istro atualizado /au+iliar0 Mpor
cimaY do anti'o.
incio
tipo PESSOA = registro
caracter : NOME;
inteiro : FONE;
fim registro;
tipo PESSOAL = arquivo composto de PESSOA;
PESSOA : AUX;
PESSOAL : AGENDA;
caracter : NOMEPROCURADO;
inteiro : NOVOFONE;
abra(AGENDA);
leia(NOMEPROCURADO);
copie(AGENDA, AUX);
enquanto (AUX.NOME <> NOMEPROCURADO) e
(no fda(AGENDA)) faa
avance(AGENDA);
copie(AGENDA, AUX);
fim enquanto;
se (AUX.NOME = NOMEPROCURADO) ento
escreva AUX.NOME, possui fone, AUX.FONE;
escreva Novo telefone:;
leia(NOVOFONE);
AUX.FONE NOVOFONE;
guarde(AGENDA, AUX);
seno
escreva Telefone no registrado;
fim se;
Prof
a
Sirlei Lourdes Bach
Pg. 28
feche(AGENDA);
fim.
O7servamos #ue(
deve"se ter cuidado de n$o avanar a posi$o corrente depois de ter encontrado o
re'istro, pois precisamos, aps a atualiza$o, re'rav"lo na mesma posi$o-
til mostrar ao usurio #uais eram as informaes anteriores, visto #ue outra pessoa
ou ele mesmo pode ter atualizado o telefone anteriormente.
4.1.7 CONCEPO DRETA
!o criar um ar#uivo, podemos utilizar um al'oritmo #ue e+presse um padr$o
de comportamento r'ido, com o o7jetivo de estruturar o ar#uivo para facilitar sua
manipula$o.
! circunstKncia de armazenamento #ue perfaz esse al'oritmo a da
localiza$o do re'istro dentro do ar#uivo ficar diretamente relacionada a uma
informa$o constituinte deste, ou seja, atravs de um dos campos do re'istro podemos
determinar o lu'ar onde este est 'uardado, podendo acess"lo de modo instantKneo,
o7temos, ent$o, nestas circunstKncia, um ar#uivo de concep$o direta /ou randJmica0.
Wuando utilizamos um ar#uivo de concep$o randJmica, podemos acessar
um re'istro especfico diretamente, sem nos preocuparmos com sus antecessores,
utilizando neste acesso o mesmo campo #ue determinou sua posi$o no ar#uivo no
instante da 'rava$o.
O campo #ue determina a posi$o do re'istro no ar#uivo denominado
c$ave, pois a informa$o capaz de acessar o re'istro. ! c,ave determinada no
al'oritmo deve ser nica, pois nunca podemos armazenar dois re'istros diferentes em
uma mesma localiza$o.
1m um ar#uivo de concep$o direta, ao contrrio de um de concep$o
se#?encial, os re'istros n$o ficam localizados na ordem em #ue s$o 'ravados, o #ue leva
a entender #ue cada re'istro possui um lu'ar MreservadoY para ser 'uardado, lu'ar este
indicado atravs da c,ave.
3ara e+emplificar um ar#uivo de concep$o direta, ima'inemos a situa$o de
um professor #ue deseja armazenar informaes referentes a uma de suas turmas, como
o nome do aluno e suas #uatro notas /7imestrais0. 3ara tal, ele utiliza como c,ave o
Prof
a
Sirlei Lourdes Bach
Pg. 29
cdi'o de c,amada do aluno, informa$o #ue tam7m faz parte inte'rante do re'istro e
nica, ou seja, cada aluno possui seu nmero, n$o ,avendo possi7ilidade de nmeros
i'uais.
Z medida #ue o professor possui a nota de um aluno, precisa cadastr"la no
ar#uivo, 'uardar suas informaes no lu'ar MreservadoY para esse re'istro. ! posi$o
recon,ecida pela c,ave de acesso /cdi'o do aluno0 e, para #ue a posi$o corrente do
ar#uivo passe a ser a indicada pela c,ave, utilizamos o comando(
posicione (ARQUIVO, CHAVE);
Onde(
!BW=CAO( representa o identificador da varivel de ar#uivo previamente definida-
C<!A1( um inteiro /constante ou varivel0 #ue indica a posi$o corrente
desejada.
Construindo o al'oritmo para fazer o cadastramento dos alunos, o7temos(
incio
tipo ALUNO = registro
caractere : NOME;
inteiro : NUMERO;
real : N1, N2, N3, N4;
fim registro;
tipo SALA = arquivo composto de ALUNO;
ALUNO : AUX;
SALA : DIARIO;
abra(DIARIO);
repita
leia(AUX.NUMERO, AUX.N1, AUX.NOME);
se AUX.NUMERO > 0 ento
AUX.N2 0;
AUX.N3 0;
AUX.N4 0;
posicione(DIARIO, AUX.NUMERO);
guarde(DIARIO, AUX);
fim se;
Prof
a
Sirlei Lourdes Bach
Pg. 30
at AUX.NUMERO = 0;
feche(DIARIO);
fim.
Onde podemos o7servar #ue(
precisamos atri7uir ;1, ;2, ;) o valor 0 para #ue todos os campos a serem
armazenados estejam preenc,idos-
o comando posicione determina #ue a localiza$o no ar#uivo seja a determinada pelo
nmero de c,amada, #ue a c,ave de acesso utilizada pelo professor.
3ara sa7er a nota de al'um aluno j cadastrado, 7astar ao professor procurar
diretamente o conjunto de dados desse aluno no ar#uivo, ou seja, acessar o re'istro de
forma instantKnea atravs de sua c,ave.
incio
tipo ALUNO = registro
caractere : NOME;
inteiro : NUMERO;
real : N1, N2, N3, N4;
fim registro;
tipo SALA = arquivo composto de ALUNO;
ALUNO : AUX;
SALA : DIARIO;
inteiro : NUMEROALUNO;
abra(DIARIO);
leia(NUMEROALUNO);
posicione(DIARIO, NUMEROALUNO);
copie(DIARIO, AUX);
escreva AUX.NOME, possui nota, AUX.N1;
feche(DIARIO);
fim.
O7servamos #ue(
aps a e+ecu$o do comando posicione, o re'istro #ue est apto a ser manipulado o
indicado pela c,ave ;=G1BO!I=;O fornecida anteriormente-
utilizamos tam7m na sada de dados o nome do aluno, possi7ilidade 'erada por#ue
#uando se copia um re'istro ocorre a passa'em de todos os campos.
Outra possi7ilidade de utiliza$o de notas de aluno a altera$o de al'uma
nota ou inclus$o de uma nova nota, realizada so7re os re'istros anteriormente 'ravados(
Prof
a
Sirlei Lourdes Bach
Pg. 31
incio
tipo ALUNO = registro
caractere : NOME;
inteiro : NUMERO;
real : N1, N2, N3, N4;
fim registro;
tipo SALA = arquivo composto de ALUNO;
ALUNO : AUX;
SALA : DIARIO;
inteiro : NUMEROALUNO, QUALNOTA;
real : NOTA;
abra(DIARIO);
leia(NUMEROALUNO, QUALNOTA);
posicione(DIARIO, NUMEROALUNO);
copie(DIARIO, AUX);

escolha QUALNOTA
caso 1: NOTA AUX.N1;
caso 2: NOTA AUX.N2;
caso 3: NOTA AUX.N3;
caso 4: NOTA AUX.N4;
fim escolha
escreva AUX.NOME, possui nota, QUALNOTA, =, NOTA;
escreva Nova nota: ;
leia(NOTA);
escolha QUALNOTA
caso 1: AUX.N1 NOTA;
caso 2: AUX.N2 NOTA;
caso 3: AUX.N3 NOTA;
caso 4: AUX.N4 NOTA;
fim escolha
guarde (DIARIO, AUX);
feche(DIARIO);
fim.
O7servamos #ue(
ocorreu a li7erdade de escol,a em rela$o a #ual nota seria alteradaEcadastrada, o #ue
levou . utiliza$o de duas selees de mltipla escol,a, no instante da leitura do
re'istro e no instante da 'rava$o.
Prof
a
Sirlei Lourdes Bach
Pg. 32
4.2 ESTUDO DE CONCEPES
Aimos #ue, dependendo das circunstKncias de cria$o, um ar#uivo pode ser
conce7ido direta ou se#?encialmente, o #ue n$o o7ri'a necessariamente #ue ele seja
sempre manipulado como foi conce7ido- em outras palavras, um ar#uivo conce7ido
randomicamente pode ser acessado se#?encialmente, so7 certas condies especiais,
assim como um ar#uivo conce7ido se#?encialmente pode ser acessado diretamente se
for necessrio.
4.2.1 ARQUVO DRETO ACESSADO SEQENCALMENTE
=m ar#uivo conce7ido randomicamente passou por um certo planejamento,
#ue antecedeu sua cria$o, onde foi definida a c,ave de acesso do ar#uivo. Caso esse
planejamento ten,a sido inade#uado, pode permitir #ue surja a necessidade de se o7ter
informa$o do ar#uivo a partir de um campo n$o"c,ave. ;esta circunstKncia n$o
possvel acessar diretamente o re'istro procurado, pois n$o se sa7e sua posi$o. !ssim,
teremos de forar uma 7usca se#?encial no ar#uivo de concep$o randJmica.
Como e+emplo, ima'inemos uma faculdade #ue foi inau'urada em 1*Q0 e
#ue utiliza como c,ave o Be'istro Feral /da Carteira de Cdentidade0 de seus alunos num
re'istro(
BF(HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;mero de Gatrcula( HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;ome( HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Curso( HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;acionalidade( HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
;aturalidade( HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
4ata de ;ascimento( HHHHEHHHHEHHHHHHHH
&e o ar#uivo foi corretamente conce7ido, permitir o acesso atravs de um
posicionamento como o au+lio da c,ave BF. 3orm, a coordena$o dessa entidade
somente identifica seus alunos atravs de seus respectivos nmeros de matrcula e, nesta
circunstKncia, caso #ueira o7ter informaes so7re al'um aluno a partir de seu nmero
de matrcula, ter de fazer uma 7usca se#?encial no ar#uivo conce7ido randomicamente.
Prof
a
Sirlei Lourdes Bach
Pg. 33
incio
tipo ALUNO = registro
caracter: NOME, CURSO, NAC, NAT;
inteiro: RG, MAT, DATANASC;
fim registro
tipo FACULDADE = arquivo composto de ALUNO;
ALUNO: AUX;
FACULDADE: FLOG;
inteiro: MATPROCURADA;
abra(FLOG);
leia(MATPROCURADA);
copie(FLOG, AUX);
enquanto (AUX.MAT <> MATPROCURADA) e (no fda(FLOG)) faa
avance(FLOG);
copie(FLOG, AUX);
fim enquanto;
se AUX.MAT = MATPROCURADA ento
escreva AUX.MAT, AUX.NOME;
seno
escreva Aluno no registrado;
fim se;
feche(FLOG);
fim.
Com o decorrer do tempo, pode tornar"se mais usual o acesso a este ar#uivo
via nmero de matrcula, #uando cairia em desuso o seu acesso direto do modo como
fora planejado. ;essa ocasi$o, seria mel,or MconverterY o ar#uivo conce7ido da forma
anti'a para outro conce7ido randomicamente atravs da c,ave nmero de matrcula.
;essa faculdade, os cdi'os de matrcula s$o estruturados de modo #ue dos
sete d'itos desse cdi'o os #uatro primeiros representem o ano de matrcula /1*Q0,
1**0, 1**:, 20000 e os tr%s restantes, um nmero se#?encial para as *00 matrculas de
cada ano. &e fJssemos armazenar o primeiro aluno matriculado, ele seria re'istrado na
posi$o 1.*Q0.001 do ar#uivo, fazendo"se necessrio dei+ar inutilizadas as 1.*Q0.000
primeiras posies. 3odemos otimizar este espao de armazenamento, su7traindo
1.*Q0.000 do nmero de matrcula, como vemos em parte do al'oritmo de Mconvers$oY.
Prof
a
Sirlei Lourdes Bach
Pg. 34
incio
tipo ALUNO = registro
caracter: NOME, CURSO, NAC, NAT;
inteiro: RG, MAT, DATANASC;
fim registro
tipo FACULDADE = arquivo composto de ALUNO;
ALUNO: AUX;
FACULDADE: FLOG, NOVO;
inteiro: POS;
abra(FLOG);
abra(NOVO);
repita
copie(FLOG, AUX);
POS AUX.MAT - 1980000;
posicione(NOVO, POS);
guarde(NOVO, AUX);
avance(FLOG);
at fda(FLOG);
feche(FLOG);
feche(NOVO);
fim.
8.4.2 ARQUVO SEQENCAL ACESSADO RANDOMCAMENTE: ARQUVO
NDEXADO
=m ar#uivo conce7ido se#?encialmente foi preenc,ido na mesma se#?%ncia
em #ue as informaes foram sur'indo. Csto por defini$o, condena"o a 'ravar ou ler
informaes se#?encialmente, o #ue se tornaria inconveniente se este ar#uivo crescesse
muito e se a #uantidade de acessos fosse muito fre#?ente. 3orm, essa situa$o pode ser
contornada atravs de um ar#uivo conce7ido se#?encialmente /ou n$o0 de menor porte
/o #ue facilita a 7usca se#?encial0, #ue possui ar#uivada em cada re'istro a posi$o onde
encontrar cada re'istro ori'inal, ou seja, como uma enciclopdia /n$o"alfa7tica0 #ue
possui um volume de ndices, no #ual est$o relacionados em ordem alfa7tica os
assuntos e lo'o ao lado o volume e a p'ina de onde encontr"los, Macessando"os
randomicamenteY.
4essa forma, o novo ar#uivo criado denominado ar#uivo de ndices, e o
Prof
a
Sirlei Lourdes Bach
Pg. 35
ar#uivo ori'inal /conce7ido se#?encialmente0 c,amado de ar#uivo inde+ado, #ue
atravs do ndice fornecido pelo ar#uivo de ndices pode ser acessado diretamente.
Como e+emplo, tomemos a situa$o de uma empresa fundada em 1*Q:, #ue
re'istra seus funcionrios . medida #ue s$o contratados, tendo portanto, a circunstKncia
de concep$o de ar#uivo se#?encial possuindo o se'uinte re'istro(
;ome( HHHHHHHHHHHHHHHHHHHHHHHHHH ;
o
Carteira 3rofissional( HHHHHHHHHHHH
1ndereo( HHHHHHHHHHHHHHHHHHHHHHHHHHH C3>( HHHHHHHHHHHHHHHHHHHHHHH
Delefone( HHHHHHHHHHHHHHH Sairro( HHHHHHHHHHHHHHHHHH C13( HHHHHHHHHHH
4ata de !dmiss$o( HHHHHHHHHHHHHHHHH 4ata de 4emiss$o( HHHHHHHHHHHHHHH
1stado Civil( HHHHHHHHHHHHHHHHHHHHH ;
o
de 4ependentes( HHHHHHHHHHHHHHH
&alrio"Sase( HHHHHHHHHHHHHHHHHHHH Car'o( HHHHHHHHHHHHHHHHHHHHHHHHHH
O cdi'o do funcionrio estruturado, sendo #ue, dos cinco d'itos #ue o
compem, os dois primeiros representam o ano de admiss$o, os dois se'uintes o setor e
um ltimo um se#?encial do setor, #ue n$o fazia parte do ar#uivo anti'o.
3retende"se utilizar um ar#uivo inde+ado #ue utilize como c,ave o cdi'o do
funcionrio su7trado de Q:.000- assim, o funcionrio Q:.001 est armazenado na
posi$o 1, o Q:.002 na posi$o 2, e assim por diante.
Cdi'o 3osi$o ;ome 1ndereo ..... Car'o
1 Q:001 2 1 OO[ DBF= ... 1BC=\
2 Q:002 ) 2 <@= 4II4 ... \=\=@
) Q:00) m ) ]@= IOCO ... >4&\D
8 Q:008 1 8 @=< 41>& ... =\DO3
: Q:00: 8 : >&[ &[W! ... 3IG^G

n ttttt : m ]>] >@&4 ... \D1FC
1+emplificando uma utiliza$o, vejamos um al'oritmo de consulta ao
ar#uivo inde+ado(
incio
tipo REGFUNC = registro
caracter: NOME, CARGO, END, BR, DA, DD;
inteiro: CPF, TEL, CEP, ND, CP;
real: SAL;
lgico: SLRO;
fim registro;
tipo REGCOD = registro
Prof
a
Sirlei Lourdes Bach
Pg. 36
inteiro: POSICAO;
fim registro;
tipo FUNCIONARIO = arquivo composto de REGFUNC;
tipo CODIGO = arquivo composto de REGCOD;
FUNCIONARIO: CADFUNC;
CODIGO: ARQCOD;
REGFUNC: AUX1;
REGCOD: AUX2;
caracter: CODPROCURADO;
abra(CADFUNC);
abra(ARQCOD);
leia(CODPROCURADO);
se CODPROCURADO < 85000 ento
escreva Cdigo Invlido;
seno
posicione(ARQCOD, CODPROCURADO-85000);
copie(ARQCOD, AUX2);
posicione(CADFUNC, AUX2.POSICAO);
copie(CADFUNC, AUX1);
escreva AUX1.NOME, AUX1.CARGO;
fim se;
feche(CADFUNC);
feche(ARQCOD);
fim.
4.3ARQUVOS NA LNGUAGEM PASCAL
1m 3ascal estruturas de dados manipuladas fora do am7iente do pro'rama
s$o con,ecidas como ar#uivos. Considera"se como am7iente do pro'rama a memria
principal, onde nem sempre possvel ou conveniente manter certas estruturas de dados.
=m ar#uivo, armazenado num dispositivo de memria secundria, como discos e
dis#uetes, pode ser lido ou escrito por um pro'rama atravs de re'istros.
!ntes de se declarar ar#uivos em um pro'rama, deve ser declarar
primeiramento o seu tipo. !s formas das declaraes a se'uinte(
type identificador-do-tipo = file of tipo;
lista-de-identificadores : identificador-do-arquivo;
Prof
a
Sirlei Lourdes Bach
Pg. 37
t%pe uma palavra-chave;
identificador-de-tipo o identificador associado ao novo tipo;
file of so palavras reservadas;
tipo o tipo a que pertencem os registros do arquivo;
lista-de-identificadores so nomes associados aos arquivos.
1+emplo(
!proveitando a declara$o do tipo cadastro acima, a7ai+o se'uem e+emplos
de sua utiliza$o com ar#uivos.
type endereco = record
rua : string[40];
numero : integer;
CEP : real;
end;
type cadastro = record
nome : string[30];
ender : endereco;
CPF: real;
Sexo : char;
nascimento : real;
rg : real;
end;
arqcad = file of cadastro;
var
arquivo : arqcad;
ou tambm pode ser direto
arquivo2 : file of cadastro;
4.3.1Operaes com Arquivos (Pascal)
!s operaes 7sicas realizadas so7re um ar#uivo s$o a7ertura, leitura,
escrita e fec,amento.
! a%ertura de ar#uivos corresponde . a$o de se associar o ar#uivo
declarado no pro'rama com o ar#uivo fsico. O primeiro re'istro do ar#uivo fica
disponvel para leitura atravs do se'uinte comando(
reset(nome-do-arquivo);
Caso o ar#uivo j e+ista, para comear a escrever novamente no ar#uivo,
i'norando"se os re'istros anteriores, utiliza"se o se'uinte comando(
Prof
a
Sirlei Lourdes Bach
Pg. 38
re&rite(nome-do-arquivo);
O nome"do"ar#uivo o identificador do ar#uivo no pro'rama. 3ara se fazer uma
associa$o desta identifica$o interna com a identifica$o e+terna, usa"se o comando
assign, cuja forma (
assign(nome-do-arquivo,'nome-externo');
nome"e+terno o nome pelo #ual o ar#uivo con,ecido e+ternamente ao pro'rama.
O comando assign deve anteceder a a7ertura do ar#uivo e nunca deve ser
utilizado #uando o ar#uivo j estiver sendo manipulado.
O fec,amento do ar#uivo desvincula o ar#uivo do pro'rama, atualizando as
informaes do ar#uivo no am7iente do sistema operacional. 3ara se fec,ar um ar#uivo,
usa"se o comando(
close(nome-do-arquivo);
3ara ler um ar#uivo, ou seja ler o seu contedo, utilizado o se'uinte
comando(
read(nome-do-arquivo,registro);
1sse comando l% o contedo do re'istro corrente do ar#uivo associado .
nome"do"ar#uivo e armazena"o em na varivel re'istro, #ue deve ser do mesmo tipo do
ar#uivo. !ps a e+ecu$o desse comando, o re'istro corrente lido, e o pr+imo passa a
ser o re'istro corrente.
3ara escrever em um ar#uivo, utilizado o se'uinte comando(
&rite(nome-do-arquivo,registro);
1sse comando, #uando e+ecutado, 'rava no re'istro corrente do ar#uivo
associado . nome"do"ar#uivo o contedo da varivel re'istro.
=sando somente os comandos read e &rite, os re'istros est$o acessveis
somente se#uencialmente, ou seja, um re'istro ser acessado somente aps todos os seus
anterioes sejam acessados.
_ possvel acessar um re'istro #ual#uer do ar#uivo diretamente, desde #ue se
sai7a a sua posi$o fsica no ar#uivo. 1sse tipo de acesso conse'uido pelo comando(
see'(nome-do-arquivo,n);
Prof
a
Sirlei Lourdes Bach
Pg. 39
Com esse comando possvel acessar o n"simo re'istro do ar#uivo
associado . nome"do"ar#uivo, caso n seja menor #ue o nmero de re'istros do ar#uivo.
O primeiro re'istro o de nmero 0 /zero0.
3ara se o7ter o nmero de re'istros de um ar#uivo, utiliza"se o comando(
filesi(e(nome-do-arquivo);
Com a utiliza$o dos comandos see' e filesi(e temos um outro tipo de
or'aniza$o ou acesso aos ar#uivos( a or'aniza$o direta. ;este caso temos #ue escol,er
uma c,ave para inde+ar os re'istros, ou seja, essa c,ave ser utilizada para indicar em
#ue posi$o no ar#uivo um re'istro ser armazenado.
1+emplo(
program sequencial;
t%pe
endereco = record
rua : string[40];
numero : integer;
CEP : real;
end;
cadastro = record
nome : string[30];
ender : endereco;
CPF: real;
Sexo : char;
nascimento : real;
rg : real;
end;
arqcad = file of cadastro;
var
arq_in, arq_out : arqcad;
reg: cadastro;
)egin
assign(arq_out,'sample.dat'); {associando nome interno com nome
externo}
rewrite(arq_out); {abrindo arquivo para gravao}
write('Nome: ');
readln(reg.nome);
&*ile (reg.nome <> 'fim') do
)egin
write('Rua: ');
readln(reg.ender.rua);
write('Numero: ');
readln(reg.ender.numero);
write('CEP: ');
readln(reg.ender.CEP);
write('CPF: ');
readln(reg.CPF);
write('Sexo(M/F): ');
readln(reg.Sexo);
write('Data de Nascimento(dd/mm/aaaa): ');
readln(reg.nascimento);
write('RG: ');
readln(reg.rg);
Prof
a
Sirlei Lourdes Bach
Pg. 40
write(arq_out,reg); {grava registro aps o ltimo
registro do arquivo}
readln(reg.nome);
end;
close(arq_out);
assign(arq_in,'sample.dat'); {associando nome interno com nome
externo}
reset(arq_in); {abrindo arquivo para leitura}
read(arq_in,reg);
&*ile (not EOF(arq_in)) do
)egin
write(reg.ender,rua,' ');
write(reg.ender.numero,' ');
write(reg.ender.CEP,' ');
write(reg.CPF,' ');
write(reg.Sexo,' ');
write(reg.nascimento,' ');
writeln(reg.rg,' ');
end;
writeln('O nmero de registros do arquivo : ',filesi(e(arq_in));
end.
O pro'rama a se'uir e+emplifica a utiliza$o dos comando see'. ;este caso
assumimos #ue as c,aves est$o no intervalo entre 1 e 100.
program acesso_direto;
t%pe
endereco = record
rua : string[40];
numero : integer;
CEP : real;
end;
cadastro = record
chave : integer;
nome : string[30];
ender : endereco;
CPF: real;
Sexo : char;
nascimento : real;
rg : real;
end;
arqcad = file of cadastro;
tammax = 100;
var
arq_out : arqcad;
reg : cadastro;
)egin
assign(arq_out,'sample.dat'); {associando nome interno com nome
externo}
rewrite(arq_out); {abrindo arquivo para gravao}
write('Chave: ');
readln(reg.chave);
&*ile (reg.chave <> 0) do
)egin
if (reg.chave >= 1) and (reg.chave <= 100) t*en
Prof
a
Sirlei Lourdes Bach
Pg. 41
)egin
write('Nome: ');
readln(reg.nome);
write('Rua: ');
readln(reg.ender.rua);
write('Numero: ');
readln(reg.ender.numero);
write('CEP: ');
readln(reg.ender.CEP);
write('CPF: ');
readln(reg.CPF);
write('Sexo(M/F): ');
readln(reg.Sexo);
write('Data de Nascimento(dd/mm/aaaa): ');
readln(reg.nascimento);
write('RG: ');
readln(reg.rg);
seek(arq_out,chave-1);
write(arq_out,reg); { grava registro aps
o ltimo registro do arquivo}
end
else
)egin
writeln('Chave deve estar no intervalo
[1,100].');
end;
write('Chave: ');
readln(reg.chave);
end;
close(arq_out);
end.
Exerccio 28) Fazer um programa para ler registros com os campos nome, endereo,
telefone, e-mail, salrio, e armazen-los em um arquivo.
Observao: o ultimo registro possui o campo nome igual a "fim".
Exerccio 29) Fazer um programa para ler os dados do arquivo criado no exerccio
anterior e guardar em um outro arquivo (tipo texto) o nome e o salrio de
cada um e o valor total dos salrios.
Exerccio 30) Cadastrar n funcionrios de uma empresa e, depois disso, verificar se os n
funcionrios foram cadastrados. Necessrio para o cadastramento: nome,
cdigo e endereo.
Exerccio 31) Fazer um procedimento, que utilize o arquivo de funcionrios criado no
exerccio anterior, que imprima a segunda metade do arquivo.
Exerccio 32) Usando registro(Record, consequentemente Arquivo), faca um programa
que :
a) Armazene a seguinte informao do usurio EM UM ARRAY:
- cdigo (inteiro)
- nome (comprimento 30)
Prof
a
Sirlei Lourdes Bach
Pg. 42
- idade (inteiro)
- sexo (M= masculino, F= Feminino)
- endereo (comprimento 50)
- telefone (comprimento 10)
b) mprima toda as informaes dos usurios existentes no array
c) mprimir toda a informao da pessoa que possui a menor idade
d) Ordene o array pelo campo cdigo
Prof
a
Sirlei Lourdes Bach
Pg. 43
1 T2CNICAS #E PROGRAMA34O
5.1 ALGORTMOS COM QUALDADE
5.1.1 Regras para uma boa programao
.lgori$mos (e/em ser %ei$os "ara serem li(os "or seres humanos(
Den,a em mente #ue seus al'oritmos dever$o ser lidos por outras pessoas /e
por voc% mesmo0 de tal forma #ue possam ser corri'idos, rece7er manuten$o e ser
modificados.
Escre/a os comen$#rios no momen$o em 0ue es$i/er escre/en(o o algori$mo(
=m al'oritmo n$o documentado um dos piores erros #ue um pro'ramador
pode cometer e sinal de amadorismo. Como o o7jetivo de se escrever comentrios
facilitar o entendimento do al'oritmo, eles dever ser t$o 7em conce7idos #uanto o
prprio al'oritmo. 1 a mel,or maneira de se conse'uir isso escrev%"lo nos momentos
de maior intimidade com os detal,es, ou seja, durante a resolu$o do pro7lema.
+s comen$#rios (e/er'o acrescen$ar alguma coisa; n'o a"enas "ara %rasear os
coman(os(
O conjunto de comandos nos diz o #ue est sendo feito- os comentrios
dever$o dizer "or 0u1.
2se comen$#rios no "r3logo(
Dodo al'oritmo ou procedimento dever ter comentrios no seu prlo'o para
e+plicar o #ue ele faz e fornecer instrues para seu uso. !l'uns destes comentrios
seriam(
a0 =ma descri$o do #ue faz o al'oritmo-
70 Como utiliz"lo-
c0 1+plica$o do si'nificado das variveis mais importantes-
d0 1struturas de dados utilizadas-
Prof
a
Sirlei Lourdes Bach
Pg. 44
e0 Os nomes de #uais#uer mtodos especiais utilizados, juntamente com
refer%ncias nas #uais mais informaes possam ser encontradas-
f0 !utor- e
'0 4ata de escrita.
2$ili4e es"a&os em branco "ara melhorar a legibili(a(e(
1spaos em 7ranco, inclusive lin,as em 7ranco, s$o valiosssimos para
mel,orar a apar%ncia de um al'oritmo. 3or e+emplo(
a0 4ei+ar uma lin,a em 7ranco entre as declaraes e o corpo do al'oritmo-
70 4ei+ar uma lin,a em 7ranco antes e outra depois de um comentrio-
c0 &eparar 'rupos de comandos #ue e+ecutam funes l'icas distintas por
uma ou mais lin,as em 7ranco-
d0 =tilizar 7rancos para indicar preced%ncia de operadores. !o invs de M!
X S ` CY mais a'radvel a forma M! X S`CY.
Escolha nomes re"resen$a$i/os "ara suas /ari#/eis(
Os nomes das variveis dever$o identificar, o mel,or possvel, as #uantidades
#ue elas representam. 3or e+emplo, O \ X ^ muito menos claro #ue 3B1NO
C=&DO X I=CBO. =ma sele$o ade#uada de nomes de variveis o princpio mais
importante da le'i7ilidade de al'oritmos.
2m coman(o "or linha 5 su%icien$e(
! utiliza$o de vrios comandos por lin,a prejudicial por vrias razes,
dentre as #uais destacam"se(
a0 O al'oritmo fica mais ile'vel-
70 O al'oritmo fica mais difcil de ser depurado.
1+emplo(
A 14.2; I 1; enquanto I < 10 faa X X + 1; K I * K; I I
+ 1; fim enquanto;
O mesmo e+emplo com cada comando em uma lin,a(
A 14.2;
Prof
a
Sirlei Lourdes Bach
Pg. 45
I 1;
enquanto I < 10 faa
X X + 1;
K I * K;
I I + 1;
fim enquanto;
Caso desejssemos incluir um novo comando dentro do en0uan$o, no
primeiro caso ser necessrios rescrever toda a lin,a.
2$ili4e "ar1n$eses "ara aumen$ar a legibili(a(e e "re/enir)se con$ra erros(
1+emplo(
Com poucos par%nteses Com par%nteses e+tras
! ` S ` CE/4 ` 1 ` >0
! ` SEC ` 4E1 ` >
! `` S `` C
!ESECE4
O a \ ou W
! X S b C
/! ` S ` C0 E /4 ` 1 ` >0
///! ` S0E/C0 ` 40E10 ` >
/! `` S0 `` C
//!ES0EC0E4
/O a \0 ou W
/! X S0 b C
2$ili4e ,in(en$a&'o- "ara mos$rar a es$ru$ura l3gica (o algori$mo(
! indenta$o n$o deve ser feita de forma catica, mas se'undo certos padres
esta7elecidos.
6embre)se: $o(a /e4 0ue %or %ei$a uma mo(i%ica&'o no algori$mo, os comen$#rios
associa(os (e/em ser al$era(os, e n'o a"enas os coman(os(
!ntes n$o comentar do #ue dei+ar um comentrio errado.
1+emplos de trec,os de al'oritmos mal escritos e a anlise das re'ras de
pro'rama$o violadas ser$o apresentados a se'uir. 1m al'uns casos, o al'oritmo
e#uivalente, com #ualidade ser apresentado.
SOMA 0; {Atribui o valor 0 varivel SOMA}
I 1; {Atribui o valor 1 varivel I}
enquanto I < 18 faa {Enquanto I no ultrapassar o valor
SOMA SOMA + I; {18, ser atribudo o valor da ex-
I I + 1; {presso SOMA + I varivel SOMA e o
{valor de I ser incrementado de 1
Prof
a
Sirlei Lourdes Bach
Pg. 46
fim enquanto
escreva (SOMA); {imprime o valor de SOMA}
O al'oritmo acima fere principalmente a re'ra n
o
). 1le deveria ser escrito
para ser considerado Mde #ualidadeY da se'uinte maneira(
incio {faz a soma dos nmeros inteiros de 1 a 18}
{Autor: EU - data: 01/01/2000}
inteiro : SOMA, { o somatrio}
I; {nmero inteiro gerado}
SOMA 0;
I 0;
enquanto (I < 18) faa {gera os nmeros inteiros e calcula}
SOMA SOMA + I; {o somatrio}
I I + 1;
fim enquanto;
fim.
5.1.2 METODOLOGA DE DESENVOLVMENTO DE ALGORTMOS
=ma das dificuldades naturais de um iniciante em pro'rama$o comear a
desenvolver um al'oritmo para resolver um dado pro7lema. Os passos se'uintes, se
se'uidos, podem au+iliar nesta tarefa(
3asso 1( leia cuidadosamente a especifica$o do pro7lema at o final. /fazer
anotaes0
ENTENDEU falso;
VEZES 0;
3asso 2(
enquanto no ENTENDEU faa
se VEZES <= 4 ento
leia a especificao at o final;
VEZES VEZES + 1;
seno
pergunte ao professor ou a quem especificou o
problema at entender;
ENTENDEU verdadeiro;
fim se;
fim enquanto;
Prof
a
Sirlei Lourdes Bach
Pg. 47
3asso )( Ievantar e analisar todas as sadas e+i'idas na especifica$o do pro7lema.
/impresses0
3asso 8( Ievantar e analisar todas as entradas citadas na especifica$o do pro7lema.
/leituras0
3asso :( Aerificar se necessrio 'erar valores internamente ao al'oritmo e levantar
as variveis necessrias e os valores iniciais de cada uma. /comentar0
3asso P( Ievantar e analisar todas as transformaes necessrias para, dadas as
entradas e valores 'erados internamente, produzir as sadas especificadas. /comentar0
3asso 9( Destar cada passo do al'oritmo, verificando se as transformaes
intermedirias e+ecutadas est$o conduzindo aos o7jetivos desejados. =tilizar, sempre
#ue possvel valores de teste #ue permitam prever os resultados a "riori. /comentar0
3asso Q( >azer uma reavalia$o 'eral, ela7orando o al'oritmo atravs da inte'ra$o
das partes. /rever comentrios0
Z medida #ue o leitor v ad#uirindo maior amadurecimento na confec$o de
al'oritmos, vrios dos passos descritos v$o sendo feitos automaticamente. Becomenda"
se #ue no incio do aprendizado e #uando se tratar de pro7lemas mais comple+os, os
passos sejam se'uidos formalmente.
5.2 O DESENVOLVMENTO TOP-DOWN
!ntes de escrever um pro'rama, de fato sempre necessrio um processo de
raciocnio, #ue leva de uma anlise do pro7lema dado, passando por um al'oritmo em
termos 'erais at um al'oritmo detal,ado, #ue consiste em uma se#?%ncia de passos
simples #ue podem ser diretamente e+pressados em termos de comandos numa
lin'ua'em de pro'rama$o.
;a pro'rama$o estruturada as diferentes fases deste processo de concep$o
Prof
a
Sirlei Lourdes Bach
Pg. 48
de um pro'rama s$o fi+adas e+plicitamente por escrito, e n$o s V como uso comum V
o produto final( o pro'rama na forma em #ue ser su7metido . m#uina. O7temos no
final n$o somente um pro'rama /na lin'ua'em #ue foi escol,ida para a codifica$o0,
mas tam7m uma documenta$o de todo o processo de solu$o do pro7lema.
3ara as estruturas de dados usamos i'ualmente representaes a7stratas de
acordo com as necessidades do pro7lema, #ue v$o sendo refinadas at c,e'ar .
representa$o implementvel na lin'ua'em de pro'rama$o. Csso permite desenvolver
passo a passo o al'oritmo"solu$o e as estruturas de dados em termos das cate'orias
relevantes ao pro7lema, e n$o das peculiaridades de uma lin'ua'em de pro'rama$o.
Cada nova fase desse desenvolvimento Mde cima para 7ai+oY o7tida por
MrefinamentoY da fase anterior, at c,e'ar a um nvel de detal,amento #ue permita
implementar o al'oritmo diretamente na lin'ua'em de pro'rama$o.
5.3 PROGRAMAO MODULAR
!t o momento as estruturas de controle /se#?%ncia, sele$o e repeti$o0 de
um al'oritmo definia"o como um 7loco l'ico /incio e fim0.
Z medida #ue os pro7lemas a serem solucionados se tornam mais comple+os,
ou seja, apresentam uma variedade maior de situaes diferentes a serem resolvidas,
temos, ent$o, uma srie de pe#uenos pro7lemas, cujas respectivas solues inte'rar$o o
conjunto de aes definitivo.
Wuando tal conjunto de aes construdo, podemos nos deparar literalmente
com um amontoado de aes #ue afetam a le'i7ilidade por#ue n$o ficam claras e
concisas as pe#uenas partes l'icas #ue solucionam cada pe#ueno pro7lema, o #ue
dificulta a assimila$o desta constru$o por outras pessoa, alm de invia7ilizar uma
perfeita coes$o interna do al'oritmo.
Godulariza$o a tcnica #ue com7ate tais circunstKncias e e+plicita as
pe#uenas solues.
5.3.1 MDULOS
Gdulos s$o 7locos l'icos de um al'oritmo #ue visam aumentar a
funcionalidade das partes do conjunto solu$o.
Prof
a
Sirlei Lourdes Bach
Pg. 49
5.3.2 BLOCOS
=m 7loco consiste em um conjunto de declaraes e comandos delimitados
pelas palavras incio e fim.
5.3.3 DECLARAO
3ara modularizar um al'oritmo necessitamos de uma sinta+e para e+pressar
esta nova estrutura compreendida por mdulos. 1sta sinta+e ser vista mais tarde, uma
vez #ue o mdulo pode assumir mais de uma forma. ;este momento importante sa7er
#ue ao mdulo atri7udo um nome /Cdentificador0.
4e certo modo, precisamos uniformizar determinado conjunto de aes afins
#ue o7edeam a mesma estrutura$o de um al'oritmo com o7jetivo de representar um
7loco l'ico em especial.
OS&(
a0 Wuando construmos um mdulo estamos construindo um al'oritmo em
instKncia menor, ou seja, um pe#ueno conjunto solu$o praticamente
independente.
70 1ste su7"al'oritmo pode inclusive utilizar outros mdulos.
c0 Com o empre'o de su7"al'oritmos utilizados especificamente para
resolver pro7lemas pe#uenos, aumentou"se o 'rau de clareza, facilitando a
compreens$o de cada parte isoladamente, assim como o relacionamento
entre elas.
5.3.4 MANPULAO
! ativa$o de um mdulo ocorre #uando um determinado ponto do al'oritmo
contm o identificador #ue foi usado na defini$o do mdulo, o #ue con,ecido por
Mc,amadaY ou Mativa$oY do mdulo #ue por sua vez representa a e+ecu$o das aes
deste na#uele trec,o do al'oritmo.
5.3.5 ESCOPO DE VARVES
Dodas as variveis utilizadas no al'oritmo e #ue encontram"se declaradas no
seu incio, tornam"se possveis de aplica$o por #ual#uer mdulo inte'rante. 1stas
variveis s$o denominadas 'lo7ais. 1m al'uns casos uma determinada varivel
Prof
a
Sirlei Lourdes Bach
Pg. 50
utilizada apenas por um mdulo especfico, o #ue n$o justifica uma defini$o 'lo7al,
pois somente se fazem necessrios o con,ecimento e a utiliza$o dessa varivel dentro
dos limites desse 7loco l'ico. 1sta situa$o ocorre #uando a varivel declarada
internamente ao mdulo e denominada varivel local.
OS&(
a0 =ma varivel declarada dentro de um 7loco s con,ecida dentro deste 7loco-
70 &e uma varivel O declarada em um 7loco j foi declarada como 'lo7al e com o
mesmo nome declarada num 7loco mais interno, a varivel vlida no 7loco mais
interno ser a declarada neste 7loco.
5.3.6 PROCEDMENTOS
=m procedimento uma ferramenta de pro'rama$o #ue serve 7asicamente a
dois o7jetivos(
1vitar #ue uma certa se#?%ncia de comandos #ue ocorra em vrios locais de um
al'oritmo ten,a de ser escrita repetidamente nestes locais-
4ividir a estrutura de um al'oritmo em partes fec,adas e lo'icamente coerentes.
!l'oritmos contm muitas vezes 'rupos de comandos i'uais e repetidos em
vrias partes de seu corpo. Os procedimentos permitem economia de tempo, de escrita e
redu$o no taman,o de al'oritmos.
1m al'uns casos, os trec,os de comandos repetidos s$o id%nticos, porm
utilizam operandos diferentes. ;estes casos, a utiliza$o de procedimentos permitem,
tam7m, uma nica escrita dos comandos #ue ao serem e+ecutados, utilizam os
parKmetros ou operandos ade#uados a cada ocorr%ncia.
Sem mais importante #ue esta primeira utilidade do uso de procedimentos, o
seu uso na modulariza$o de al'oritmos torna"se uma ferramenta indispensvel na
ela7ora$o de al'oritmos mais comple+os e de maior taman,o.
! divis$o de estruturas de al'oritmos em partes l'icas uma tcnica
indispensvel em pro'rama$o estruturada. ! divis$o de al'oritmos em procedimentos,
alm de facilitar a ela7ora$o do al'oritmo permite uma mel,or documenta$o e
verifica$o de sua corre$o. Cada mdulo implementado como um procedimento deve
conter sua prpria documenta$o e pode ser verificado independentemente.
Prof
a
Sirlei Lourdes Bach
Pg. 51
!dicionalmente a modulariza$o por procedimentos pode facilitar muito o
tra7al,o de e#uipes de pro'ramadores no sentido #ue um al'oritmo pode ser dividido em
partes, testado e catalo'ado separadamente.
5.3.7 ESTRUTURAO DOS MDULOS DE UM ALGORTMO
=ma su7rotina /procedimento0 nada mais #ue um al'oritmo
,ierar#uicamente su7ordinado a um outro al'oritmo comumente c,amado de mdulo
principal. 4a mesma forma, um procedimento pode conter outros procedimentos
anin,ados.
5.3.8 TPOS BSCOS DE SUBROTNAS
1+istem dois tipos 7sicos de su7rotinas(
a0 3rocedimentos-
70 >unes.
)R*+,-./,01*S
Os procedimentos s$o utilizadas #uando um conjunto de comandos repete"se
ao lon'o do al'oritmo. 1nt$o, para n$o escrevermos vrias vezes o mesmo 7loco de
comandos, usamos os procedimentos.
&inta+e(
procedimento IDENTIFICADOR (parmetros);
Comandos;
fim procedimento IDENTIFICADOR;
Prof
a
Sirlei Lourdes Bach
Pg. 52
!
S
4
C
Onde(
" C41;DC>CC!4OB o nome de refer%ncia do procedimento-
" parKmetros a lista de variveis #ue ser$o passadas ao procedimento para serem
manipuladas no seu interior. ;a defini$o dos parKmetros tam7m devem ser
declarados seus tipos. ;em toda procedimento utiliza"se de parKmetros, portanto um
item opcional.

1+emplo(
procedimento LINHA (inteiro: COMPRIMENTO);
inteiro : I;

para I 1 at COMPRIMENTO faa
escreva -;
fim para;
fim procedimento LINHA;
23045,S
!s funes constituem um tipo especial de su7rotina, 7astante semel,ante ao
procedimento, porm tem a caracterstica especial de retornar ao al'oritmo c,amador um
valor associado ao nome da fun$o. 1sta caracterstica permite uma analo'ia com o
conceito de fun$o na matemtica.
! utiliza$o de outras funes no al'oritmo como por e+emplo, seno,
tan'ente ou #ual#uer outra fun$o MespecialY, pode ser feito declarando"se um
procedimento fun$o.
! declara$o de uma fun$o tam7m semel,ante a de um procedimento.
4ifere somente na especifica$o do tipo da mesma, ou seja, do tipo de valor #ue ser
retornado. !pesar de terem sido citadas apenas funes numricas, elas podem ser
l'icas ou literais.
Sin$axe(
funo tipo de retorno: IDENTIFICADOR (parmetros);
comandos;
fim funo IDENTIFICADOR;
Onde(
Prof
a
Sirlei Lourdes Bach
Pg. 53
" tipo de retorno o tipo de dado #ue a fun$o retornar /inteiro, real, l'ico,
caracter0-
" C41;DC>CC!4OB o nome de refer%ncia da fun$o-
" parKmetros a lista de variveis #ue ser$o passadas . fun$o para serem manipuladas
no seu interior. ;a defini$o dos parKmetros tam7m devem ser declarados seus
tipos. ;em toda fun$o utiliza"se de parKmetros, portanto um item opcional.
1+emplo(
funo lgico: E_PAR (inteiro : N);
se (N mod 2 = 0) ento
E_PAR verdadeiro
seno
E_PAR falso;
fim se;

fim funo E_PAR;
5.3.9 PASSAGEM DE PARMETROS
! transfer%ncia de informaes de e para su7rotinas utilizando"se variveis
'lo7ais n$o constitui uma 7oa disciplina de pro'rama$o.
1stas transfer%ncias precisam ser mais formalizadas e documentadas a 7em
da le'itimidade, documenta$o e or'aniza$o do pro'rama ela7orado.
1m al'oritmos, a transfer%ncia de informaes de e para su7rotinas pode ser
feita com a utiliza$o de parKmetros.
1sta utiliza$o formaliza a comunica$o entre mdulos. !lm disso, permite
#ue um mdulo seja utilizado com operandos diferentes, dependendo do #ue se deseja
do mesmo.
3arKmetros de defini$o s$o o7jetos utilizados dentro dos su7rotinas #ue em
cada ativa$o representam o7jetos de nvel mais e+terno. ! forma de se utilizar
parKmetros em su7rotinas foi apresentada anteriormente.
! c,amada de uma su7rotina aparece numa e+press$o e tem a se'uinte forma(
NOME DA SUBROTINA(Lista de parmetros de chamada);
Prof
a
Sirlei Lourdes Bach
Pg. 54
1+emplo(
incio
real : A, B, C;
subrotina EXEMPLO (real: VALOR_1, VALOR_2, VALOR_3);
real : MAIOR_VALOR;

MAIOR_VALOR VALOR_1;
se (VALOR_2 > MAIOR_VALOR) ento
MAIOR_VALOR VALOR_2;
fim se;

se (VALOR_3 > MAIOR_VALOR) ento
MAIOR_VALOR VALOR_3;
fim se;
escreva O maior valor : , MAIOR_VALOR;
fim subrotina EXEMPLO;
{corpo do programa principal}
leia Digite 3 nmeros:; A, B, C;
EXEMPLO (A, B, C);
fim.
5.3.10 PASSAGEM DE PARMETROS POR VALOR
;a passa'em de parKmetros por valor /ou por cpia0 o parKmetro real
calculado e uma cpia de seu valor fornecida ao parKmetro formal, no ato da invoca$o
da su7rotina. ! e+ecu$o da su7rotina prosse'ue normalmente e todas as modificaes
feitas no parKmetro formal n$o afetam o parKmetro real, pois tra7al,a"se apenas com
uma cpia do mesmo.
1+emplo(
incio
inteiro : X;
subrotina PROC (inteiro: Y);
Y Y + 1;
escreva Durante = , Y;
fim subrotina PROC;
X 1;
escreva Antes = , X;
Prof
a
Sirlei Lourdes Bach
Pg. 55
PROC (X);
escreva Depois = , X;
fim.
O al'oritmo anterior fornece o se'uinte resultado(
!ntes 6 1-
4urante 6 2-
4epois 6 1-
1ste tipo de a$o possvel por#ue, neste mecanismo de passa'em de
parKmetros, feita uma reserva de espao em memria para os parKmetros formais, para
#ue neles seja armazenada uma cpia dos parKmetros reais.
5.3.11 PASSAGEM DE PARMETROS POR REFERNCA
;este mecanismo de passa'em de parKmetros n$o feita uma reserva de
espao em memria para os parKmetros formais. Wuando uma su7rotina com parKmetros
passados por refer%ncia c,amada, o espao de memria ocupado pelos parKmetros reais
compartil,ado pelos parKmetros formais correspondentes. !ssim, as eventuais
modificaes feitas nos parKmetros formais tam7m afetam os parKmetros reais
correspondentes.
=ma mesma su7rotina pode utilizar diferentes mecanismos de passa'em de
parKmetros, para parKmetros distintos. 3ara diferenciar uns dos outros, convencionou"se
colocar o prefi+o var antes da defini$o dos parKmetros formais passados por refer%ncia.
&e por e+emplo um procedimento tem o se'uinte ca7eal,o(
subrotina PROC (inteiro: X, Y; real: var Z; real: J)
1nt$o(
" O e \ s$o parKmetros formais do tipo inteiro e s$o passados por valor-
" ^ um parKmetro formal real passado por refer%ncia-
" @ um parKmetro formal real passado por valor.
Prof
a
Sirlei Lourdes Bach
Pg. 56
O e+emplo do item anterior, alterado para #ue o parKmetro \ da su7rotina
seja passado por refer%ncia, torna"se(
incio
inteiro : X;
subrotina PROC (inteiro: var Y);
Y Y + 1;
escreva Durante = , Y;
fim subrotina PROC;
X 1;
escreva Antes = , X;
PROC (X);
escreva Depois = , X;
fim.
O resultado do al'oritmo modificado (
!ntes 6 1-
4urante 6 2-
4epois 6 2-
5.4PROCEDMENTOS E FUNES EM PASCAL
! lin'ua'em 3ascal oferece facilidades necessrias no tocante a
modulariza$o de pro'ramas, por meio de procedimentos e funes, #ue permitem a
confec$o de pro'ramas modulares e 7em estruturados. ! idia principal do conceito de
modulariza$o, informalmente falando, dividir o pro'rama em su7"pro'ramas, o #ue
torna o tra7al,o de desenvolvimento e manuten$o menos des'astante. 1m 3ascal o
conceito de modulariza$o implementado por meio de su7"rotinas. =m mdulo em
3ascal definido como sendo uma procedure ou uma function. 1sses mdulos podem
ter variveis prprias ou utilizar as variveis declaradas no pro'rama principal. 1
possvel a declara$o de variveis com o mesmo identificador em mdulos diferentes no
mesmo nvel ou em mdulos anin,ados /um mdulo dentro do outro0. Conforme o
conte+to em est inserido, uma varivel pode ser considerada uma varivel local ou um
varivel 'lo7al. 3or e+emplo( as variveis declaradas em um mdulo ! s$o
considereadas locais . !, porm s$o consideradas variveis 'lo7ais aos su7"mdulos
contidos em !. 4essa forma, todas as variveis declaradas no pro'rama principal s$o
Prof
a
Sirlei Lourdes Bach
Pg. 57
consideradas 'lo7ais as procedimentos.
Aariveis locais com o mesmo identificador declaradas em mdulos
diferentes e no mesmo nvel s$o invisveis umas para o outras, ou seja, n$o causam
conflito. Wuando os mdulos est$o anin,ados, as variveis declaradas em cada mdulo,
podem ser vistas eEou utilizadas pelos respectivos su7"mdulos. 3orm, n$o ser$o
utilizadas se forem declaradas variveis com o mesmo identificador em seus su7"
mdulos, onde valer somente as variveis locais. Ou seja, se forem declaradas variveis
locais em um mdulo ! com o mesmo identificador #ue as variveis 'lo7ais . !, valer
as variveis locais. Csso define as re'ras de escopo das variveis, ou seja, at onde as
variveis podem ser utilizadas eEou visveis . outros mdulos. ;o caso de e+istirem
variveis locais e 'lo7ais com o mesmo nome, alteraes feitas nas variveis locais n$o
afetam as 'lo7ais. @ no caso onde um varivel 'lo7al modificada, o pr+imo instru$o
#ue acess"la ir encontrar o valor dessa ltima atualiza$o.
1+emplo(
program A;
{ declarao de variveis }
var m, n : real;
proced"re B;
{ declarao de variveis }
var i, j : integer;
)egin
{ corpo do procedimento B }
end;
proced"re C;
{ declarao de variveis }
var
i, j : integer;
k, l : real;
proced"re D;
{ declarao de variveis }
var k, l : integer;
)egin
{ corpo do procedimento D }
end;
)egin
{ corpo do procedimento C }
end;
)egin
{ corpo do programa principal }
end.
!s variveis i e j declaradas nos procedimentos A e B s$o invisveis entre si,
portanto n$o causam conflito.
!s variveis k e l s$o vlidas como inteiros em C. !pesar de serem 'lo7ais, s$o
Prof
a
Sirlei Lourdes Bach
Pg. 58
invisveis a D, pois foram redeclaradas como tipo real. _ como se k e l fossem
declaradas com outros identicadores.
!s variveis i e j declaradas em C s$o 'lo7ais a D, assim como as variveis m e
n s$o 'lo7ais . todos os procedimentos.
5.4.1 Mdulos (procedimentos)
Convencionamos a#ui #ue mdulos do 3ascal como procedimentos do 3ascal.
3rocedimento um trec,o do pro'rama #ue possui seus o7jetos /varives, ar#uivos, etc.0
e comandos prprios e #ue para ser e+ecutado deve ser ativado por um pro'rama
principal ou por outro procedimento. ! cria$o de um procedimento em 3ascal feita
atravs de sua declara$o em um pro'rama, ou seja, o procedimento um o7jeto da
lin'ua'em #ue deve ser declarado, como os demais o7jetos, no incio do pro'rama ou de
outro procedimento. =m prodecimento em 3ascal pode, por sua vez, conter outros
procedimentos, #ue s ser$o con,ecidos dentro do mesmo.
! declara$o de um procedimento em 3ascal constituda de um ca7eal,o e
de um corpo. O ca7eal,o identifica o procedimento atravs de um nome, e o corpo
contm as declaraes dos o7jetos locais, alm de comandos e estruturas do
procedimento. ! ativa$o de um procedimento, atendidas .s condies de escopo, feita
atravs da refer%ncia ao seu nome em al'um ponto do pro'rama. 1m 3ascal e+istem dois
tipos de procedimentos( procedure e function. ;$o confunda procedimento com a
tradu$o de procedure, pois esta ltima uma palavra reservada do 3ascal, #ue define
um tipo de procedimento.
proced"re
O o7jetivo de se declarar uma procedure associ"la a um identificador para
#ue a mesma possa ser ativada por um comando do pro'rama. ! sua declara$o feita
da se'uinte forma(
proced"re nome;
declarao dos objetos locais proced"re
+#,-
comandos da proced"re
#$;
! c,amada ou ativa$o de uma procedure feita referenciando"se o seu
Prof
a
Sirlei Lourdes Bach
Pg. 59
nome no local do pro'rama onde a mesma deve ser ativada, ou seja, onde a sua e+ecu$o
deve ser iniciada. !o terminar a e+ecu$o dos comandos de um procedure, a se#?%ncia
do pro'rama retorna sempre . instru$o se'uinte #ue provocou a sua c,amada. ! nvel
de e+ecu$o, a c,amada de uma procedure valeria como se fosse feita uma cpia dos
comandos do procedimento no local do pro'rama onde foi ativada, ajustando"se os
o7jetos locais para atender as re'ras de escopo.
1+emplo(
program procedimentos;
var
{declarao das variveis do programa principal }
proced"re entrada_de_dados;
var
{ declarao das variveis do procedimento entrad_de_dados }
)egin
{ comandos do procedimento entrada_de_dados }
end;
proced"re processa_dados;
var
{ declarao das variveis do procedimento processa_dados }
)egin
{ comandos do procedimento processa_dados }
end;
proced"re imprime_resultados;
var
{ declarao das variveis do procedimento imprime_resultados }
)egin
{ comandos do procedimento imprime_resultados }
end;
)egin
{corpo programa principal }
entrada_de_dados;
processa_dados;
imprime_resultados;
end.
1ste e+emplo ilustra como procedimentos podem facilitar o entendimento do
pro'rama. ;este caso, o corpo do pro'rama principal se contitui apenas de tr%s
c,amadas . procedimentos.
f"nction
!s functions s$o como procedimentos. ;o entanto, s$o distintas pela
Prof
a
Sirlei Lourdes Bach
Pg. 60
caracterstica de retornar um valor. Csso caracteriza o fato de uma function ser ativada
na avalia$o de e+presses, como as funes matemticas. Como vimos, a lin'ua'em
3ascal possui al'umas funes pr"definidas, o #ue faz com #ue o pro'ramador n$o
ten,a #ue implement"las.
! declara$o de uma function tem como o7jetivo associ"la a um
identificador para #ue possa se ativada em uma e+press$o do pro'rama. ! declara$o de
uma function feita da se'uinte forma(
f"nction nome: t
declararao dos objetos locais f"nction
+#,-
comandos da f"nction
.
.
.
nome := X;
#$;
t tipo #ue a fun$o ir retornar. O o valor do mesmo tipo t #ue ser retornado pela
fun$o. Aemos a#ui #ue o corpo da fun$o precisa necessariamente conter um comando
de atri7ui$o no #ual o nome da function aparece . es#uerda do sinal de atri7ui$o. !
ativa$o de uma function feita posicionando"se o nome da mesma em uma e+press$o
de mesmo tipo.
1+emplo(
program exemplo_function;
{program que calcula o fatorial de N com a utilizao de uma
funo}
var N : integer;
f"nction fatorial : integer;
var i, acumul : integer;
)egin
acumul := 1;
i := 1;
&*ile (i <= N) do
)egin
acumul := acumul * i;
i := i + 1;
end;
fatorial := acumul;
end;
)egin
write('Digite o valor de N: ');
readln(N);
writeln('O valor do Fatorial de ',N , ' = ', fatorial);
end.

Prof
a
Sirlei Lourdes Bach
Pg. 61
5.4.2 Parmetros de procedimentos
Aimos #ue as procedures e functions utilizam o7jetos /variveis, ar#uivos,
etc0 locais /declarados em seu corpo0 e o7jetos 'lo7ais /declarados nos nveis mais
e+ternos0. Aariveis 'lo7ais servem para implementar um mecanismo de trasmiss$o de
informaes de um nvel mais e+terno para um nvel mais interno, como o e+emplo do
fatorial acima. !nalo'amente, o mesmo mecanismo pode ser usado inversamente para
transmitir informaes de dentro para fora dos procedimentos, ou seja, #uando se altera
o contedo de uma varivel 'lo7al dentro de um procedimento, a pr+ima instru$o aps
o trmino do procedimento ter disponvel o valor da ltima atualiza$o dentro do
procedimento.
! utiliza$o de variveis 'lo7ais, no entanto, n$o constitui uma 7oa prtica
de pro'rama$o, visto #ue podem amarrar os procedimentos /tornando"os dependentes0
e #ue7rar a #uest$o de modularidade. 1m um procedimento, as suas variveis locais tem
vida somente durante a sua e+ecu$o. ou seja, s$o criadas e alocadas #uando no
momento da ativa$o, e li7eradas #uando de seu trmino. !lm do mais, essas variveis
n$o podem ser acessadas pelos nveis e+ternos ao procedimento. 1nt$o, para transmiss$o
de informaes de dentro para fora dos procedimentos a lin'ua'em 3ascal utiliza o
mecanismo de parKmetros.
3or meio dos parKmetros faz"se a comunica$o de fora para dentro e de
dentro para fora de um procedimento, o #ue torna o mdulos indepententes e reusveis
em outros pro'ramas. Os parKmetros s$o o7jetos utilizados dentro do procedimento e
representam os o7jetos do nvel mais e+terno /parKmetros de defini$o0. 3ara declarar
procedures e functions #ue utilizam parKmetros 7asta acrescentar ao ca7eal,o a lista
de parKmetros a ser utilizada, #ue dever estar entre par%nteses. Csso feito da se'uinte
forma(
proced"re nome(lista-de-parametros);
f"nction nome(lista-de-parametros);
lista"de"parametros da forma( parKmetro1 ( tipo, parKmetro2 ( tipo, ..., parKmetron(
tipo.
! ativa$o de um procedimento se faz por meio de uma ref%ncia a seu nome
se'uido pela lista de parKmetros envolvida por par%nteses. 1sses parKmetros s$o
con,ecidos por parKmetros de c,amada, e podem ser constantes, variveis ou e+presses
dos mdulos e+ternos cujos valores ser$o transmitidos para os parKmetros de defini$o
Prof
a
Sirlei Lourdes Bach
Pg. 62
do procedimento e aps a sua e+ecu$o rece7er$o de volta, ou n$o, os valores contidos
no parKmetros de defini$o. 4ependendo de como s$o declarados os parKmetros de
defini$o no procedimento, determinado se os parKmetros de c,amada conter$o ou n$o
os valores contidos nos parKmetros de defini$o. Csso define o modo de passa'em dos
parKmetros( passa'em por refer%ncia e passa'em por valor. Wuando se declara um
parKmetro como sendo de refer%ncia, as atri7uies . ele s$o refletidas no parKmetro de
c,amada correspondente, aps a e+ecu$o do procedimento o parKmetro de c,amada
conter o mesmo valor #ue o parKmetro de defini$o correspondente. 3ara especificar se
um parKmetro ter passa'em por refer%ncia, a sua declara$o dever ser precedida pela
palavra"c,ave var.
Caso a declara$o n$o seja precedida por var, ent$o o parKmetro possui
passa'em por valor. ;este caso, os parKmetros de defini$o conter$o os mesmos valores
de seus parKmetros de c,amada correspondente no momento da ativa$o, mas alteraes
nos parKmetros de defini$o n$o ser$o refletidas nos parKmetros de c,amada
correspondente. 3ode"se dizer tam7m #ue um parKmetro com passa'em por refer%ncia
um parKmetro de entrada e sada, en#uanto #ue um parKmetro com passa'em por valor
um parKmetro de entrada.
1+emplo(
program exemplo_function_2;
{program que calcula o fatorial de N com a utilizao de uma
funo com passagem de parmetros }
var N : integer;
f"nction fatorial(fat : integer): integer;
var i, acumul : integer;
)egin
acumul := 1;
i := 1;
&*ile (i <= fat) do
)egin
acumul := acumul * i;
i := i + 1;
end;
fatorial := acumul;
end;
)egin write('Digite o valor de N: ');
readln(N);
writeln('O valor do Fatorial de ',N , ' = ', fatorial(N));
end.
program exemplo_procedure_2;
{programa que utiliza uma procedure para ler os valores em uma
matriz N x M e uma procedure que imprime os valores de uma matriz
M x N}
Prof
a
Sirlei Lourdes Bach
Pg. 63
const
M = 10;
N = 10;
t%pe
matriz = arra%[1..M,1..N] of integer;
var
a : matriz;
numlin, numcol : integer;
proced"re le_matriz(var mat : matriz; lin, col : integer);
var i, j : integer;
)egin
for i:= 1 to lin do
for j := 1 to col do
read(mat[i,j]);
end;
proced"re imprime_matriz(mat : matriz; lin, col : integer);
var
i, j : integer;
)egin
for i:= 1 to lin do
)egin
for j := 1 to col do
write(mat[i,j]:10,' ');
writeln;
end;
end;
)egin { programa principal }
write('Entre com o nmero de linhas da matriz (<',M, '): ');
readln(num_lin);
write('Entre com o nmero de colunas da matriz (<',N, '): ');
readln(num_col);
le_matriz(a,num_lin,num_col);
imprime_matriz(a,num_lin, num_col);
end.
,xerc6cios:
Exerccio 33) Escreva um procedimento que, ao analisar se um nmero recebido via
parmetro est no intervalo [5, 250], retorne o valor verdadeiro e falso em
caso contrrio.
Exerccio 34) Escreva um procedimento que receba como parmetro um caracter. Ao
analisar este caracter a funo dever retornar um valor numrico:
0 se for um dgito;
1 se for letra maiscula;
2 se for letra minscula;
3 nos demais casos.
Exerccio 35) mplemente uma funo que retorne o resto de uma diviso inteira (mod),
sem utilizar os operadores mod e div.
Prof
a
Sirlei Lourdes Bach
Pg. 64
Exerccio 36) mplemente uma funo que retorne o quociente de uma diviso inteira
(div), sem utilizar os operadores mod e div.
Exerccio 37) Escreva um algoritmo para calcular o mximo divisor comum de dois
nmeros dados como parmetros. Sabe-se que para MDC (mximo divisor
comum) de dois nmero x e y temos:
MDC (x, y) = MDC (x y, y), se x > y
MDC (x, y) = MDC (y, x)
MDC (x, x) = x
Exemplo: MDC(12, 4) = MDC (8, 4) = MDC (4, 4) = 4
Exerccio 38) Faa um subprograma para verificar se um ano bissexto ou no. Utilize
a regra: Um ano bissexto divisvel por 4, mas no por 100, ou ento se
divisvel por 400. Exemplo: 1988 bissexto pois divisvel por 4 e no
por 100; 2000 bissexto porque divisvel por 400.
Exerccio 39) Faa uma funo que recebe um nmero inteiro por parmetro e retorna
verdadeiro se ele for par e falso se for mpar.
Exerccio 40) Faa um programa que tem duas variveis globais inicializadas com 0:
nmero e seu precentual (21% do valor do nmero). Faa um programa
que l este nmero, envia como parmetros o nmero e seu percentual, e
atravs de um procedimento calcula este novo percentual, e retorna
alterado este percentual ao programa principal para depois imprimi-lo.
5.5 O MTODO DOS REFNAMENTOS SUCESSVOS
O /todo dos Refinamentos Sucessivos uma sistemtica de a7orda'em
til no projeto detal,ado e na implementa$o de softcares. O projeto detal,ado a etapa
onde , a especifica$o de cada um dos mdulos dos su7sistemas e a implementa$o a
etapa onde os diversos mdulos s$o codificados numa lin'ua'em de pro'rama$o.
! idia 7sica do mtodo a se'uinte( partindo"se de uma dado pro7lemas,
para o #ual se deseja encontrar um al'oritmo de solu$o, deve"se procurar su7dividi"lo
em pro7lemas menores /su7pro7lemas0 e de solu$o mais simples. !l'uns destes ter$o
solu$o imediata e outros n$o. Os su7pro7lemas para os #uais n$o for possvel encontrar
uma solu$o direta devem ser novamente su7divididos. !ssim, o processo repetido at
#ue se consi'a encontrar um al'oritmo para solucionar cada um dos su7pro7lemas.
1nt$o, o al'oritmo de solu$o do pro7lema ori'inal ser composto pela justaposi$o dos
al'oritmos usados para solucionar cada um dos su7pro7lemas em #ue o pro7lema
ori'inal foi decomposto.
Prof
a
Sirlei Lourdes Bach
Pg. 65
1ste mtodo dito top7do&n /de cima para 7ai+o0, pois incentiva uma
a7orda'em 'radativa do pro7lema. ! cada passo do refinamento aumenta a #uantidade
de detal,es tratados.
O mtodo 7astante til na tomada de decises relacionadas . modularidade
dos sistemas. !nalisando"se a 'ranularidade /taman,o0 de cada uma das solues
adotadas para cada um dos su7pro7lemas componentes do pro7lema ori'inal pode"se
decidir se estas ser$o implementadas so7 a forma de su7al'oritmos /funes ou
su7rotinas0 ou como simples conjuntos de comandos /comandos compostos0.
!inda, o mtodo 7astante eficaz na identifica$o de refinamentos do
pro7lema #ue podem fazer uso do mesmo al'oritmo de solu$o. !ssim, pode"se reduzir
o taman,o do sistema, evitando a replica$o de cdi'o. ;outro sentido, o mtodo
tam7m incentiva a reutiliza$o de cdi'o j e+istente, especialmente o contido em
7i7liotecas de pro'ramas, o #ue poupa tempo no desenvolvimento.
4e acordo com o nvel de detal,es tratados num ciclo de refinamento pode"se
su7dividir o mtodo em Anlise 1op7-o&n e )rograma89o ,struturada.
5.5.1 ANLSE TOP-DOWN
Consiste nas primeiras fases do processo de refinamento da solu$o de um
pro7lema, onde se c,e'a at o nvel dos su7al'oritmos e comandos compostos.
;esta fase s$o definidos os trec,os do al'oritmo #ue se constituir$o em
su7al'oritmos estan#ues e a#ueles #ue ser$o implementados so7 a forma de comandos
compostos. Dam7m ao trmino desta fase j se pode definir #uais pores do cdi'o
ser$o desempen,adas por su7al'oritmos j e+istentes em 7i7liotecas.
!o final deste processo o es#ueleto do al'oritmo principal da solu$o j est
delineado.
5.5.2 PROGRAMAO ESTRUTURADA
! fase de 3ro'rama$o 1struturada do Gtodo dos Befinamentos &ucessivos
consiste no detal,amento do cdi'o /instrues0 contido em cada um dos su7al'oritmos
e comandos compostos constituintes do al'oritmo da solu$o do pro7lema proposto.
! pro'rama$o estruturada consiste em uma e+tens$o da anlise top"docn,
onde d"se prosse'uimento ao processo de refinamento das unidades 7sicas, a#ui
Prof
a
Sirlei Lourdes Bach
Pg. 66
denominadas %locos.
Cada 7loco contm somente uma entrada e uma sada. Os refinamentos
transformam um 7loco em outros menores, utilizando"se apenas de tr%s re'ras 7sicas(
a0 &e#?%ncia( atravs da #ual um 7loco A #ue7rado numa se#?%ncia de
dois ou mais 7locos mais simples, : e +.
70 &e"condi$o"ent$o"S"sen$o"C( onde e+ecuta"se um ou outro de dois
7locos menores : e +, em fun$o do resultado do teste de uma condi$o.
c0 1n#uanto"condi$o"faa"S, onde : e+ecutado en#uanto a condi89o for
verdadeira.

3rova"se matematicamente #ue estas tr%s re'ras s$o suficientes para escrever
Prof
a
Sirlei Lourdes Bach
Pg. 67
: +
A
Condi$o
:
+
Aerdadeiro
>also
Condi$o
:
Aerdadeiro
>also
#ual#uer pro'rama.
!s estruturas )ara e Repita podem ser consideradas variaes da constru$o
,n!uanto, j #ue esta pode ser usada para simular /reproduzir0 o efeito das primeiras.
O refinamento sucessivo de 7locos termina #uando cada 7loco corresponder a
um nico comando da lin'ua'em.
;esta fase do processo a modulariza$o advm do fato de #ue cada 7loco
somente intera'e com o e+terior atravs de suas nicas entrada e sada, podendo ser
analisado e refinado fora do conte+to dos demais sem nen,uma dificuldade. 4entre
outras coisas, esta propriedade facilita tremendamente a localiza$o de erros cometidos
durante a pro'rama$o.
5.5.3 VANTAGENS E DESVANTAGENS DO MTODO
!s principais vanta'ens do mtodo dos refinamentos sucessivos podem ser
sumarizadas no(
estmulo . a7orda'em 'radativa de pro7lemas, pro'redindo o processo da menor para
a maior #uantidade de detal,es- e
estmulo . modulariza$o, facilitando a identifica$o de su7al'oritmos estan#ues,
incentivando a reutiliza$o de pores de cdi'o j prontas e facilitando o processo
de detec$o de eventuais erros de pro'rama$o.
Como conse#?%ncia t%m"se, ainda, a o7ten$o de pro'ramas claros e fceis
de entender, uma mel,oria de produtividade e redu$o dos custos de produ$o de
softcare.
3or outro lado, o mtodo descrito deficiente no sentido em #ue sua
aplica$o restrita .s fases de projeto detal,ado e implementa$o do ciclo de vida de
um softcare. !ssim, para as demais fases do ciclo, em especial a !nlise e 4efini$o da
ar#uitetura do sistema, onde os erros s$o mais importantes e caros, o analista v%"se
o7ri'ado a utilizar outras tcnicas.
5.5.4 EXERCCO RESOLVDO
Prof
a
Sirlei Lourdes Bach
Pg. 68
3ara uma mel,or visualiza$o da proposta do mtodo de refinamentos
sucessivos, ele ser usado a se'uir para escrever um al'oritmo para calcular a matriz
+
mxn
resultante da soma de duas matrizes A
mxn
e :
mxn
de nmeros reais dadas.
;um primeiro nvel de detal,amento, o pro7lema pode ser su7dividido nos
se'uintes passos(
Ier as dimenses das matrizes /m e n0-
Ier os elementos das matrizes ! e S-
Calcular os elementos da matriz C 6 ! X S-
1screver o resultado /matriz C0.
1+pressando esta su7divis$o do pro7lema ori'inal numa forma 'rfica, a#ui
denominada de 4ia'rama de Befinamentos, tem"se(
O pro7lema de o7ten$o das dimenses das matrizes pode ser su7dividido
em(
O7ter o nmero de lin,as das matrizes /m0, e
O7ter o nmero de colunas das matrizes /n0.
3ode"se tam7m #ue7rar a #uest$o da leitura das matrizes ! e S em duas
outras(
Ier os elementos da matriz A
mxn
, e
Ier os elementos da matriz :
mxn
.
3ortanto, aps esta se'unda fase de refinamento o dia'rama torna"se(
Prof
a
Sirlei Lourdes Bach
Pg. 69
Calcular
C 6 ! X S
O7ter
m e n
O7ter
! e S
>azer
C 6 ! X S
1screver
C

;este ponto o7serva"se #ue o nvel de detal,amento o7tido no dia'rama
suficiente para dar a fase de anlise top"docn do mtodo por encerrada. 4e fato, com o
con,ecimento ad#uirido nos captulos anteriores j se pode ela7orar al'oritmos para
resolver cada um dos su7pro7lemas em #ue o pro7lema ori'inal foi su7dividido. 3or
e+emplo, as tarefas ;er A e ;er : podem ser realizadas por um nico su7al'oritmo
/su7rotina0 capaz de ler matrizes m n. O clculo de + < A = : pode ser realizado por
outra su7rotina para somar matrizes. !inda, uma terceira su7rotina pode ser usada para
escrever o resultado do clculo /,screver +0. >inalmente, os al'oritmos para os
su7pro7lemas ;er m e ;er n, devido . sua simplicidade, podem constituir apenas um
conjunto de comando colocado no incio do al'oritmo principal.
;ote #ue as informaes disponveis at o momento s$o suficiente para #ue o
corpo do al'oritmo principal seja escrito. ;ote, tam7m, #ue neste ponto j foram
tomadas todas as decises relativas . defini$o dos trec,os do al'oritmo #ue ser$o
implementadas so7 a forma de su7al'oritmos e dos trec,os #ue se constituir$o em
comandos compostos.
Prof
a
Sirlei Lourdes Bach
Pg. 70
Calcular
C 6 ! X S
O7ter
m e n
O7ter
! e S
>azer
C 6 ! X S
1screver
C
Ier
m
Ier
n
Ier
!
Ier
S

You might also like