0101010 informática programação em pascal estruturas de dados + algoritmos = programas

33
0101010 I n f o r m á t i c a Programação em Pascal Estruturas de Dados + Algoritmos = Programas

Upload: fernanda-paiva

Post on 07-Apr-2016

231 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

Programação em Pascal

Estruturas de Dados+

Algoritmos =

Programas

Page 2: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

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) arquivos (Files)

Page 3: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

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

Page 4: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

4

Cadeias de caracteresStrings - Exemplo

Program TestaString;Var

S: string;S1: string[80];

BeginWriteln('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.

Page 5: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

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

Page 6: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

6

Tipos definidos pelo programadorDefinição e Sintaxe

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.

Page 7: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

7

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 ofverao: writeln('bom tempo');primavera, outono: writeln('tempo aceitável');inverno: writeln('tempo mau');end;

...

Page 8: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

8

Arrays Matrizes e Vetores

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 vetores) 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)

Page 9: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

9

Sintaxe:Type

tipo_array1 = array [ gama_de_valores1] of tipo_base1;{define o tipo tipo_array1 como um vetor 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}

Exemplo:Type tipolista= array [1..3] of real;Var lista: tipolista;

Vetores Arrays unidimensionais

Page 10: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

10

VetoresExemplos de aplicação

Cada elemento de um tipo estruturado pode ser usado exatamente nas mesmas situações em que qualquer outra variável do mesmo tipo pode ser usada

...Readln(Lista[2]);Lista[1]:= 2.0;Lista[3]:= Lista[2]*3+Lista[1];Writeln(Lista[3]);...

O índice, que identifica a variável dentro do array, pode ser obtido por qualquer expressão:

que devolva um valor do mesmo tipo que o usado na gama do array

...N:=2;Lista[3]:= Lista[N]+Lista[3-N];...

Um array em Pascal tem um número fixo de elementos

Não é possível acessar a elementos fora da gama que define o array

...For i:= 1 To 3 Do If Lista[i]>0 Then Writeln(i, Lista[i]:10:2);...

Page 11: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

11

Utilização de VetoresExemplo 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);

End.

Page 12: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

12

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;

VarTab: TTab;

Tab[2,8]

Tab

Linha 2

Coluna 8

Page 13: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

Informática - OGE Paulo Melo 13

Arrays multimensionaisMais que duas dimensões - exemplo

VCubo[5,9,'C']

Tabela 'C'

Linha 5

Coluna 9

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

VCubo

VCubo[7,3,'A']

Page 14: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

14

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;

Titulo

Autor

Nº de Páginas

Ano de Edição

Preço

Livro

Page 15: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

15

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;

Varg: 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

Page 16: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

16

Arrays vs. RecordsComparação dos tipos estruturados

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

Page 17: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

17

ArquivosInformaçã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 arquivos

arquivos em Pascal Correspondem aos arquivos geridos pelo sistema operativo São associados a um determinado tipo escolhido pelo programador

(arquivo de inteiros, reais, caracteres, etc.)

Page 18: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

18

Arquivos Informação persistente

Sintaxe:Type

fich_inteiros = file of integer;...Var

fi: fich_inteiros;

Page 19: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

19

Arquivos em PascalCaracterísticas e Limitações

Em Pascal um arquivo 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 arquivo É necessário fechar o

arquivo 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 arquivo É necessário usar um

arquivo auxiliar...

Porém, em Turbo Pascal algumas destas limitações podem ser levantadas...

Em Turbo Pascal, para usar um arquivo é preciso associar a variável que o representa em Pascal ao nome do arquivo físico no sistema operativo Operação Assign

Sintaxe:Assign(nome_var, nome_arquivo)

Ondenome_var: file of qualquer_tiponome_arquivo: string

Page 20: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

20

Arquivos em PascalOperações de Leitura ou Escrita

Leitura Abrir o arquivo para leitura

Reset(f); Ler do arquivo um valor para a

variável x Read(f,x);

Fechar o arquivo Close(f)

Escrita Abrir o arquivo para escrita

Rewrite(f); Escrever no arquivo o valor da

variável x Write(f,x);

Fechar o arquivo Close(f)

Page 21: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

21

Arquivos em PascalOperações de Leitura ou Escrita

Apenas podem ser usadas as instruções que impliquem a mudança de linhas (ReadLn ou WriteLn) em arquivos de texto

Tipos text ou file of char Nestes arquivos é 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 arquivo f estiver no fim de

uma linha

Em todo o tipo de arquivos é possível verificar se chegámos ao fim do arquivo com a função EOF (end-of-file)

EOF(f) devolve o valor verdadeiro se o arquivo estiver no fim

Page 22: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

22

Arquivos em PascalExemplo de Aplicação

Criar um programa para contar quantas linhas e caracteres existem num arquivo de texto (de nome teste.txt) e escrever esses resultados num arquivo 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 arquivo a ser

lido

Page 23: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

23

Ponteiros em Pascal

Até agora temos definido variáveis de forma estática, ou seja, reservamos o espaço na memória necessária para as variáveis que iremos utilizar no programa.

Isto funciona bem quando sabemos o quanto de memória iremos utilizar, mas e quando não sabemos?

Tome por Exemplo as definições dos ARRAY’s.

