Programação PASCAL

Download Report

Transcript Programação PASCAL

Linguagem PASCAL
Módulo 3
Estrutura de Dados.
Linguagem PASCAL
1
Arrays (“Variáveis compostas homogêneas”)

Arrays unidimensionais:
identificador: array [inicial..final] of tipo;
ex:
var Nota: array [1..10] of integer;
7,2
4,8
6,4
5,1
2,2
9,2
8,3
7,4
5,9
8,9
1
2
3
4
5
6
7
8
9
10
X:=Nota[3]; { X  6,4 }
Linguagem PASCAL
2
Arrays (“Variáveis compostas homogêneas”)

Exr: Leia cinco elementos e imprima
program Le;
var a: array[1..5] of integer;
i: integer;
begin
for i:=1 to 5 do
read (a[i]);
for i:=1 to 5 do
writeln (a[i]);
end.
Linguagem PASCAL
3
Arrays (“Variáveis compostas homogêneas”)

Exr: Ler e ordenar uma lista de N números
Idéia: Para inserir um número aj supõe-se
a1, a2, ..., aj-1 já ordenados, então comparase aj com aj-1, aj-2, ... até se descobrir que ele
deve ser inserido entre ai e ai+1.
Move-se então ai+1 e os elementos
seguintes, já ordenados, atribuindo-se a ai+1
o valor original de aj.
Linguagem PASCAL
4
Arrays (“Variáveis compostas homogêneas”)

Arrays multidimensionais:
identificador: array [i1..f1, i2..f2, ..., in..fn] of tipo;
ex:
var Matriz: array [1..4, 1..4] of integer;
1
1
2
3
4
2
5
6
7
8
3
9
10
11
12
4
13
14
15
16
1
2
3
4
Linguagem PASCAL
X:=Matriz[3,2];
{ X10 }
5
Exercício

Implementar um programa em
PASCAL que leia duas matrizes
A4x4 e B4x4 e imprima a matriz
resultado C = A*B.
Linguagem PASCAL
6
Registros (“Variáveis compostas heterogêneas”)

São conjuntos de dados logicamente
relacionados, mas de tipos diferentes.
CADASTRO PESSOAL
Nome:
Endereço:
Bairro:
Data de nascimento:
Cidade:
/
/
UF:
Profissão:
Linguagem PASCAL
7
Registros
Var
Identificador: record
cadastro: record
componentes;
nome: string[40];
endereco: string[100];
end;
bairro: string[40];
cidade: string[40];
uf: string[2];
dia_nasc, mes_nasc, ano_nasc: integer;
profissao: string[40];
end;
Ex: Writeln(´Nome: ´, cadastro.nome);
Linguagem PASCAL
8
Registros dentro de Registros
Var
cadastro: record
nome: string[40];
endereco: record
rua: string[100];
bairro: string[40];
cidade: string[40];
uf: string[2];
end;
dia_nasc, mes_nasc, ano_nasc: integer;
profissao: string[40];
end;
PASCAL
Ex: Writeln(´Estado: ´, Linguagem
cadastro.endereco.uf);
9
Conjunto de Registros
Var
camisas: record
descricao: string[100];
preco: real;
estoque: real;
end;
identificador: array
[i1..f1, i2..f2, ..., in..fn] of
tipo;
mercadorias: array[1..100] of camisas;
Writeln(´Estoque da camisa cod.55: ´, mercadorias[55].camisas.estoque);
Linguagem PASCAL
10
Registros
Exr:
Implementar um programa em PASCAL
que leia uma tabela de profissões
composta de código, nome e descrição da
profissão. A tabela comporta no máximo
100 profissões. Para terminar o cadastro
digite -1 no campo código.
Então, você informa um código e o
programa informa o nome e a descricao da
profissão.
Linguagem PASCAL
11
Arquivos


São estruturas de dados armazenadas fora da
memória principal do computador => memória
secundária (HD, disquete, CD-ROM, etc.)
Principais vantagens:
– quando a quantidade de informação é muito grande para
ficar em memória;
– armazenar para uso futuro.

