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
1 2

6,4 5,1 2,2 9,2
3 4 5 6

8,3 7,4 5,9 8,9
7 8 9 10

X:=Nota[3]; { X n 6,4 }
Linguagem PASCAL 2

begin for i:=1 to 5 do read (a[i])..Arrays (³Variáveis compostas homogêneas´)  Exr: Leia cinco elementos e imprima program Le. i: integer. Linguagem PASCAL 3 .5] of integer. end. var a: array[1. for i:=1 to 5 do writeln (a[i]).

.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.. até se descobrir que ele deve ser inserido entre ai e ai+1. a2. aj-2.. então comparase aj com aj-1.. atribuindo-se a ai+1 o valor original de aj. . já ordenados.. aj-1 já ordenados. . Linguagem PASCAL 4 . Move-se então ai+1 e os elementos seguintes.

f1..2]...4] of integer.fn] of tipo..f2. . ex: var Matriz: array [1.. i2.. 1.Arrays (³Variáveis compostas homogêneas´)  Arrays multidimensionais: identificador: array [i1. in..4. { Xn10 } Linguagem PASCAL 5 . 1 2 3 4 1 5 9 13 1 2 6 10 14 2 3 7 11 15 3 4 8 12 16 4 X:=Matriz[3..

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. CADASTRO PESSOAL Nome: Endereço: Bairro: Data de nascimento: / / Cidade: Profissão: UF: Linguagem PASCAL 7 . mas de tipos diferentes.

dia_nasc. profissao: string[40]. bairro: string[40]. cadastro. Linguagem PASCAL 8 . end. nome: string[40]. uf: string[2]. Ex: Writeln( Nome: . cidade: string[40]. endereco: string[100]. mes_nasc.Registros Var Identificador: record cadastro: record componentes. ano_nasc: integer.nome). end.

end.uf).Registros dentro de Registros Var cadastro: record nome: string[40]. end.endereco. mes_nasc. endereco: record rua: string[100]. cidade: string[40]. Ex: Writeln( Estado: . 9 . profissao: string[40]. uf: string[2]. ano_nasc: integer. dia_nasc. bairro: string[40]. Linguagem PASCAL cadastro.

55: . identificador: array [i1..Conjunto de Registros Var camisas: record descricao: string[100]. estoque: real..f2.camisas..f1.100] of camisas... Linguagem PASCAL 10 .fn] of tipo. Writeln( Estoque da camisa cod. mercadorias[55]. mercadorias: array[1.estoque). preco: real. end. in. i2. ...

Linguagem PASCAL 11 . Para terminar o cadastro digite -1 no campo código. nome e descrição da profissão. Então. você informa um código e o programa informa o nome e a descricao da profissão.Registros Exr: Implementar um programa em PASCAL que leia uma tabela de profissões composta de código. A tabela comporta no máximo 100 profissões.

65 (aparece o A mesmo) Linguagem PASCAL 12 .) Principais vantagens: ± quando a quantidade de informação é muito grande para ficar em memória.  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. etc. 54) e o 4 (cód.Arquivos   São estruturas de dados armazenadas fora da memória principal do computador => memória secundária (HD. ± armazenar para uso futuro. CD-ROM. 53) => (aparece como 64 mesmo) ‡ Ex: letra A => grava o cód. disquete.

Arquivo binário  Organização sequêncial em registros (compostos de campos).. 0 1 2 3 NOME NOME NOME NOME ENDEREÇO ENDEREÇO ENDEREÇO ENDEREÇO UF UF UF UF . N NOME ENDEREÇO UF Linguagem PASCAL 13 .. mas o acesso pode ser direto através do número do registro.

telefone: string[30].Arquivo binário  Declaração: var identificador: file of tipo. Ex1:  var Notas: FILE OF integer. endereco_completo: string[200]. Linguagem PASCAL 14 . end.  Ex2: type Pessoa = record nome: string[40]. var Agenda: file of Pessoa.

Para abrir o arquivo e apontar para o início use: reset (identificador).ext´). abrir e apontar para o início use: rewrite (identificador). Linguagem PASCAL 15   . ´arquivo. E para fechar após o uso: close (identificador).Arquivo binário   Associação do identificador (nome interno) ao nome do arquivo (nome externo): assign (identificador. Cada arquivo possui um ponteiro para a posição do registro. Para criar um arquivo novo (ou apagar um já existente).

Linguagem PASCAL 16 . NomeAluno: string[25]. { Comandos para ler do arquivo } close (Notas). reset (Notas).Arquivo binário program AbreFecha. Arquivo = file of Registro. { Comandos para gravar no arquivo } close (Notas). type Registro=record Matricula: real. var Notas: Arquivo. end.DAT´). NotaTotal: real. rewrite (Notas). end. ´NOTAS. begin assign (Notas.

EOF . lista-de-registros).   Linguagem PASCAL 17 . Escrita em arquivo: write (identificador.Arquivo binário  Leitura de arquivo: read (identificador. cc.³End of File´ = ³Fim de arquivo´ Retorna: true. Fim de arquivo EOF (identificador). lista-de-registros). se atingiu o fim do arquivo false.

dat´).Arquivo binário program Backup. ´dados. type Pessoa = record Nome: string[15]. reset (A). var A. begin assign (A. close (B). write (B. end. ´backup. rewrite (B). T: Pessoa. close (A).dat´). while not EOF (A) do begin read (A. assign (B. T). T). Idade: integer. B: file of Pessoa. 18 . end. Linguagem PASCAL end.

obs: seek (identificador. sem a procura sequencial: seek (identificador. obs: o primeiro registro é o 0 (zero). Linguagem PASCAL 19 . numero-do-registro). corresponde ao comando append. FileSize(identificador).  Função que retorna o número total de registros em um arquivo: FileSize (identificador).Arquivo binário  Acesso direto a um registro. posiciona o arquivo logo após o último registro gravado.

nota VEsp. dado a matrícula do aluno. nota VC. Linguagem PASCAL 20  . dado a matrícula do aluno. nome do aluno. Exr3: Faça um programa que. altere suas notas. O arquivo em disco deve conter: ± ± ± ± matrícula do aluno. retorne seu nome e média.  Exr2: Faça um programa que.Arquivo binário  Exr1: Faça um programa que crie uma base de dados com 10 alunos.

write (´Entre com a nota de VEsp: ´). nome: string[40].program exr1. Turma: Arquivo. close (Turma). vc: real. i: integer.vesp).matricula). const N=10. readln(Aluno. write (Turma. readln (Aluno. var Aluno: Registro. write (´Entre com o nome: ´). Arquivo = file of Registro. readln(Aluno. Aluno).DAT'). rewrite (Turma). end. begin assign (Turma. type Registro = record matricula: integer. vesp: real. end. 'ALUNOS. end. Linguagem PASCAL 21 .nome). write (´Entre com a nota de VC: ´). readln (Aluno. for i:=1 to N do begin write (´Entre com a matrícula: ´).vc).

matricula. nome: string[40]. Arquivo = file of Registro. N:=N+1.vc)/2:5:2) else writeln (´Aluno não encontrado !´). close (Turma). achei:=false. var Aluno: Registro. reset (Turma). Turma: Arquivo. (Aluno. N:=0.program exr2. read (Turma. achei: boolean.nome. Aluno. Aluno). type Registro = record matricula: integer. end. Linguagem PASCAL end. while (not achei) and (not EOF(Turma)) do begin seek (Turma. N). write (´Digite a matrícula: ´). ´ possui média igual a ´. vc: real.matricula = matricula) then achei:=true. 'ALUNOS. readln (matricula).DAT'). end. if (Aluno. i: integer. N. vesp: real. if achei then writeln (´Aluno ´.vesp+Aluno. 22 . begin assign (Turma.

DAT'). if (Aluno. Aluno. 'ALUNOS. Aluno). readln (matricula).program exr3. readln (vesp.. close (Turma).matricula = matricula) then begin achei:=true.. achei:=false. end. write (´Digite a matrícula: ´). write (´Digite a nota de VEsp e VC: ´). . read (Turma. end. reset (Turma). vc). begin assign (Turma.vesp:= vesp.vc:=vc. N:=N+1. vc: real. end. Aluno. Linguagem PASCAL 23 . N:=0. write (Turma. while (not achei) and (not EOF(Turma)) do begin seek (Turma. var vesp. if achei then writeln (´Notas alteradas com sucesso !´) else writeln (´Aluno não encontrado !´). Aluno). N).

‡ ex: assign (documento.  Associação com o arquivo: assign (identificador. ‡ ex: var documento: text. mas não permite acesso direto.txt¶). µARQ. Declaração:  var identificador: text. Linguagem PASCAL 24 .Arquivo texto  A organização de um arquivo texto também é sequêncial.TXT¶). µdocs.

Linguagem PASCAL 25 . ‡ Exclusivamente para escrita. Grava a partir do último registro (erro de execução caso não exista): append (identificador). ‡ Exclusivamente para escrita em um arquivo já existente. Se já existe apaga e cria de novo: rewrite (identificador).Arquivo texto  Abertura de um arquivo ‡ Exclusivamente para leitura de um arquivo já existente (erro de execução caso não exista): reset (identificador). Cria um novo.

variáveis). Fim de arquivo EOLn (identificador). variáveis). variáveis). writeln (identificador. readln (identificador. Comandos de leitura read (identificador. variáveis). Linguagem PASCAL 26 .Arquivo texto     Fechamento do arquivo close (identificador). Comandos de escrita write (identificador.

os dispositivos periféricos são tratados como arquivos texto: CON: vídeo (console) LPT1. Linguagem PASCAL end.Arquivo texto  Em PASCAL. readln(k). k: char. writeln (´Olá !!!!´). else assign (dispositivo. LPT3: impressoras PRN: mesmo que LPT1 program VideoImpressora. ´CON´). rewrite (dispositivo). if (k=´V´) then assign (dispositivo. LPT2. begin write (´Vídeo ou impressora (V ou I) ? ´). 27 . ´LPT1´). var dispositivo: text. close (dispositivo).