Agregado Homogêneo e Heterogêneo
Universidade Estadual de Maringá - UEMCentro de Tecnologia - CTCDepartamento de Informática - DINFundamentos da Computação
Heterogêneo
Prof. Yandre Maldonado e Gomes da [email protected]
Pro
f. Yan
dre
Mald
on
ad
o -
1
• Até agora os problemas eram resolvidos com tipos de dados simples (ou primitivos);
• Agora estudaremos os tipos de dados
Agregado Homogêneo
• 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);
Pro
f. Yan
dre
Mald
on
ad
o -
2
• Agregado homogêneo: é uma seqüência de dados do mesmo tipo que podem ser associada à um único identificador;
Agregado Homogêneo
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;
Pro
f. Yan
dre
Mald
on
ad
o -
3
Agregado Homogêneo
• Agregados homogêneos também são conhecidos como:– Array– Vetor– Vetor
Pro
f. Yan
dre
Mald
on
ad
o -
4
Agregado Homogêneo
• Declaração de um vetor em Pascal:nome_vetor: array [1..Tam] of tipo_simples;
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,...)
Identificador
ou nome do
conjunto
Pro
f. Yan
dre
Mald
on
ad
o -
5
Agregado Homogêneo
• Exemplo: declaração de um vetor para armazenar 10 valores numéricos inteiros;vetor_int: array [1..10] of integer;
• Exemplo de manipulação:vetor_int[3]:=50;
1 42
50
3 765 8 9 10ÍndiceConteúdo
vetor_int
Pro
f. Yan
dre
Mald
on
ad
o -
6
Agregado Homogêneo• Exemplo: um algoritmo para armazenar a nota
bimestral de um total de 10 alunos e ao final informar todas as notas em seqüência.
Program Vetor;
Var
vet_notas: array [1..10] of real;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.
Pro
f. Yan
dre
Mald
on
ad
o -
7
Agregado Homogêneo
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 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.
Pro
f. Yan
dre
Mald
on
ad
o -
8
• 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
Agregado Homogêneo
– 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
Pro
f. Yan
dre
Mald
on
ad
o -
9
Neste caso diz-se que o tamanho físico da estrutura é 12 e o tamanho lógico é 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
Agregado Homogêneo
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.
Pro
f. Yan
dre
Mald
on
ad
o -
10
• 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:
Program Conta_a;
Var
Agregado Homogêneo
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.
Pro
f. Yan
dre
Mald
on
ad
o -
11
• 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;Varvet_nomes: array [1..10] of string[30];
Agregado Homogêneo
vet_nomes: array [1..10] of string[30];i: integer;Beginfor i:=1 to 10 dobeginwrite ('Digite um nome [', i , ‘]: ');readln (vet_nomes[i]);end;for i:=10 downto 1 dowriteln ('Nome [',i,']: ', vet_nomes[i]);
End.
Pro
f. Yan
dre
Mald
on
ad
o -
12
• 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
Agregado Homogêneo
tela todos os nomes de pessoas que começam com a letra c (minúscula ou maiúscula).
Pro
f. Yan
dre
Mald
on
ad
o -
13
Agregado Homogêneo
• Agregado Homogêneo Multidimensional– Sinônimos:
• Matriz (bidimensional)• Conjunto multidimensional• Vetor 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);
Pro
f. Yan
dre
Mald
on
ad
o -
14
Agregado Homogêneo
• 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;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;
Pro
f. Yan
dre
Mald
on
ad
o -
15
Agregado Homogêneo
– 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;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.
Pro
f. Yan
dre
Mald
on
ad
o -
16
Agregado Homogêneo• Exemplos:
– 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
Exemplo de atribuição:matriz [5, 2] := 3.31;
1 2 3 4 5
1
2
3
4
5 3.31
6
7
8
9
10
Pro
f. Yan
dre
Mald
on
ad
o -
17
Agregado Homogêneo
• 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 – 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.
Pro
f. Yan
dre
Mald
on
ad
o -
18
Agregado Homogêneo• Exemplos:
– 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.
Exemplo de atribuição:matriz1 [3, 3] := 18;
1 2 3 4 5
1
2
3
4
5 3.31
6
7
8
9
10
5
4
183
2
1
321
Pro
f. Yan
dre
Mald
on
ad
o -
19 Exemplo de atribuição:
matriz [5, 2] := 3.31;
Agregado Homogêneo
• Exemplo de atribuição de uma estrutura à outra:matriz := matriz1;
matrizmatriz1
54321
1
32154321
10
9
8
7
6
3.315
4
3
2
1
5
4
183
2
1
10
9
8
7
6
5
4
183
2
1
Pro
f. Yan
dre
Mald
on
ad
o -
20
Agregado Homogêneo
• Exemplo de algoritmo com estrutura bidimensional:– Um algoritmo para armazenar as
temperaturas médias dos três turnos (manhã, 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;
Pro
f. Yan
dre
Mald
on
ad
o -
21
Agregado HomogêneoProgram Temperaturas_Periodos;VarMatTemp: array [1..30, 1..3] of real;i: integer;
Beginfor i:=1 to 30 dobeginwrite ('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.
Pro
f. Yan
dre
Mald
on
ad
o -
22
Agregado Homogêneo
• 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 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.
Pro
f. Yan
dre
Mald
on
ad
o -
23
Agregado Heterogêneo
• 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,
• 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];
Pro
f. Yan
dre
Mald
on
ad
o -
24
Agregado Heterogêneo
• Observe que trata-se de dados de diferentes natureza, e, por isso, de diferentes tipos primitivos;
• O conceito de agregado de dados • O conceito de agregado de dados heterogêneos nos permite envolver em uma única estrutura, dados de tipos primitivos diferentes.
Pro
f. Yan
dre
Mald
on
ad
o -
25
Agregado Heterogêneo
• Assim, poderíamos criar a seguinte estrutura para armazenar informações pertinentes à uma pessoa:
Pessoa
type
pessoa = record
Pro
f. Yan
dre
Mald
on
ad
o -
26
Nome: string[20];
Idade: integer;
Sexo: char;
Telefone: string[18];
Endereço: string[30];
Pessoanome: string[20];
idade: integer;
sexo: char;
telefone: string[18];
endereco: string[30];
end;
var
aluno: pessoa;
...
Agregado Heterogêneo
• 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;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;
Pro
f. Yan
dre
Mald
on
ad
o -
27
Agregado Heterogêneo
• Considerando a declaração do slide 26, poderíamos ter as seguintes referências a um campo:– Entrada de dados:– Entrada de dados:
• Read (aluno.nome);
– Saída de dados:• Write (aluno.nome);
– Atribuição:• aluno.nome :=“José da Silva”;
Pro
f. Yan
dre
Mald
on
ad
o -
28
Agregado Heterogêneo
• 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;Vetor_alunos: array [1..40] of pessoa;
1 2 3 4 5 6 7 8 9 ... 40
Nome
Idade
Sexo
Telefone
Endereço
Pessoa
Pro
f. Yan
dre
Mald
on
ad
o -
29
Agregado Heterogêneo
• 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 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.
Pro
f. Yan
dre
Mald
on
ad
o -
30
Agregado Heterogêneo
Exercício 1
type
cad_aluno = record
nome: string [20];
notas: array [1..4] of real;
...for i:=1 to 20 do
beginwrite ('Digite o nome do aluno [',i,']: ');readln (alunos[i].nome);for j:=1 to 4 dobeginnotas: 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;
...
beginwrite ('Digite a nota: ');readln (alunos[i].notas[j]);
end;end;
for i:=1 to 20 doif (alunos[i].notas[3] > mnt) then
beginmnt := alunos[i].notas[3];aluno_nota := i;
end;
write ('O aluno de maior nota no terceiro bimestre é: ', alunos[aluno_nota].nome);end.
Pro
f. Yan
dre
Mald
on
ad
o -
31
Agregado HeterogêneoExercício 2type
cad_carro = recordmodelo: string [15];ano: integer;preco: real;placa: string [7];
end;
...for i := 1 to 30 do
beginwrite ('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: ');end;
varcarros: array [1..30] of cad_carro;i, j, carro_barato: integer;mpc: real;
beginmpc := 10000000;carro_barato := 0;
Pro
f. Yan
dre
Mald
on
ad
o -
32
write ('Digite a placa do carro: ');readln(carros[i].placa);
end;for i:= 1 to 30 dobeginif (carros[i].preco < mpc) thenbegin
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.