Tipos de arquivos:
– Binários: usam códigos binários para gravar os caracteres
– Texto: armazena o código ASCII (arquivo fica maior!)
Linguagem PASCAL
12
Arquivo binário

Organização sequêncial em registros
(compostos de campos), mas o acesso pode
ser direto através do número do registro.
0
NOME
ENDEREÇO
UF
1
NOME
ENDEREÇO
UF
2
NOME
ENDEREÇO
UF
3
NOME
ENDEREÇO
UF
ENDEREÇO
UF
...
N
NOME
Linguagem PASCAL
13
Arquivo binário

Declaração:
var identificador: file of tipo;

Ex1:
var Notas: FILE OF integer;

Ex2:
type Pessoa = record
nome: string[40];
telefone: string[30];
endereco_completo: string[200];
end;
var Agenda: file of Pessoa;
Linguagem PASCAL
14
Arquivo binário


Associação do identificador (nome interno) ao
nome do arquivo (nome externo):
assign (identificador, ´arquivo.ext´);
Cada arquivo possui um ponteiro para a posição do
registro. Para abrir o arquivo e apontar para o início
use:
reset (identificador);

Para criar um arquivo novo (ou apagar um já
existente), abrir e apontar para o início use:
rewrite (identificador);

E para fechar após o uso:
close (identificador);
Linguagem PASCAL
15
Arquivo binário
pro g ra m Abre Fe
type Re g is tro =re
Ma tric ula : re a
No me Aluno : s
No ta To ta l: re a
e nd;
Arquivo = fi
va r No ta s : Arqui
be g in
a s s ig n (No ta s , ´
re write (No ta s )
{
Co ma ndo s pa r
}
c lo s e (No ta s );
re s e t (No ta s );
{
Co ma ndo s pa r
}
c lo s e (No ta s );
Linguagem PASCAL
16
e nd.
Arquivo binário

Leitura de arquivo:
read (identificador, lista-de-registros);


Escrita em arquivo:
write (identificador, lista-de-registros);
Fim de arquivo
EOF (identificador);
EOF - “End of File” = “Fim de arquivo”
Retorna: true, se atingiu o fim do arquivo
false, cc.
Linguagem PASCAL
17
Arquivo binário
pro g ra m B a c
type
P e sso a = re c
Ida de : int
e nd;
vA,
a r B : file o f
T: P e sso a ;
be g in
a ssig n (A, ´d
a ssig n (B , ´b
re se t (A); re
while no t EO
be g in
re a d (A, T)
write (B , T
e nd;
c lo se (A);
c lo se
(B );
Linguagem PASCAL
18
e nd.
Arquivo binário

Acesso direto a um registro, sem a procura sequencial:
seek (identificador, numero-do-registro);
obs: o primeiro registro é o 0 (zero).

Função que retorna o número total de registros em um
arquivo:
FileSize (identificador);
obs: seek (identificador, FileSize(identificador);
posiciona o arquivo logo após o último registro
gravado, corresponde ao comando append.
Linguagem PASCAL
19
Arquivo binário

Exr1: Faça um programa que crie uma base de dados
com 10 alunos. O arquivo em disco deve conter:
–
–
–
–
matrícula do aluno;
nome do aluno;
nota VEsp;
nota VC.

Exr2: Faça um programa que, dado a matrícula do
aluno, retorne seu nome e média.

Exr3: Faça um programa que, dado a matrícula do
aluno, altere suas notas.
Linguagem PASCAL
20
program exr1;
type
Regi stro = reco
nome: stri ng
vesp: real ;
vc: real ;
end;
Arqui vo = fi l e o
const
N=10;
var
Al uno: Regi stro
Turma: Arqui vo
i : i nteger;
begi n
assi gn (Turma, '
rew ri te (Turma
for i :=1 to N do
begi n
w ri te (´Entre c
w ri te (´Entre c
w ri te (´Entre c
w ri te (´Entre c
w ri te (Turma,
end;
PASCAL
21
cl oseLinguagem
(T
urma);
end.
program e xr2;
type
R e gis tro = re cord m
nome : s tring[40
ve s p: re al;
vc: re al;
e nd;
Arquivo = file
of R e
var
Aluno: R e gis tro;
Turma: Arquivo;
N , matricula, i: inte
ache i: boole an;
be gin
as s ign (Turma, 'AL
re s e t (Turma);
write
(´D igite
a mat
ache i:=fals e ; N :=0;
while
(not ache i) an
be gin
s e e k (Turma, N );
re ad (Turma, Alu
if (Aluno.matricul
N :=N +1;
e nd;
clos e
(Turma);
if ache i the n write ln
mé dia igual a ´, (Alun
e ls e
w
rite
ln (´Aluno
Linguagem
PASCAL
22
e nd.
program e xr3;
...
var ve s p, vc: re al;
be gin
as s ign (Turma, 'AL
re s e t (Turma);
write (´D igite a mat
write (´D igite a nota
ache i:=fals e ;
N :=0;
while (not ache i) an
be gin
s e e k (Turma, N );
re ad (Turma, Alun
if (Aluno.matricula
ache i:=true ;
Aluno.ve s p:= ve
Aluno.vc:=vc;
write (Turma, A
e nd;
N :=N +1;
e nd;
clos e (Turma);
if ache i the n write ln
e ls e write ln (´Aluno
Linguagem PASCAL
23
e nd.
Arquivo texto

A organização de um arquivo texto também é
sequêncial, mas não permite acesso direto.

Declaração:
var identificador: text;
• ex: var documento: text;

Associação com o arquivo:
assign (identificador, ‘ARQ.TXT’);
• ex: assign (documento, ‘docs.txt’);
Linguagem PASCAL
24
Arquivo texto

Abertura de um arquivo
• Exclusivamente para leitura de um arquivo já
existente (erro de execução caso não exista):
reset (identificador);
• Exclusivamente para escrita. Cria um novo. Se já
existe apaga e cria de novo:
rewrite (identificador);
• Exclusivamente para escrita em um arquivo já
existente. Grava a partir do último registro (erro
de execução caso não exista):
append (identificador);
Linguagem PASCAL
25
Arquivo texto




Fechamento do arquivo
close (identificador);
Comandos de leitura
read (identificador, variáveis);
readln (identificador, variáveis);
Comandos de escrita
write (identificador, variáveis);
writeln (identificador, variáveis);
Fim de arquivo
EOLn (identificador);
Linguagem PASCAL
26
Arquivo texto

Em PASCAL, os dispositivos periféricos são tratados
como arquivos texto:
CON: vídeo (console)
LPT1, LPT2, LPT3: impressoras
PRN: mesmo que LPT1
program VideoImpressora;
var dispositivo: text; k: char;
begin
write (´Vídeo ou impressora (V ou I) ? ´); readln(k);
if (k=´V´) then assign (dispositivo, ´CON´);
else assign (dispositivo, ´LPT1´);
rewrite (dispositivo);
writeln (´Olá !!!!´);
close (dispositivo);
Linguagem PASCAL
end.
27
Arquivo texto

Exr: Implemente um sistema criptográfico
que leia um arquivo texto escrito por você e
embaralhe as letras de acordo com uma
senha N. Essa senha irá deslocar o alfabeto
de N posições. Use A-Z, a-z e 0-9.
A B C D E ........................................................Z
N=-4
...W X Y Z A B C D E ...........................................
Linguagem PASCAL
28
Trabalho #5


Implementar um “Sistema de Agenda”
Requisitos do sistema:
– o sistema deverá ter um menu de inserção,
alteração e deleção de cadastros;
– deverá permitir também consulta aos dados
por nome, cidade ou estado;
– os dados ficarão gravados em disco;
– os cadastros deverão conter: nome,
endereço, bairro, cidade, estado, cep,
telefone e celular.
Linguagem PASCAL
29