Você está na página 1de 20

Programação em

Pascal
Estruturas de Dados

Informática
+
Algoritmos
=
Programas 0101010
Sumário

Informática
0101010

 Estruturas de Dados
 Strings
 Tipos definidos pelo utilizador
 Tipos simples
 Tipos definidos por enumeração
 Tipos definidos por subdomínio
 Estruturas complexas
 Matrizes (Arrays)
 Fichas (Records)
 Ficheiros (Files)
Informática - OGE Paulo Melo 2
Cadeias de caracteres

Informática
Strings
0101010

 Em pascal um tipo de dados serve para armazenar


explicitamente sequências de caracteres – a string
 Pode ser dimensionada (com o número máximo de
caracteres que pode conter)
 formato string[X]
 no caso de não ser dimensionada funciona como X=255
 A função length obtém a verdadeira dimensão da
string (em caracteres)
 Na prática uma string[X] é um array de caracteres
 String[X] é um array [1..X] of char
 É possível aceder a cada variável char que constitui a
string individulmente
Informática - OGE Paulo Melo 3
Cadeias de caracteres

Informática
Strings - Exemplo
0101010

Program TestaString;
Var
S: string;
S1: string[80];
Begin
Writeln('Introduza a string a analisar');
S:= 'A string que foi lida foi: ';
Readln(S1);
Writeln(S, S1);
Writeln('O comprimento da string "',S1,
'" é :',length(S1));
End.

Informática - OGE Paulo Melo 4


Tipos definidos pelo programador

Informática
Definição e Sintaxe
0101010

 Zona de definição de tipos  Tipo definido por gama de valores ou


subdomínio
Sintaxe:
Sintaxe:
Type
NomeTipo= ValorInicial ..ValorFinal
NomeTipo = definição_do_tipo;
 As suas componente são valores
enumeráveis
 Tipo definido por enumeração  Define que esse tipo possui todos os
valores desde ValorInicial até
ValorFinal
Sintaxe:  Pode ser definida uma gama de valores
sobre qualquer tipo enumerado
NomeTipo = ( nome1, nome2, nome3)

 Apresenta todos os componentes


 Nota
possíveis para o tipo  Não podem ser usados directamente
instruções de entrada (read) ou saída
 As suas componentes são (write) em tipos definidos por
identificadores, não valores enumeração.
 Cria um tipo enumerado

Informática - OGE Paulo Melo 5


Tipos definidos pelo programador

Informática
Exemplo de aplicação
0101010

...
Type
Testacoes=(primavera, verao, outono, inverno);
Tmeses= 1..12;
...
Var
estacao: Testacoes;
mes: Tmeses;
...
mes := 3;
estacao := primavera;
...
case estacao of
verao: writeln('bom tempo');
primavera, outono: writeln('tempo aceitável');
inverno: writeln('tempo mau');
end;
...

Informática - OGE Paulo Melo 6


Arrays

Informática
Matrizes e Vectores
0101010

 Usam-se arrays para representar variáveis que são


 Elementos do mesmo tipo
 Relacionados entre si
 Sobre os quais pretendemos fazer operações semelhantes
 Que pretendemos representar por um nome comum

 Os arrays podem ser:


 Unidimensionais (chamados de vectores)
 Multidimensionais (chamados de matrizes)

 Cada componente de um array é uma variável individual


 Possui um nome (derivado do nome do array)
 Possui um tipo (o do tipo base do array)
 Possui um valor (manipulado como qualquer variável)
Informática - OGE Paulo Melo 7
Vectores

Informática
Arrays unidimensionais
0101010

Sintaxe:
Type
tipo_array1 = array [ gama_de_valores1] of tipo_base1;
{define o tipo tipo_array1 como um vector de valores do tipo
tipo_base1 }
...
Var
nome_array1: tipo_array1;
{declaração de um tipo definido anteriormente, que é um array}
nome_array2: array [gama_de_valores2] of tipo_base2;
{declaração explícita}
 Um vector é sempre definido sobre um tipo base Cada variável individual
 Que pode ser qualquer tipo definido em Pascal tem a forma:
 Que é o tipo das componentes individuais do vector
 Qualquer tipo enumerado pode servir para a gama de valores nome_array[índice]
Exemplo:
Type tipolista= array [1..3] of real; Lista[1] Lista[2] Lista[3]
Var lista: tipolista;

Informática - OGE Paulo Melo Lista 8


Vectores

Informática
Exemplos de aplicação
0101010

Cada elemento de um tipo estruturado ...


