E N D
1. Programação em Pascal Estruturas de Dados
+
Algoritmos
=
Programas
2. Informática - OGE Paulo Melo 2 Sumário 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)
3. Informática - OGE Paulo Melo 3 Cadeias de caracteresStrings 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
4. Informática - OGE Paulo Melo 4 Cadeias de caracteresStrings - Exemplo 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.
5. Informática - OGE Paulo Melo 5 Tipos definidos pelo programadorDefinição e Sintaxe Zona de definição de tipos
Sintaxe:
Type
NomeTipo = definição_do_tipo;
Tipo definido por enumeração
Sintaxe:
NomeTipo = ( nome1, nome2, nome3)
Apresenta todos os componentes possíveis para o tipo
As suas componentes são identificadores, não valores
Cria um tipo enumerado Tipo definido por gama de valores ou subdomínio
Sintaxe:
NomeTipo= ValorInicial ..ValorFinal
As suas componente são valores enumeráveis
Define que esse tipo possui todos os valores desde ValorInicial até ValorFinal
Pode ser definida uma gama de valores sobre qualquer tipo enumerado
Nota
Não podem ser usados directamente instruções de entrada (read) ou saída (write) em tipos definidos por enumeração.
6. Informática - OGE Paulo Melo 6 Tipos definidos pelo programadorExemplo de aplicação ...
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;
...
7. Informática - OGE Paulo Melo 7 Arrays Matrizes e Vectores 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)
8. Informática - OGE Paulo Melo 8 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
Que pode ser qualquer tipo definido em Pascal
Que é o tipo das componentes individuais do vector
Qualquer tipo enumerado pode servir para a gama de valores
Exemplo:
Type tipolista= array [1..3] of real;
Var lista: tipolista; Vectores Arrays unidimensionais
9. Informática - OGE Paulo Melo 9 VectoresExemplos de aplicação
10. Informática - OGE Paulo Melo 10 Utilização de VectoresExemplo de aplicação 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.
11. Informática - OGE Paulo Melo 11 Arrays multidimensionaisMatrizes O Pascal permite definir arrays com mais do que uma dimensão - matrizes
Sintaxe:
type tipo_array_mult1 = array [gama_valores1, gama_valores2,...,gama_valoresN] of tipo_base;
No caso de apenas termos 2 dimensões podemos considerar o array como uma tabela tradicional Exemplo:
Type
TTab= array [1..4, 1..10] of integer;
Var
Tab: TTab;
12. Informática - OGE Paulo Melo 12 Arrays multimensionaisMais que duas dimensões - exemplo
13. Informática - OGE Paulo Melo 13 RecordsFichas ou Registos Ocasionalmente é conveniente guardar informação relacionada entre si numa só estrutura, mesmo que sejam de tipos diferentes
Exemplo: informação acerca de um livro:
Em Pascal:
Type Tlivro = record
Titulo: string[80];
Autor: string;
No_paginas: integer;
Ano_edicao: 1457..2002;
Preco: real;
End;
14. Informática - OGE Paulo Melo 14 RecordsSintaxe e Exemplo de aplicação Sintaxe:
Type
ficha_util = record
BI: integer;
nome: string[80];
end;
...
Var
r1: ficha_util;
r2: record
campo1: tipo1;
...
campoN: tipoN;
end;
Cada campo de uma variável de tipo record é acedido pelo seu nome:
...
Writeln('Introduza o seu nome');
Readln(r2.nome);
Writeln('Introduza o seu número de BI');
Readln(r2.BI);
...
É possível usar outros tipos estruturados como blocos de construção (ex: array de records):
...
Type
grupo_utils= array[1..100] of ficha_util;
Var
g: grupo_utils;
i: integer;
...
for i:= 1 to 100 do begin
Writeln('Utilizador: ', i);
Writeln('Nome: ', g[i].nome);
Writeln('Identidade:', g[i].nome);
end;
...
A estrutura assim construída pode ser tão complexa quanto se deseje
15. Informática - OGE Paulo Melo 15 Arrays vs. RecordsComparação dos tipos estruturados 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
16. Informática - OGE Paulo Melo 16 FicheirosInformação persistente 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}
17. Informática - OGE Paulo Melo 17 Ficheiros em PascalCaracterísticas e Limitações Em Pascal um ficheiro
Precisa de ser "aberto" antes de poder ser utilizado
E "fechado" após ter sido usado
Apenas pode ser usado para leitura OU escrita
Não é possível ler de e escrever no mesmo ficheiro
É necessário fechar o ficheiro e voltar a abri-lo para trocar de operações
Apenas pode ser lido ou escrito sequencialmente
não é possível alterar uma parte do meio de um ficheiro
É necessário usar um ficheiro auxiliar... Porém, em Turbo Pascal algumas destas limitações podem ser levantadas...
Em Turbo Pascal, para usar um ficheiro é preciso associar a variável que o representa em Pascal ao nome do ficheiro físico no sistema operativo
Operação Assign
Sintaxe:
Assign(nome_var, nome_ficheiro)
Onde
nome_var: file of qualquer_tipo
nome_ficheiro: string
18. Informática - OGE Paulo Melo 18 Ficheiros em PascalOperações de Leitura ou Escrita Leitura
Abrir o ficheiro para leitura
Reset(f);
Ler do ficheiro um valor para a variável x
Read(f,x);
Fechar o ficheiro
Close(f)
Escrita
Abrir o ficheiro para escrita
Rewrite(f);
Escrever no ficheiro o valor da variável x
Write(f,x);
Fechar o ficheiro
Close(f)
19. Informática - OGE Paulo Melo 19 Ficheiros em PascalExemplo de Aplicação 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
20. Informática - OGE Paulo Melo 20 Ficheiros em PascalExemplo de aplicação (código) 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.