Universidade Estadual de Maringá - UEM Centro de Tecnologia - CTC Departamento de Informática - DIN Fundamentos da Computação Agregado Homogêneo e Heterogêneo Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br
Prof. Yandre Maldonado - 2 Até agora os problemas eram resolvidos com tipos de dados simples (ou primitivos); Agora estudaremos os tipos de dados estruturados; Tipos de Dados Estruturados: Agregados homogêneos (seqüência de valores de um mesmo tipo); Agregados heterogêneos (seqüência de valores de diferentes tipos);
Prof. Yandre Maldonado - 3 Agregado homogêneo: é uma seqüência de dados do mesmo tipo que podem ser associada à um único identificador; Para utilizarmos um agregado homogêneo, devemos declará-lo estabelecendo o tipo de seus componentes, e o seu número máximo de componentes;
Agregados homogêneos também são conhecidos como: Array Vetor Prof. Yandre Maldonado - 4
Declaração de um vetor em Pascal: nome_vetor: array [1..Tam] of tipo_simples; Prof. Yandre Maldonado - 5 Identificador ou nome do conjunto Tipo dos dados do conjunto Dimensão, ou tamanho máximo do conjunto Palavra chave usada para identificar a declaração de um conjunto (ou array, vetor, matriz,...)
Exemplo: declaração de um vetor para armazenar 10 valores numéricos inteiros; vetor_int: array [1..10] of integer; Prof. Yandre Maldonado - 6 Exemplo de manipulação: vetor_int[3]:=50; Índice Conteúdo vetor_int 1 2 3 4 5 6 7 8 9 10 50
Exemplo: um algoritmo para armazenar a nota bimestral de um total de 10 alunos e ao final informar todas as notas em seqüência. Prof. Yandre Maldonado - 7 Program Vetor; Var vet_notas: array [1..10] of real; i: integer; Begin for i:=1 to 10 do begin write ('Digite a nota: '); readln (vet_notas[i]); end; for i:=1 to 10 do writeln ('Nota [',i,']: ', vet_notas[i]); readkey; End.
Prof. Yandre Maldonado - 8 1. Faça um algoritmo que armazene as temperaturas diárias colhidas em um período de 12 dias. Ao final, o algoritmo deverá informar em quantos dias a temperatura foi negativa e qual foi a temperatura média no período. 2. Faça um algoritmo que armazene as temperaturas diárias colhidas em um período de 12 dias. Ao final, o algoritmo deverá informar em quantos dias ocorreu uma temperatura igual a do último dia do período.
Prof. Yandre Maldonado - 9 Cadeia de Caracteres É um outro tipo de estrutura de dados homogênea; Também conhecidas como strings, são estruturas homogêneas que permitem especificamente o armazenamento de seqüências de caracteres; O tamanho máximo da seqüência de caracteres a ser armazenada deve ser definido na declaração da cadeia; Exemplo: s: string[12]; Se armazenássemos a palavra computador nesta estrutura teríamos: C O M P U T A D O R Neste caso diz-se que o tamanho físico da estrutura é 12 e o tamanho lógico é 10.
Prof. Yandre Maldonado - 10 Em pascal as cadeias são declaradas como string e têm tamanho máximo de 255 caracteres; Quando seu tamanho não for definido na declaração, o tamanho máximo será assumido; Exemplo: algoritmo em Pascal que pergunta o nome do usuário e em seguida escreve na tela Olá nome do usuário. Program Nome; Var str: string[30]; Begin write ('Digite o seu nome: '); readln (str); writeln ('Ola: ', str); End.
Algoritmo para armazenar uma palavra com no máximo 15 caracteres a ser digitada pelo usuário, e informar a quantidade de caracteres a que aparece na palavra: Prof. Yandre Maldonado - 11 Program Conta_a; Var str: string[15]; i, cont: integer; Begin cont:=0; write ('Digite uma palavra com ate 15 caracteres: '); readln (str); for i:=1 to length(str) do if str[i]='a' then cont:=cont+1; writeln ('Ocorrencias de a: ', cont); End.
Prof. Yandre Maldonado - 12 Pode-se criar vetores de cadeias; Exemplo: algoritmo que permite ao usuário digitar 10 nomes e depois exibe a seqüência em ordem invertida; Program Inverte_Sequencia; Var vet_nomes: array [1..10] of string[30]; i: integer; Begin for i:=1 to 10 do begin write ('Digite um nome [', i, ]: '); readln (vet_nomes[i]); end; for i:=10 downto 1 do writeln ('Nome [',i,']: ', vet_nomes[i]); End.
Prof. Yandre Maldonado - 13 Exercício: faça um programa em Pascal que permita ao usuário armazenar 10 nomes de pessoas e, ao final, exiba na tela todos os nomes de pessoas que começam com a letra c (minúscula ou maiúscula).
Prof. Yandre Maldonado - 14 Agregado Homogêneo Multidimensional Sinônimos: Matriz (bidimensional) Conjunto multidimensional Vetor multidimensional Array multidimensional Um conjunto de dados pode ter mais de uma dimensão; É um agregado homogêneo de dados estruturado em mais de uma dimensão. O mais utilizado é o agregado bidimensional (aquele que possui duas dimensões);
Prof. Yandre Maldonado - 15 Desta forma, podemos descrever agora todos os atributos de um agregado homogêneo de dados: Nome do identificador: nome pelo qual são feitas referências à estrutura; O tamanho físico da estrutura: determina a quantidade máxima de dados que podem ser armazenados na estrutura; Tamanho lógico da estrutura: determina a quantidade de dados que estão associados ao identificador;
Prof. Yandre Maldonado - 16 Valor de dado: o conteúdo associado a cada célula da estrutura; Tipo de dado: tipo simples de dado que pode ser armazenado nas células da estrutura; Dimensão da estrutura: determina a forma de organização dos dados na estrutura. Os dados de uma estrutura são referenciados pelos índices que identificam suas células.
Exemplos: Agregado Homogêneo Declaração de uma matriz (estrutura bidimensional) com 10 linhas e 5 colunas, cujo nome é matriz e que pode armazenar valores reais: matriz: array [1..10, 1..5] of real; 1 2 3 4 5 Prof. Yandre Maldonado - 17 1 2 3 4 5 3.31 6 7 8 9 10 Exemplo de atribuição: matriz [5, 2] := 3.31;
Prof. Yandre Maldonado - 18 Manipulação de estruturas: Pode-se manipular as células de uma estrutura da mesma forma que pode-se manipular um objeto do tipo simples de dado que ela foi declarada; Pode-se também, em algumas linguagens (não é o caso de Pascal), atribuir uma estrutura de dados à outra, que equivale a fazer uma cópia dos conteúdos de uma estrutura em outra estrutura. Mas, para isto, as estruturas envolvidas devem possuir: Mesmo tipo de dado; Devem ter o mesmo número de dimensões; E a estrutura que receber a cópia deve possuir dimensões com tamanho no mínimo igual ao das dimensões da estrutura que possui os dados que ela recebe.
Exemplos: Prof. Yandre Maldonado - 19 Considere o conjunto bidimensional do slide 16: matriz: conjunto [1..10, 1..5] de real; E o conjunto matriz1, declarado como a seguir: matriz1: conjunto [1..5, 1..3] de real; Neste caso seria possível atribuir matriz1 a matriz, pois os prérequisitos são satisfeitos. Já o contrário não poderia ser feito. 1 2 3 4 1 2 3 4 5 5 3.31 6 7 8 9 Exemplo de atribuição: matriz [5, 2] := 3.31; Exemplo de atribuição: 1 2 3 4 5 matriz1 [3, 3] := 18; 1 2 3 18 10
matriz1 Exemplo de atribuição de uma estrutura à outra: matriz := matriz1; matriz 1 1 2 2 3 3 4 5 1 2 3 4 5 Prof. Yandre Maldonado - 20 1 1 2 2 3 3 4 4 5 5 6 7 8 9 3.31 18 1 2 3 4 5 6 7 8 9 18 10 10
Prof. Yandre Maldonado - 21 Exemplo de algoritmo com estrutura bidimensional: Um algoritmo para armazenar as temperaturas médias dos três turnos (manhã, tarde e noite) para um período de 30 dias; Neste caso poderia ser utilizada uma matriz com tamanho 30x3;
Prof. Yandre Maldonado - 22 Program Temperaturas_Periodos; Var MatTemp: array [1..30, 1..3] of real; i: integer; Begin for i:=1 to 30 do begin write ('Digite a temperatura media da manha: '); readln (MatTemp[i,1]); write ('Digite a temperatura media da tarde: '); readln (MatTemp[i,2]); write ('Digite a temperatura media da noite: '); readln (MatTemp[i,3]); end; End.
Prof. Yandre Maldonado - 23 Exercício Faça um algoritmo em Pascal que permita ao usuário informar as quatro notas bimestrais de 30 alunos em uma disciplina. Ao final, o algoritmo deverá informar a média anual final de cada um dos trinta alunos e o número de alunos cuja nota do terceiro bimestre ficou entre 3,0 e 6,0.
Agregado Heterogêneo Prof. Yandre Maldonado - 24 Com as estruturas estudadas até o momento, só é possível armazenar diferentes dados referentes a uma mesma entidade em objetos distintos. Exemplo: se quisermos armazenar nome, idade, sexo(m/f), telefone e endereço de uma pessoa, temos que criar os objetos: Nome: string [20]; Idade: integer; Sexo: char; Telefone: string [18]; Endereço: string [30];
Agregado Heterogêneo Prof. Yandre Maldonado - 25 Observe que trata-se de dados de diferentes natureza, e, por isso, de diferentes tipos primitivos; O conceito de agregado de dados heterogêneos nos permite envolver em uma única estrutura, dados de tipos primitivos diferentes.
Agregado Heterogêneo Prof. Yandre Maldonado - 26 Assim, poderíamos criar a seguinte estrutura para armazenar informações pertinentes à uma pessoa: Pessoa Nome: string[20]; Idade: integer; Sexo: char; Telefone: string[18]; Endereço: string[30]; type var... pessoa = record end; nome: string[20]; idade: integer; sexo: char; telefone: string[18]; endereco: string[30]; aluno: pessoa;
Agregado Heterogêneo Prof. Yandre Maldonado - 27 Para se criar uma estrutura heterogênea, cria-se um novo tipo de dado (registro). A partir disto, pode-se declarar variáveis como sendo deste novo tipo criado e utilizar dentro do algoritmo; Este tipo de estrutura também é conhecida como registro, e cada um dos dados armazenados dentro de um registro é chamado de campo;
Agregado Heterogêneo Prof. Yandre Maldonado - 28 Considerando a declaração do slide 26, poderíamos ter as seguintes referências a um campo: Entrada de dados: Read (aluno.nome); Saída de dados: Write (aluno.nome); Atribuição: aluno.nome := José da Silva ;
Agregado Heterogêneo Prof. Yandre Maldonado - 29 Pode-se criar vetores de registros: Exemplo: armazenar um conjunto de dados de 40 pessoas com as características descritas no slide 26; Var Vetor_alunos: array [1..40] of pessoa; 1 2 3 4 5 6 7 8 9... 40 Pessoa Nome Idade Sexo Telefone Endereço
Agregado Heterogêneo Prof. Yandre Maldonado - 30 Exercícios resolvidos: 1. Faça um algoritmo que permita armazenar os nomes e as quatro notas bimestrais para um total de 20 alunos. Depois de armazenadas as informações, o algoritmo deverá fazer uma varredura sobre as mesma a fim de identificar qual dos alunos obteve a maior nota no 3º bimestre e informar o seu nome. 2. Faça um algoritmo que armazene as seguintes informações sobre um conjunto de no máximo 30 carros que estão a venda: modelo, ano, preço, e placa. Ao final, o algoritmo deve percorrer as informações a fim de descobrir qual dos carros é o mais barato, e deve informar seu modelo e ano.
Agregado Heterogêneo Prof. Yandre Maldonado - 31 Exercício 1 type cad_aluno = record nome: string [20]; notas: array [1..4] of real; end; var alunos: array [1..20] of cad_aluno; i, j, aluno_nota: integer; mnt: real; begin mnt := 0; aluno_nota := 0;...... for i:=1 to 20 do begin write ('Digite o nome do aluno [',i,']: '); readln (alunos[i].nome); for j:=1 to 4 do begin write ('Digite a nota: '); readln (alunos[i].notas[j]); end; end; for i:=1 to 20 do if (alunos[i].notas[3] > mnt) then begin mnt := alunos[i].notas[3]; aluno_nota := i; end; write ('O aluno de maior nota no terceiro bimestre é: ', alunos[aluno_nota].nome); end.
Agregado Heterogêneo Prof. Yandre Maldonado - 32 Exercício 2 type cad_carro = record modelo: string [15]; ano: integer; preco: real; placa: string [7]; end; var carros: array [1..30] of cad_carro; i, j, carro_barato: integer; mpc: real; begin mpc := 10000000; carro_barato := 0;... for i := 1 to 30 do begin write ('Digite o modelo do carro: '); readln(carros[i].modelo); write ('Digite o ano do carro: '); readln(carros[i].ano); write ('Digite o preço do carro: '); readln(carros[i].preco); write ('Digite a placa do carro: '); readln(carros[i].placa); end; for i:= 1 to 30 do begin if (carros[i].preco < mpc) then begin mpc := carros[i].preco; carro_barato := i; end; end; writeln ('O modelo do carro mais barato e: ',carros[carro_barato].modelo); writeln ('O ano do carro mais barato e: ',carros[carro_barato].ano); end.