ESTRUTURA DE DADOS -VARIÁVEIS COMPOSTAS Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br
ROTEIRO Variáveis compostas homogêneas Arrays Vetores Matrizes Variáveis compostas heterogêneas Registros Registros de conjuntos Conjuntos de registros
VARIÁVEIS COMPOSTAS Os tipos Primitivos (inteiro, real, caracter e lógico) não são suficientes para representar todos os tipos de dados; Geralmente são utilizados os tipos primitivos para construir outras estruturas de dados mais complexas; Essas são chamadas de Estruturas Compostas de Dados Dividem-se em duas formas fundamentais: homogêneas (vetores e matrizes) heterogêneas (registros)
VETORES Com os conhecimentos que possuímos até agora, podemos concluir que ao utilizarmos variáveis, conseguimos armazenar apenas um valor por vez; Agora, imagine um programa que precisa armazenar as notas das 5 provas realizadas por um aluno; Seria necessário criar cinco variáveis para armazenar as notas: NOTA1, NOTA2, NOTA3, NOTA4, NOTA5 : integer; Em Pascal existem estruturas que permitem agrupar várias informações dentro de uma mesma variável. Estas estruturas são chamadas de vetores e matrizes.
VETORES Um vetor também é chamado de matriz (array) unidimensional; Este tipo de estrutura é representado por seu nome, tamanho e seu tipo: <vetor> : array[tamanho] of <tipo_de_dado>; onde: vetor é o nome atribuído ao vetor; tamanho é o tamanho atribuído ao vetor, em número de elementos; tipo_de_dado é o tipo de elemento armazenado (inteiro, real...).
VETORES Como já visto, uma variável somente pode conter um valor por vez; No caso dos vetores, estes podem armazenar mais de um valor por vez, pois são dimensionados exatamente para este fim; Porém, todos os valores devem ser do mesmo TIPO DE DADO; Exemplo de vetor para armazenar as cinco notas do aluno: notas : array[1..5] of real;
VETORES A leitura e exibição de vetores são feitas indicando individualmente quais elementos se deseja ler ou imprimir; Exemplo: NOTA[1] := 5.2; NOTA[2] := 8.0; NOTA[3] := 9.2; NOTA[4] := 7.5; NOTA[5] := 8.3; Observe que o nome é um só, o que muda é a informação indicada dentro dos colchetes (índice do vetor) Índice é o endereço onde o valor está armazenado, ou seja, a posição da nota do aluno no vetor; Podemos imaginar o vetor como uma tabela com cinco colunas: NOTA 5.2 8.0 9.2 7.5 8.3
VETORES program LISTA_NOME; var nome: array[1..10] of string; i: integer; begin writeln( Listagem de nomes ); writeln; { *** Entrada dos Dados *** } for i := 1 to 10 do begin write( Digite o, i:2, o. nome: ); readln(nome[i]); end; writeln; { *** Apresentação dos Nomes *** } for i := 1 to 10 do writeln( Nome:, i:2, -->, nome[i]); writeln; writeln( Tecle <ENTER> para encerrar: ); readln; end.
MATRIZES Em breve...
REGISTROS Registros são Estruturas Compostas Heterogêneas Permitem a manipulação de um conjunto de informações de tipos primitivos diferentes; Exemplo: PASSAGEM DE ÔNIBUS NÚMERO: 0001 De: Data: / / Poltrona: Para: Horário: : Distância: km
REGISTROS Exemplo: Passagem de ônibus Pode ser representada por uma variável Passagem do tipo regpassagem regpassagem é um tipo composto por: Numero: inteiro Origem, Destino, Data e Horario: caracter Poltrona: inteiro Distancia: real É possível manipular estes tipos primitivos em conjunto (registro) através dos comandos de leitura e escrita; Desta forma pode-se ler ou alterar as informações dos elementos que compõem o registro;
REGISTROS Declaração Em Pascal, os tipos Registro devem ser declarados ou atribuídos antes das definições das variáveis; É muito comum ocorrer a necessidade de se declarar uma variável com o tipo de registro atribuído; Um tipo Registro é declarado em Pascal na seção type em conjunto com o bloco record..end; type nomeregistro = record <lista de campos e tipos> end;
REGISTROS Declaração program Exemplo_Registros; type regpassagem = record numero: integer; origem: string; destino: string; data: string; horario: string; poltrona: integer; distancia: real; end; var passagem: regpassagem; DICA: use o prefixo reg para identificar o nome de um registro.
REGISTROS Manipulação begin readln (passagem.numero); readln (passagem.origem); DICA: para acessar um componente do registro use a sintaxe: variavel.componente passagem.distancia := 500; passagem.destino := 'Florianópolis'; writeln (passagem.numero); writeln (passagem.destino); end.