Programação em Pascal III by hcw25539

VIEWS: 0 PAGES: 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:
       Type                                                Sintaxe:
           NomeTipo = definição_do_tipo;                   NomeTipo= ValorInicial ..ValorFinal

                                                              As suas componente são valores
                                                               enumeráveis
      Tipo definido por enumeração                           Define que esse tipo possui todos os
                                                               valores desde ValorInicial até
       Sintaxe:                                                ValorFinal
       NomeTipo = ( nome1, nome2, nome3)                      Pode ser definida uma gama de
                                                               valores sobre qualquer tipo
                                                               enumerado
            Apresenta todos os componentes
             possíveis para o tipo
            As suas componentes são                      Nota
             identificadores, não valores                     Não podem ser usados directamente
            Cria um tipo enumerado                            instruções de entrada (read) ou
                                                               saída (write) em tipos definidos por
                                                               enumeração.
    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
                                              Readln(Lista[2]);
pode ser usado exactamente nas                Lista[1]:= 2.0;
mesmas situações em que qualquer              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          N:=2;
qualquer 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              For i:= 1 To 3 Do
fixo de elementos                               If Lista[i]>0 Then
    Não é possível aceder a elementos fora        Writeln(i, Lista[i]:10:2);
    da gama que define o array                ...
 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;                       ...
            ...                                  for i:= 1 to 100 do begin
            campoN: tipoN;                         Writeln('Utilizador: ', i);
            end;                                   Writeln('Nome: ', g[i].nome);
                                                   Writeln('Identidade:', g[i].nome);
                                                 end;
      Cada campo de uma variável de tipo
                                                 ...
       record é acedido pelo seu nome:
...
Writeln('Introduza o seu nome');                        A estrutura assim construída pode ser
Readln(r2.nome);                                         tão complexa quanto se deseje
Writeln('Introduza o seu número de BI');
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
                  usado                                                 um ficheiro é preciso associar
            Apenas pode ser usado para                                 a variável que o representa
             leitura OU escrita                                         em Pascal ao nome do
                 Não é possível ler de e                               ficheiro físico no sistema
                  escrever no mesmo ficheiro                            operativo
                       É necessário fechar o ficheiro e
                        voltar a abri-lo para trocar de                    Operação Assign
                        operações
            Apenas pode ser lido ou                            Sintaxe:
             escrito sequencialmente
                                                                Assign(nome_var, nome_ficheiro)
                 não é possível alterar uma
                  parte do meio de um ficheiro                          Onde
                       É necessário usar um ficheiro                     nome_var: file of qualquer_tipo
                        auxiliar...
                                                                          nome_ficheiro: string
    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
                       Read(f,x);                                           Write(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

								
To top