ESTRUTURA DE DADOS - VARIÁVEIS COMPOSTAS Prof. Angelo Augusto Frozza, M.Sc. [email protected] ROTEIRO | Variáveis compostas homogêneas y Arrays Vetores | Matrizes | | Variáveis compostas heterogêneas y y y 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; y | Geralmente são utilizados os tipos primitivos para construir outras estruturas de dados mais complexas; Essas são chamadas de Estruturas Compostas de Dados y 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; y 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. y 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: y y y 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; y | 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: y y y y y | := := := := := 5.2; 8.0; 9.2; 7.5; 8.3; Observe que o nome é um só, o que muda é a informação indicada dentro dos colchetes (índice do vetor) y | NOTA[1] NOTA[2] NOTA[3] NOTA[4] NOTA[5] Í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 y | Permitem a manipulação de um conjunto de informações de tipos primitivos diferentes; Exemplo: PASSAGEM DE ÔNIBUS NÚMERO: 0001 De: Para: Data: ___ / ___ / ___ Horário: ____ : ____ Poltrona: _________ Distância: ________ km REGISTROS | Exemplo: Passagem de ônibus y Pode ser representada por uma variável | y 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; 9Desta forma pode-se ler ou alterar as informações dos elementos que compõem o registro; REGISTROS | Declaração y Em Pascal, os tipos Registro devem ser declarados ou atribuídos antes das definições das variáveis; | y É 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 DICA: use o prefixo reg program Exemplo_Registros; para identificar o nome type de um registro. regPassagem = record numero: integer; origem: string; destino: string; data: string; horario: string; poltrona: integer; distancia: real; end; var passagem: regPassagem; 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.