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.