Upload
internet
View
109
Download
4
Embed Size (px)
Citation preview
Agregado Homogêneo e Heterogêneo
Prof. Yandre Maldonado e Gomes da Costa
Pro
f. Yan
dre M
aldo
nad
o - 1
Universidade Estadual de Maringá - UEMCentro de Tecnologia - CTCDepartamento de Informática - DINFundamentos da Computação
• 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);
Pro
f. Yan
dre M
aldo
nad
o - 2
Agregado Homogêneo
• 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;
Pro
f. Yan
dre M
aldo
nad
o - 3
Agregado Homogêneo
Agregado Homogêneo
• Agregados homogêneos também são conhecidos como:– Array– Vetor
Pro
f. Yan
dre M
aldo
nad
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 M
aldo
nad
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 M
aldo
nad
o - 6
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.
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.
Pro
f. Yan
dre M
aldo
nad
o - 7
Agregado Homogêneo
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.
Pro
f. Yan
dre M
aldo
nad
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 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 M
aldo
nad
o - 9
Neste caso diz-se que o tamanho físico da estrutura é 12 e o tamanho lógico é 10.
Agregado Homogêneo
• 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.
Pro
f. Yan
dre M
aldo
nad
o - 10
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:
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.
Pro
f. Yan
dre M
aldo
nad
o - 11
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;
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.
Pro
f. Yan
dre M
aldo
nad
o - 12
Agregado Homogêneo
• 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
Pro
f. Yan
dre M
aldo
nad
o - 13
Agregado Homogêneo
• 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);
Pro
f. Yan
dre M
aldo
nad
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;– 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 M
aldo
nad
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;
– 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 M
aldo
nad
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;
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 M
aldo
nad
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 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 M
aldo
nad
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 M
aldo
nad
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
10
9
8
7
6
3.315
4
3
2
1
54321
5
4
183
2
1
321
10
9
8
7
6
5
4
183
2
1
54321
Pro
f. Yan
dre M
aldo
nad
o - 20
Agregado Homogêneo
• 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;
Pro
f. Yan
dre M
aldo
nad
o - 21
Agregado HomogêneoProgram 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.
Pro
f. Yan
dre M
aldo
nad
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 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 M
aldo
nad
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, temos que criar os objetos:– Nome: cadeia[20];– Idade: inteiro;– Sexo: caracter;– Telefone: cadeia[18];– Endereço: cadeia [30];
Pro
f. Yan
dre M
aldo
nad
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 heterogêneos nos permite envolver em uma única estrutura, dados de tipos primitivos diferentes.
Pro
f. Yan
dre M
aldo
nad
o - 25
Agregado Heterogêneo
• Assim, poderíamos criar a seguinte estrutura para armazenar informações pertinentes à uma pessoa:
Pro
f. Yan
dre M
aldo
nad
o - 26
Nome: string[20];
Idade: integer;
Sexo: char;
Telefone: string[18];
Endereço: string[30];
Pessoa
type
pessoa = record
nome: string[20];
idade: integer;
sexo: char;
telefone: string[18];
endereço: 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;
• 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 M
aldo
nad
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:
• Read (aluno.nome);
– Saída de dados:• Write (aluno.nome);
– Atribuição:• aluno.nome :=“José da Silva”;
Pro
f. Yan
dre M
aldo
nad
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;1 2 3 4 5 6 7 8 9 ... 40
Nome
Idade
Sexo
Telefone
Endereço
Pessoa
Pro
f. Yan
dre M
aldo
nad
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 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 M
aldo
nad
o - 30
Agregado HeterogêneoExercí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
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 doif (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.
Pro
f. Yan
dre M
aldo
nad
o - 31
Agregado HeterogêneoExercício 2type 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;...
Pro
f. Yan
dre M
aldo
nad
o - 32
...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.