You are on page 1of 29

Linguagem PASCAL

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 compara-se
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
X:=Matriz[3,2];
2 5 6 7 8
{ X10 }
3 9 10 11 12
4 13 14 15 16
1 2 3 4
Linguagem PASCAL 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 PESSO AL
N om e:
E n d e re ç o :
B a ir ro : C id a d e : UF:
D a ta d e n a s c im e n to : / / P r o f is s ã o :

Linguagem PASCAL 7
Registros
Var Identificador: record
cadastro: record
nome: string[40]; componentes;
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;

Ex: Writeln(´Estado: ´, Linguagem PASCAL


cadastro.endereco.uf); 9
Conjunto de Registros
Var identificador: array
camisas: record [i1..f1, i2..f2, ..., in..fn] of
descricao: string[100]; tipo;
preco: real;
estoque: real;
end;

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
• Ex: número 64 => grava o número 64 (aparece como @)
• Ex: letra A => grava o número 65
– Texto: armazena o código ASCII (arquivo fica maior!)
• Ex: número 64 => grava o 6 (cód. 54) e o 4 (cód. 53) => (aparece como 64 mesmo)
• Ex: letra A => grava o cód.65 (aparece o A mesmo)

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 NO M E ENDEREÇO UF

1 NO M E ENDEREÇO UF

2 NO M E ENDEREÇO UF

3 NO M E ENDEREÇO UF
...
N NO M E ENDEREÇO UF

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
program AbreFecha;
type Registro=record
Matricula: real;
NomeAluno: string[25];
NotaTotal: real;
end;
Arquivo = file of Registro;
var Notas: Arquivo;
begin
assign (Notas, ´NOTAS.DAT´);
rewrite (Notas);
{
Comandos para gravar no arquivo
}
close (Notas);

reset (Notas);
{
Comandos para ler do arquivo
}
close (Notas);
end. Linguagem PASCAL 16
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
program Backup;
type Pessoa = record Nome: string[15];
Idade: integer;
end;
var A, B: file of Pessoa;
T: Pessoa;
begin
assign (A, ´dados.dat´);
assign (B, ´backup.dat´);
reset (A); rewrite (B);
while not EOF (A) do
begin
read (A, T);
write (B, T);
end;
close (A);
close (B); Linguagem PASCAL 18
end.
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 Registro = record matricula: integer;
nome: string[40];
vesp: real;
vc: real;
end;
Arquivo = file of Registro;
const N=10;
var Aluno: Registro;
Turma: Arquivo;
i: integer;
begin
assign (Turma, 'ALUNOS.DAT');
rewrite (Turma);
for i:=1 to N do
begin
write (´Entre com a matrícula: ´); readln(Aluno.matricula);
write (´Entre com o nome: ´); readln(Aluno.nome);
write (´Entre com a nota de VEsp: ´); readln(Aluno.vesp);
write (´Entre com a nota de VC: ´); readln(Aluno.vc);

write (Turma, Aluno);


end;
close (Turma); Linguagem PASCAL 21
end.
program exr2;
type Registro = record matricula: integer;
nome: string[40];
vesp: real;
vc: real;
end;
Arquivo = file of Registro;
var Aluno: Registro;
Turma: Arquivo;
N, matricula, i: integer;
achei: boolean;
begin
assign (Turma, 'ALUNOS.DAT');
reset (Turma);
write (´Digite a matrícula: ´); readln (matricula);

achei:=false; N:=0;
while (not achei) and (not EOF(Turma)) do
begin
seek (Turma, N);
read (Turma, Aluno);
if (Aluno.matricula = matricula) then achei:=true;
N:=N+1;
end;
close (Turma);

if achei then writeln (´Aluno ´, Aluno.nome, ´ possui


média igual a ´, (Aluno.vesp+Aluno.vc)/2:5:2)
else writeln (´Aluno não encontrado
Linguagem!´);PASCAL 22
end.
program exr3;
...
var vesp, vc: real;
begin
assign (Turma, 'ALUNOS.DAT');
reset (Turma);
write (´Digite a matrícula: ´); readln (matricula);
write (´Digite a nota de VEsp e VC: ´); readln (vesp, vc);

achei:=false;
N:=0;
while (not achei) and (not EOF(Turma)) do
begin
seek (Turma, N);
read (Turma, Aluno);
if (Aluno.matricula = matricula) then begin
achei:=true;
Aluno.vesp:= vesp;
Aluno.vc:=vc;
write (Turma, Aluno);
end;
N:=N+1;
end;
close (Turma);

if achei then writeln (´Notas alteradas com sucesso !´)


else writeln (´Aluno não encontrado !´);
end. Linguagem PASCAL 23
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);
end.

Linguagem PASCAL 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

You might also like