pode ser usado exactamente nas Readln(Lista[2]);
mesmas situações em que qualquer Lista[1]:= 2.0;
Lista[3]:= Lista[2]*3+Lista[1];
outra variável do mesmo tipo pode ser
Writeln(Lista[3]);
usada
...

O índice, que identifica a variável dentro ...


do array, pode ser obtido por qualquer N:=2;
expressão Lista[3]:= Lista[N]+Lista[3-N];
...
que devolva um valor do mesmo tipo que
o usado na gama do array

Um array em Pascal tem um número ...


fixo de elementos For i:= 1 To 3 Do
If Lista[i]>0 Then
Não é possível aceder a elementos fora
da gama que define o array Writeln(i, Lista[i]:10:2);
...

Informática - OGE Paulo Melo 9


Utilização de Vectores

Informática
Exemplo de aplicação
0101010

Program média (input, output);


{programa que lê um conjunto de valores e apresenta para cada um destes a
distância deste valor à média}
Const
dimensao = 8;
Type
ArrayReal = array[1..dimensao] of real;
Var
X: ArrayReal; media, soma: real; i: integer;
Begin
Writeln('Escreva ',dimensao,' números reais');
Soma := 0;
For i:= 1 to dimensao do begin
Readln(X[i]); soma:= soma+X[i];
End;
Media := soma/dimensao;
Writeln('O valor da média é ', média);
Writeln('Tabela de diferenças entre os elementos e a média');
Writeln('Índice':8, 'Valor':12, 'Diferença':20);
For i:= 1 to dimensao do Writeln(i:8,X[i]:12:2,(X[i]-media):20:2);
End.

Informática - OGE Paulo Melo 10


Arrays multidimensionais

Informática
Matrizes
0101010

 O Pascal permite definir arrays Exemplo:


com mais do que uma Type
dimensão - matrizes TTab= array [1..4, 1..10] of
integer;
Var
Sintaxe: Tab: TTab;
type tipo_array_mult1 = array
[gama_valores1,
gama_valores2,..., Tab[2,8] Linha 2
gama_valoresN] of tipo_base;

 No caso de apenas termos 2


dimensões podemos
considerar o array como uma
tabela tradicional
Informática - OGE Paulo Melo Tab Coluna 8
11
Arrays multimensionais

Informática
Mais que duas dimensões - exemplo
0101010

Var
VCubo: Array [1..7, 1..10, 'A'..'D'] of integer;
VCubo
Tabela 'C'

Linha 5

VCubo[5,9,'C']

Coluna 9
Informática - OGE VCubo[7,3,'A'] Paulo Melo 12
Records

Informática
Fichas ou Registos
0101010

 Ocasionalmente é conveniente guardar informação relacionada


entre si numa só estrutura, mesmo que sejam de tipos diferentes
 Exemplo: informação acerca de um livro:

Livro
 Em Pascal:
Titulo Type Tlivro = record
Titulo: string[80];
Autor
Autor: string;
Nº de Páginas
No_paginas: integer;
Ano de Edição Ano_edicao: 1457..2002;
Preço Preco: real;
End;
Informática - OGE Paulo Melo 13
Records

Informática
Sintaxe e Exemplo de aplicação
0101010

Sintaxe:  É possível usar outros tipos estruturados


Type como blocos de construção (ex: array
ficha_util = record de records):
BI: integer; ...
nome: string[80]; Type
end;
grupo_utils= array[1..100] of
... ficha_util;
Var Var
r1: ficha_util;
g: grupo_utils;
r2: record
i: integer;
campo1: tipo1;
... ...
campoN: tipoN; for i:= 1 to 100 do begin
end; Writeln('Utilizador: ', i);
Writeln('Nome: ', g[i].nome);
 Cada campo de uma variável de tipo record Writeln('Identidade:', g[i].nome);
é acedido pelo seu nome: end;
... ...
Writeln('Introduza o seu nome');
Readln(r2.nome);  A estrutura assim construída pode ser
Writeln('Introduza o seu número de BI'); tão complexa quanto se deseje
Readln(r2.BI);
...

Informática - OGE Paulo Melo 14


Arrays vs. Records

Informática
Comparação dos tipos estruturados
0101010

 Comparação ARRAY-RECORD
 São ambos mecanismos de estruturar informação, mas com
funções diferentes
 Num registo, os tipos dos dados podem ser diferentes
 Cada campo dentro de um record tem um tipo independente
dos restantes campos
 Num registo, os nomes dos campos são identificadores
 Cada componente de um array é indexado por um valor de
um tipo enumerado (X[1], Z[2,4], etc.)
 É possível usar ciclos para iterar (e fazer operações) sobre todos
