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
[email protected]
Agregado Homogêneo
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);
Agregado Homogêneo
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;
Agregado Homogêneo
• Agregados homogêneos também são
conhecidos como:
– Array
– Vetor
Prof. Yandre Maldonado - 4
Agregado Homogêneo
• Declaração de um vetor em Pascal:
nome_vetor: array [1..Tam] of tipo_simples;
Prof. Yandre Maldonado - 5
Tipo dos dados
do conjunto
Dimensão, ou tamanho
máximo do conjunto
Identificador
ou nome do
conjunto
Palavra chave usada para identificar a
declaração de um conjunto (ou array, vetor,
matriz,...)
Agregado Homogêneo
• 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
50
4
5
6
7
8
9
10
Agregado Homogêneo
• Exemplo: um algoritmo para armazenar a nota
bimestral de um total de 30 alunos e ao final informar
todas as notas em seqüência.
Prof. Yandre Maldonado - 7
Program Vetor;
Var
vet_notas: array [1..30] of real;
i: integer;
Begin
for i:=1 to 30 do
begin
write ('Digite a nota: ');
readln (vet_notas[i]);
end;
for i:=1 to 30 do
writeln ('Nota [',i,']: ', vet_notas[i]);
readkey;
End.
Agregado Homogêneo
Prof. Yandre Maldonado - 8
1. Faça um algoritmo que armazene as
temperaturas diárias colhidas em um período
de 20 dias. Ao final, o algoritmo deverá
informar em quantos dias a temperatura foi
negativa.
2. Faça um programa em Pascal que permita ao
usuário cadastrar o preço de compra e o preço
de venda de 10 produtos. Ao final, o algoritmo
deverá informar o valor do lucro obtido com a
venda de uma unidade de cada um dos 10
produtos.
Agregado Homogêneo
• Cadeia de Caracteres
Prof. Yandre Maldonado - 9
– É 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.
Agregado Homogêneo
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.
Agregado Homogêneo
• 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: ');
readln (str);
for i:=1 to length(str) do
if str[i]='a' then cont:=cont+1;
writeln ('Ocorrencias de a: ', cont);
End.
Agregado Homogêneo
• 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;
Prof. Yandre Maldonado - 12
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: ');
readln (vet_nomes[i]);
end;
for i:=10 downto 1 do
writeln ('Nome [',i,']: ', vet_nomes[i]);
End.
Agregado Homogêneo
Prof. Yandre Maldonado - 13
• Exercício: faça um programa em Pascal
que permita ao usuário armazenar 15
nomes de pessoas e, ao final, exiba na
tela todos os nome de pessoas que
começam com a letra c (minúscula ou
maiúscula).
Agregado Homogêneo
• Agregado Homogêneo Multidimensional
– Sinônimos:
Prof. Yandre Maldonado - 14
•
•
•
•
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);
Agregado Homogêneo
• Desta forma, podemos descrever agora todos
os atributos de um agregado homogêneo de
dados:
Prof. Yandre Maldonado - 15
– 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;
Agregado Homogêneo
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.
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
Prof. Yandre Maldonado - 17
1
2
Exemplo de atribuição:
matriz [5, 2] := 3.31;
3
4
5
6
7
8
9
10
3.31
Agregado Homogêneo
• Manipulação de estruturas:
Prof. Yandre Maldonado - 18
– 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.
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;
Prof. Yandre Maldonado - 19
– 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
5
Exemplo de atribuição:
1
matriz1 [3, 3] := 18;
2
1
3
2
3.31
6
9
10
3
4
7
8
3
1
4
5
2
Exemplo de atribuição:
matriz [5, 2] := 3.31;
5
18
Agregado Homogêneo
• Exemplo de atribuição de uma estrutura à outra:
matriz ← matriz1;
matriz
matriz1
1
Prof. Yandre Maldonado - 20
1
1
2
2
3
3
4
4
5
5
1
2
2
3
3
4
1
5
2
3
1
2
18
3
4
3.31
5
6
6
7
7
8
8
9
9
10
10
18
4
5
Agregado Homogêneo
• Exemplo de algoritmo com estrutura
bidimensional:
Prof. Yandre Maldonado - 21
– 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;
Agregado Homogêneo
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.
Agregado Homogêneo
• Exercício
Prof. Yandre Maldonado - 23
– 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: cadeia[20];
Idade: inteiro;
Sexo: caracter;
Telefone: cadeia[18];
Endereço: cadeia [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
• Assim, poderíamos criar a seguinte estrutura
para armazenar informações pertinentes à uma
pessoa:
type
Pessoa
pessoa = record
Prof. Yandre Maldonado - 26
nome: string[20];
Nome: string[20];
idade: integer;
sexo: char;
Idade: integer;
telefone: string[18];
endereço: string[30];
Sexo: char;
end;
Telefone: string[18];
Endereço: string[30];
var
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
• Considerando a declaração do slide 26,
poderíamos ter as seguintes referências a
um campo:
– Entrada de dados:
Prof. Yandre Maldonado - 28
• Read (aluno.nome);
– Saída de dados:
• Write (aluno.nome);
– Atribuição:
• aluno.nome :=“José da Silva”;
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;
Prof. Yandre Maldonado - 29
1
2
3
4
5
6
7
8
9
Pessoa
Nome
Idade
Sexo
Telefone
Endereço
...
40
Agregado Heterogêneo
•
Exercícios resolvidos:
Prof. Yandre Maldonado - 30
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
Exercício 1
type
cad_aluno = record
nome: string [20];
notas: array [1..4] of real;
end;
Prof. Yandre Maldonado - 31
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
conheça (alunos[i].nome);
for i:=1 to 4 do
begin
write (‘Digite a nota: ‘);
readln (alunos[i].notas[j]);
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
Exercício 2
Prof. Yandre Maldonado - 32
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 := 1000000;
carro_barato := 0;
...
...
para 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].preço < mpc) then
begin
mpc := carros[i].preço;
carro_barato := i;
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.
Download

Agregados homogêneos