E N D
1. Programao em Pascal Estruturas de Dados
+
Algoritmos
=
Programas
2. Informtica - OGE Paulo Melo 2 Sumrio Estruturas de Dados
Strings
Tipos definidos pelo utilizador
Tipos simples
Tipos definidos por enumerao
Tipos definidos por subdomnio
Estruturas complexas
Matrizes (Arrays)
Fichas (Records)
Ficheiros (Files)
3. Informtica - OGE Paulo Melo 3 Cadeias de caracteresStrings Em pascal um tipo de dados serve para armazenar explicitamente sequncias de caracteres a string
Pode ser dimensionada (com o nmero mximo de caracteres que pode conter)
formato string[X]
no caso de no ser dimensionada funciona como X=255
A funo length obtm a verdadeira dimenso da string (em caracteres)
Na prtica uma string[X] um array de caracteres
String[X] um array [1..X] of char
possvel aceder a cada varivel char que constitui a string individulmente
4. Informtica - 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. Informtica - OGE Paulo Melo 5 Tipos definidos pelo programadorDefinio e Sintaxe Zona de definio de tipos
Sintaxe:
Type
NomeTipo = definio_do_tipo;
Tipo definido por enumerao
Sintaxe:
NomeTipo = ( nome1, nome2, nome3)
Apresenta todos os componentes possveis para o tipo
As suas componentes so identificadores, no valores
Cria um tipo enumerado Tipo definido por gama de valores ou subdomnio
Sintaxe:
NomeTipo= ValorInicial ..ValorFinal
As suas componente so valores enumerveis
Define que esse tipo possui todos os valores desde ValorInicial at ValorFinal
Pode ser definida uma gama de valores sobre qualquer tipo enumerado
Nota
No podem ser usados directamente instrues de entrada (read) ou sada (write) em tipos definidos por enumerao.
6. Informtica - OGE Paulo Melo 6 Tipos definidos pelo programadorExemplo de aplicao ...
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 aceitvel');
inverno: writeln('tempo mau');
end;
...
7. Informtica - OGE Paulo Melo 7 Arrays Matrizes e Vectores Usam-se arrays para representar variveis que so
Elementos do mesmo tipo
Relacionados entre si
Sobre os quais pretendemos fazer operaes 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 varivel individual
Possui um nome (derivado do nome do array)
Possui um tipo (o do tipo base do array)
Possui um valor (manipulado como qualquer varivel)
8. Informtica - 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;
{declarao de um tipo definido anteriormente, que um array}
nome_array2: array [gama_de_valores2] of tipo_base2;
{declarao explcita}
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. Informtica - OGE Paulo Melo 9 VectoresExemplos de aplicao
10. Informtica - OGE Paulo Melo 10 Utilizao de VectoresExemplo de aplicao Program mdia (input, output);
{programa que l um conjunto de valores e apresenta para cada um destes a distncia deste valor mdia}
Const
dimensao = 8;
Type
ArrayReal = array[1..dimensao] of real;
Var
X: ArrayReal; media, soma: real; i: integer;
Begin
Writeln('Escreva ',dimensao,' nmeros 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 mdia ', mdia);
Writeln('Tabela de diferenas entre os elementos e a mdia');
Writeln('ndice':8, 'Valor':12, 'Diferena':20);
For i:= 1 to dimensao do Writeln(i:8,X[i]:12:2,(X[i]-media):20:2);
End.
11. Informtica - OGE Paulo Melo 11 Arrays multidimensionaisMatrizes O Pascal permite definir arrays com mais do que uma dimenso - matrizes
Sintaxe:
type tipo_array_mult1 = array [gama_valores1, gama_valores2,...,gama_valoresN] of tipo_base;
No caso de apenas termos 2 dimenses podemos considerar o array como uma tabela tradicional Exemplo:
Type
TTab= array [1..4, 1..10] of integer;
Var
Tab: TTab;
12. Informtica - OGE Paulo Melo 12 Arrays multimensionaisMais que duas dimenses - exemplo
13. Informtica - OGE Paulo Melo 13 RecordsFichas ou Registos Ocasionalmente conveniente guardar informao relacionada entre si numa s estrutura, mesmo que sejam de tipos diferentes
Exemplo: informao 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. Informtica - OGE Paulo Melo 14 RecordsSintaxe e Exemplo de aplicao 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 varivel de tipo record acedido pelo seu nome:
...
Writeln('Introduza o seu nome');
Readln(r2.nome);
Writeln('Introduza o seu nmero de BI');
Readln(r2.BI);
...
possvel usar outros tipos estruturados como blocos de construo (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 construda pode ser to complexa quanto se deseje
15. Informtica - OGE Paulo Melo 15 Arrays vs. RecordsComparao dos tipos estruturados Comparao ARRAY-RECORD
So ambos mecanismos de estruturar informao, mas com funes 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 so identificadores
Cada componente de um array indexado por um valor de um tipo enumerado (X[1], Z[2,4], etc.)
possvel usar ciclos para iterar (e fazer operaes) sobre todos os elementos de um array
Cada componente de um record indexado por um nome (R.nome)
No possvel iterar sobre os campos de um record
16. Informtica - OGE Paulo Melo 16 FicheirosInformao persistente Os dados (variveis) de um programa em Pascal apenas existem enquanto o programa executa
Uma varivel perde o seu valor entre corridas sucessivas do programa
Necessidade de um mecanismo de armazenagem de informao em memria secundria
Ficheiros
Ficheiros em Pascal
Correspondem aos ficheiros geridos pelo sistema operativo
So 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. Informtica - OGE Paulo Melo 17 Ficheiros em PascalCaractersticas e Limitaes Em Pascal um ficheiro
Precisa de ser "aberto" antes de poder ser utilizado
E "fechado" aps ter sido usado
Apenas pode ser usado para leitura OU escrita
No possvel ler de e escrever no mesmo ficheiro
necessrio fechar o ficheiro e voltar a abri-lo para trocar de operaes
Apenas pode ser lido ou escrito sequencialmente
no possvel alterar uma parte do meio de um ficheiro
necessrio usar um ficheiro auxiliar... Porm, em Turbo Pascal algumas destas limitaes podem ser levantadas...
Em Turbo Pascal, para usar um ficheiro preciso associar a varivel que o representa em Pascal ao nome do ficheiro fsico no sistema operativo
Operao Assign
Sintaxe:
Assign(nome_var, nome_ficheiro)
Onde
nome_var: file of qualquer_tipo
nome_ficheiro: string
18. Informtica - OGE Paulo Melo 18 Ficheiros em PascalOperaes de Leitura ou Escrita Leitura
Abrir o ficheiro para leitura
Reset(f);
Ler do ficheiro um valor para a varivel x
Read(f,x);
Fechar o ficheiro
Close(f)
Escrita
Abrir o ficheiro para escrita
Rewrite(f);
Escrever no ficheiro o valor da varivel x
Write(f,x);
Fechar o ficheiro
Close(f)
19. Informtica - OGE Paulo Melo 19 Ficheiros em PascalExemplo de Aplicao 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 funes EOLN para determinar o fim da linha
Quando est no fim da linha, incrementa o contador de linhas
Usa a funo EOF para saber quando chegou ao fim do ficheiro a ser lido
20. Informtica - OGE Paulo Melo 20 Ficheiros em PascalExemplo de aplicao (cdigo) 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 comear 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 prxima 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 sada}
rewrite(fi);
write(fi, conta_linhas); write(fi, conta_chars);
close(fi);
end.