os elementos de um array
 Cada componente de um record é indexado por um nome
(R.nome)
 Não é possível iterar sobre os campos de um record

Informática - OGE Paulo Melo 15


Ficheiros

Informática
Informação persistente
0101010

 Os dados (variáveis) de um programa em Pascal apenas existem enquanto o


programa executa
 Uma variável perde o seu valor entre corridas sucessivas do programa
 Necessidade de um mecanismo de armazenagem de informação em memória
secundária
 Ficheiros
 Ficheiros em Pascal
 Correspondem aos ficheiros geridos pelo sistema operativo
 São associados a um determinado tipo escolhido pelo programador (ficheiro de
inteiros, reais, caracteres, etc.)
 Sintaxe:
Type
fich_inteiros = file of integer;
...
Var
fi: fich_inteiros;
fichX: file of tipo_X;
ft: text; {file of char}

Informática - OGE Paulo Melo 16


Ficheiros em Pascal

Informática
Características e Limitações
0101010

 Em Pascal um ficheiro  Porém, em Turbo Pascal


 Precisa de ser "aberto" antes algumas destas limitações
de poder ser utilizado podem ser levantadas...
 E "fechado" após ter sido  Em Turbo Pascal, para usar um
usado ficheiro é preciso associar a
 Apenas pode ser usado para variável que o representa em
leitura OU escrita Pascal ao nome do ficheiro
 Não é possível ler de e físico no sistema operativo
escrever no mesmo ficheiro  Operação Assign
 É necessário fechar o ficheiro e
voltar a abri-lo para trocar de
operações Sintaxe:
 Apenas pode ser lido ou Assign(nome_var, nome_ficheiro)
escrito sequencialmente Onde
 não é possível alterar uma nome_var: file of qualquer_tipo
parte do meio de um ficheiro nome_ficheiro: string
 É necessário usar um ficheiro
auxiliar...

Informática - OGE Paulo Melo 17


Ficheiros em Pascal

Informática
Operações de Leitura ou Escrita
0101010

 Leitura  Escrita
 Abrir o ficheiro para leitura  Abrir o ficheiro para escrita
 Reset(f);  Rewrite(f);
 Ler do ficheiro um valor para a
 Escrever no ficheiro o valor da
variável x
variável x  Write(f,x);
 Read(f,x);  Fechar o ficheiro
 Fechar o ficheiro  Close(f)
 Close(f)

 Apenas podem ser usadas as instruções que impliquem a mudança de


linhas (ReadLn ou WriteLn) em ficheiros de texto
 Tipos text ou file of char
 Nestes ficheiros é possível verificar se estamos no fim da linha usando a
função EOLN (end-of-line)
 Eoln(f) devolve o valor verdadeiro se o ficheiro f estiver no fim de uma linha
 Em todo o tipo de ficheiros é possível verificar se chegámos ao fim do
ficheiro com a função EOF (end-of-file)
 EOF(f) devolve o valor verdadeiro se o ficheiro estiver no fim
Informática - OGE Paulo Melo 18
Ficheiros em Pascal

Informática
Exemplo de Aplicação
0101010

 Criar um programa para contar quantas linhas e


caracteres existem num ficheiro de texto (de nome
teste.txt) e escrever esses resultados num ficheiro
de inteiros (de nome result.bin)
 Lê cada caracter e incrementa um contador de caracteres
 Usa as funções EOLN para determinar o fim da linha
 Quando está no fim da linha, incrementa o contador de
linhas
 Usa a função EOF para saber quando chegou ao fim do
ficheiro a ser lido

Informática - OGE Paulo Melo 19


Ficheiros em Pascal

Informática
Exemplo de aplicação (código)
0101010

program contador (input,output);


var
ft: text; {podia ser usado file of char}
fi: file of integer;
c: char; conta_linhas, conta_chars: integer;
begin
assign(ft,'teste.txt');
reset(ft);
conta_linhas:=0; conta_chars:=0; {vamos começar por fazer as contas}
while not eof(ft) do begin {enquanto houver linhas no ficheiro}
if (eoln(ft)) then begin
conta_linhas:= conta_linhas+1; {estamos no fim da linha}
readln(ft); {passa para a próxima linha }
end;
read(ft,c); conta_chars:= conta_chars+1; {leu mais 1 caracter}
end;
close(ft);
assign(fi,'result.bin'); {agora vamos escrever os resultados no ficheiro de saída}
rewrite(fi);
write(fi, conta_linhas); write(fi, conta_chars);
close(fi);
end.
Informática - OGE Paulo Melo 20

Você também pode gostar