Ana səhifə

Universidade Regional Integrada do Alto Uruguai e das Missões Campus Frederico Westphalen Departamento de Engenharias e Ciência da Computação Algoritmos e Estrutura de Dados I informática I


Yüklə 0.52 Mb.
səhifə22/23
tarix25.06.2016
ölçüsü0.52 Mb.
1   ...   15   16   17   18   19   20   21   22   23

16.Tipos Estruturados


Os tipos estruturados diferem do tipo simples pelo fato de poderem agregar mais de um componente (informação). Cada componente de um tipo estruturado pode ser uma variável de um tipo simples ou estruturado.

A linguagem Pascal agrupa os tipos estruturados de acordo com os tipos de componentes que podem agregar: os Tipos Estruturados Homogêneos, que só podem agregar componentes do mesmo tipo e os Heterogêneos, que podem agregar tipos diferentes.

Como Tipos Homogênetos, o Pascal nos oferece os Vetores (array), os Arquivos (FILE) e o Conjunto (SET).

Como Tipo Heterogêneo o Pascal nos oferece o Registro (RECORD).


16.1Vetores Unidimensionais e Multidimensionais (Matrizes)


A palavra ARRAY define a construção de matrizes e a definição de matrizes talvez seja uma das estruturas de dados mais conhecidas. Estas podem ter um número fixo de elementos definidos por uma faixa de índices e esta faixa pode ter mais de um nível.

Quando a faixa possui um único nível (linha), costumamos chamar de vetor e quando possui mais de um nível ou linha, chamamos de matriz. Um vetor é uma matriz de uma única linha.

Uma matriz possui quatro propriedades básicas:

a) Os itens de dados individuais na matriz são chamados de elementos.

b) Todos os elementos devem ser do mesmo tipo de dados.

c) Todos os elementos são armazenados contiguamente na memória do computador, e em linguagem C o índice do primento elemento sempre será zero.

d) O nome da matriz é um valor constante que representa o endereço do primeiro elemento na matriz.

Como todos os elementos são do mesmo tamanho, não podemos definir matrizes usando uma mistura de tipos de dados, pois a localização de um elemento é feita com base no endereço do primeiro elemento mais o deslocamento proporcional ao índice.

As matrizes podem ser unidimensionais quando o acesso a um de seus elementos é feito através de um único índice, também conhecida como vetores em Pascal, ou multidimensionais quando possuem mais que uma dimensão, sendo necessário mais de um índice para acessar um de seus elementos.

Uma matriz unidimensional ou vetor em Pascal é definido com o uso da palavra reservada array, seguida de seus limites inferior e superior entre colchetes, da palavra reservada of e do tipo de componente do vetor.



: ARRAY [ .. ] of

Ex:


Alunos: Array[1..40] of integer;

Uma matriz multidimensional pode ser comparada a uma tabela de duas ou mais dimensões, sendo necessários tantos índices quantas forem as dimensões.

Uma matriz multidimensional em Pascal é definida também com o uso da palavra reservada array, seguida de seus limites inferior e superior para cada dimensão, separada por vírgulas, entre colchetes, da palavra reservada of e do tipo de componente do vetor.

: ARRAY [ .. , .. , .. ] of

Ex:


Notas: Array[1..40,1..3] of integer;

Uma matriz pode ser declarada e inicializada declarando-se no bloco de constantes:

const

num1: array [1..5] of integer = (2,4,6,8,10);



num2: array [1..2,1..5] of integer = ((10,20,30,40,50),(15,25,35,45,55));

Observe que não se pode usar uma variável na definição da matriz para dimensionar o seu tamanho, pois o compilador precisa alocar a memória necessária no momento da compilação.


Exemplo:

Program Arrays;

Uses CRT;
Var

Vetor: array[1..10] of integer;

Matriz: array[1..5,1..10] of integer;

i, j:integer;


begin

clrscr;


Writeln('Lendo Valores do Vetor: ');

for i:= 1 to 10 do

begin

write('Elemento ',i,': ');



readln(Vetor[i]);

end;


Writeln('Lendo Valores da Matriz: ');

for i:= 1 to 5 do

begin

for j:= 1 to 10 do



begin

write('Elemento [', i, ',' , j, ']: ');

readln(Matriz[i,j]);

end;


end;

Writeln('Escrevendo Valores do Vetor: ');

for i:= 1 to 10 do

begin


writeln('Elemento ',i,': ',Vetor[i]);