Será que sempre temos certeza do tamanho de um ARRAY poderá ter por toda a vida de um programa?

Page 24: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

24

Ponteiros em Pascal

Será que o meu sistema de cadastro de clientes, o qual usa um ARRAY com 10.000 posições é o suficiente?

Será que nunca irá acontecer de se tentar cadastrar o cliente de número 10.001?

E o que acontece quando os clientes cadastrados nunca passarem de 100? As posições de memória restantes (9.900) não poderão ser utilizadas por

outras variáveis, pois já estão reservadas. Pensando neste tipo de problema, foi desenvolvido um novo conceito para

alocação de memória, onde poderemos reservar espaço da memória disponível (HEAP) a medida que for necessário, da mesma forma que poderemos liberar posições de memória quando não mais precisarmos delas.

Page 25: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

25

Ponteiros em Pascal

Exemplo: Alocar na memória para uma variável do tipo INTEGER e atribuir a esta posição de memória um valor qualquerPROGRAM ESTATICO;VAR Número : INTEGER;BEGIN

Número := 10;END.

 No Exemplo acima ocorre as seguintes situações:a) Reservamos espaço na memória suficiente para armazenar dois (2) BYTE’s, ou seja, um INTEGER, e demos a esta posição de memória um Nome simbólico: “Número”b) Atribuímos a variável “Numero” o valor dez (10).

Page 26: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

26

Ponteiros em Pascal

A Sintaxe para atribuição de valores é a mesma utilizada em variáveis simples, a única diferença é que devemos colocar após o Nome da variável apontadora o símbolo “ ^ “Exemplo:PROGRAM ATRIBUI;VAR

Ap_Número : ^INTEGER;BEGIN

NEW(Ap_Número);Ap_Número ^:= 10;DISPOSE (Ap_Número);

END.

Page 27: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

27

Ponteiros em Pascal

No Exemplo anterior ocorre o seguinte: a) Criamos uma variável que irá apontar para dois (2) BYTE’s (um INTEGER) na

memória.

b) Alocamos espaço suficiente para armazenar um valor do tipo INTEGER e fazemos com que a variável “Ap_Número” aponte para a posição de memória alocada.

c) Colocamos na posição de memória apontada por “Ap_Número” o valor dez (10).

d) Liberamos os dois (2) BYTE’s apontados por “Ap_Número”. A informação não mais poderá ser acessada.

Page 28: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

28

Ponteiros em Pascal

Sintaxe para definição:<Nome da variável> : ^<tipo>

 Exemplo 1: Definir variáveis pointer para os tipos STRING, INTEGER, REAL, CHAR, BOOLEAN.

PROGRAM DEFINE_POINTER;VAR Ap_STRING : ^STRING;Ap_INTEGER : ^INTEGER;Ap_REAL : ^REAL;Ap_BYTE : ^BYTE;Ap_CHAR : ^CHAR;Ap_BOOLEAN : ^BOOLEAN;

BEGIN<comandos>;END.

Page 29: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

29

Ponteiros em Pascal

Caso seja necessário definir variáveis pointers para RECORD’s e ARRAY’s será preciso antes criar tipos de dados que representem estes mesmos RECORD’s e ARRAY’s.

 Exemplo 2: Definir uma variável pointer para um ARRAY[1..2] OF STRING.

PROGRAM DEFINE_ARRAY_POINTER;TYPE

Tvetor = ARRAY [1..2] OF STRING;VAR

Ap_vetor : ^Tvetor;BEGIN

<comandos>;END.

Page 30: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

30

Ponteiros em Pascal

Rotina : NEW()Função :

Aloca espaço na memória para uma informação, com o tamanho definido pelo tipo da variável pointer.

Sintaxe : NEW(Variável Pointer)

Exemplo:PROGRAM ALOCA;VARAp_WORD : ^WORD;BEGINNEW(Ap_WORD);END.

 

Page 31: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

31

Ponteiros em Pascal

Rotina : DISPOSE()Função :

Libera espaço na memória, o número de BYTE’s liberados dependerá do tipo da variável pointer utilizada. Uma vez liberada memória, o valor lá armazenado estará perdido.

Sintaxe : DIPOSE(Variável Pointer)

Exemplo:PROGRAM LIBERA;VARAp_WORD : ^WORD;BEGINNEW(Ap_WORD);DISPOSE (Ap_WORD);END.

Page 32: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

32

Ponteiros em PascalExemplo de aplicação (código)

Exemplo de uso de ponteiros em C.

Coloque em Pascal e explique as linhas:

int main () { int i;int vetorTeste[3] = {4, 7, 1}; int *ptr = vetorTeste;

printf("%p\n", vetorTeste); printf("%p\n", ptr); printf("%p\n", &ptr); for (i = 0; i < 3; i++)

{ printf("O endereço do índice %d do vetor é %p\n", i, &ptr[i]); printf("O valor do índice %d do vetor é %d\n", I, ptr[i]);}

return 0;

}

Page 33: 0101010 Informática Programação em Pascal Estruturas de Dados + Algoritmos = Programas

0101010

Informática

33

Ponteiros em PascalExemplo de aplicação (código)

Faça:

Crie um vetor com 5 elementos, sendo que cada posição do vetor corresponderá a um pointer para um valor do tipo REAL. Faça a leitura de 5 valores e armazene-os na memória.