end;


Writeln('Escrevendo Valores da Matriz: ');

for i:= 1 to 5 do

begin

for j:= 1 to 10 do



begin

writeln('Elemento [', i, ',' , j, ']: ',Matriz[i,j]);

end;

end;


readln;

end.

16.2 Estruturas


A declaração RECORD permite-nos definir um registro:

= RECORD

: tipo;

: tipo;

. . .

: tipo;

END;

REGISTRO é um grupo de informações relativas a uma mesma entidade. Estas informações podem ter características diferentes, como em um R.G., onde temos diversos campos com nome, nome do pai, nome da mãe, número do registro, etc.

O registro tem uma particularidade em relação a uma matriz, enquanto em uma matriz podemos ter vários elementos de um único tipo, no registro podemos ter elementos com tipos diferentes. A definição de um registro no Turbo Pascal só pode ser feita na área de tipos (TYPE) e assim sendo, quando definimos um registro, na verdade, estamos criando um tipo novo. Para podermos utilizar este tipo, temos que declará-lo na área de variáveis (VAR), já a manipulação dos campos de um arquivo deve ser feita através da referência do nome do registro e o nome do campo unidos por um ponto (.).

Exemplos :

TYPE

registro = RECORD



nome : STRING[30];

ende : STRING[25];

fone : STRING[8];

idade : BYTE;

END;
tela = RECORD

atributo : BYTE;

caracter : CHAR;

END;


Podemos ainda ter uma estrutura de registro seletivo :

Exemplo:


Program ExemploRegistroSeletivo;

uses crt;

type
Classe = (Num, Str);
uniao = record

Nome: string[30];

case campo: Classe of

Num: (N: real);

Str: (S: string);

end;
var

un: uniao;

op: char;


begin

clrscr;


write('Nome: ');

readln(un.nome);

writeln('O que voce quer armazenar: [N] Numero - [S] - String?');

op:=readkey;

if upcase(op)='N' then

begin


write('Digite um numero: ');

readln(un.N);

writeln(un.nome);

writeln(un.N:0:6);

end

else


begin

write('Digite uma string: ');

readln(un.S);

writeln(un.nome);

writeln(un.S);

end;


readkey;

end.


Neste tipo de registro, temos a possibilidade de variar a estrutura. dependendo da condição encontrada no decorrer do programa para um campo-sinal previamente declarado como tipo escalar, esta estrutura de seleção é chamada de união discriminada, cabendo desta forma ao programador manter válida.

Exemplo de referência de um campo do registro :

PROGRAM teste_reg;
TYPE

registro = RECORD

nome :STRING[30];

ende :STRING[25];

fone :STRING[8];

idade :BYTE;

END;

VAR


reg : registro;
BEGIN

reg.nome := ‘Roberto’;

reg.ende := ‘Rua Anônima, 0’;

reg.fone := ‘999-9999’;

reg.idade:= 30;

writeln(‘Nome: ’, reg.nome);

writeln(‘Endereço: ’, reg.ende);

writeln(‘Fone: ’, reg.fone);

writeln(‘Idade: ’, reg.idade);

write(‘Nome: ’);

readln(reg.nome);

write(‘Endereço: ’

readln(reg.ende);

write(‘Fone: ’

readln(reg.fone);

write(‘Idade: ’

readln(reg.idade);

writeln(‘Nome: ’, reg.nome);

writeln(‘Endereço: ’, reg.ende);

writeln(‘Fone: ’, reg.fone);

writeln(‘Idade: ’, reg.idade);

END.
Pode-se também armazenar os registros em memória, através do uso de vetores ou matrizes de estrutras.


Exemplo:

Program ExemploRegistroSeletivo;

uses crt;

type
cadastro = record

codigo: integer;

nome: string[30];

rg: string[15];

end;
var

cad: Array [1..10] of cadastro;

i: integer;


begin

clrscr;


for i:= 1 to 10 do

begin


write('Codigo: ');

readln(cad[i].codigo);

write('Nome: ');

readln(cad[i].nome);

write('RG: ');

readln(cad[i].rg);

end;

clrscr;


for i:= 1 to 10 do

begin


writeln(cad[i].codigo, ' - ', cad[i].nome, ' - ', cad[i].rg);

end;


readkey;

end.


1   ...   15   16   17   18   19   20   21   22   23


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©atelim.com 2016
rəhbərliyinə müraciət