►► ATENÇÃO: LOCAL DE ALTERAÇÃO/ACRESCIMO!!!!
5. Estruturas de Dados
Geralmente, os algoritmos são elaborados para manipulação de dados e
quando estes dados estão organizados de forma coerente, representam uma
estrutura de dados. Os tipos Primitivos (inteiro, real, caracter e lógico) não são
suficientes para representar todos os tipos de dados. Geralmente são utilizados os
tipos primitivos para construir outras estruturas de dados mais complexas.
A organização dos dados é chamada de estrutura composta de dados que se
divide em duas formas fundamentais: homogêneas (vetores e matrizes) e
heterogêneas (registros).
Fig.1: Ilustração de Estrutura de Dados
Fonte: Internet
5.1 Vetores
Os vetores são também denominados Estruturas Compostas Homogêneas
Unidimensionais. Eles permitem a manipulação de um conjunto de informações de
►►um mesmo tipo Primitivo unidimensional.
Fig.2: Ilustração de Vetores
Fonte: Internet
1
Declaração:
tipo CLASSE = vetor [1 .. 40] de reais;
CLASSE: VCLASSE;
Onde:
 CLASSE: Nome do tipo que está sendo construído
 1: Limite inicial do vetor
 40: Limite final do vetor
 reais: Tipo primitivo base do vetor
 VCLASSE: Nome da variável criada com o tipo construído
Manipulação:
Inteiro: A;
VCLASSE[7] = 6,5;
VCLASSE[2] = 7,8;
VCLASSE[4] = 5,3;
Leia(A);
//supondo que foi informado 6
VCLASSE[A] = 9,8;
VCLASSE[A-1] = 9,1;
Leia(VCLASSE[A+3]); //supondo que foi informado 4,7
VCLASSE
Fig.3: Ilustração o Resultado após a Operação no Vetor de nome VClasse
Fonte: Internet
Exemplo: Encontrar o número de notas acima da média usando variáveis simples.
Neste exemplo as notas são variáveis simples tipo real (A,B,C,D,E,F,G,H,I,J), as
quais foram lidas e checadas se são maiores que a média das notas. No final do
programa a variável Inteiro NotaAcima tem o total de notas acima da média.
início
inteiro: NotaAcima;
real: A, B, C, D, E, F, G, H, I, J, Média;
NotaAcima = 0;
leia (A,B,C,D,E,F,G,H,I,J);
Média = (A + B + C + D + E + F + G + H + I + J)/10;
se (A > Média)
então NotaAcima = NotaAcima + 1;
fimse;
se (B > Média)
então NotaAcima = NotaAcima + 1;
fimse;
...
se (J > Média)
2
então NotaAcima = NotaAcima + 1;
fimse;
escreva (NotaAcima);
fim.
Exemplo: Encontrar o número de notas acima da média usando vetores. Neste
exemplo as notas são elementos da variável VClasse do tipo Classe, as quais foram
lidas e checadas se são maiores que a média das notas. O tipo Classe é um vetor de
10 “elementos” reais. No final do programa a variável Inteiro NotaAcima tem o total
de notas acima da média.
início
tipo Classe = vetor [1 .. 10] de reais;
Classe: VClasse;
inteiro: NotaAcima, X;
real: Soma, Média;
Soma = 0;
NotaAcima = 0;
para X de 1 até 10 passo 1 faça
leia (VClasse[X] );
Soma = Soma + VClasse[X];
fimpara;
Média = Soma / 10;
para X de 1 até 10 passo 1 faça
se (VClasse[X] > Média )
então NotaAcima = NotaAcima + 1;
fimse;
fimpara;
escreva (NotaAcima);
fim.
5.2 Matrizes
Estas estruturas são denominadas de Estruturas Compostas Homogêneas
multidimensionais, eles permitem a manipulação de um conjunto de informações de
um mesmo tipo primitivo multidimensional.
3
Fig.4: Ilustração da Estrutura Matriz
Fonte: Internet
Declaração:
►►tipo SALA = matriz [1 .. 4, 1 .. 4] de inteiros;
SALA: MSALA;
Onde:
 SALA: Nome do tipo que está sendo construído
 1: Limite inicial da primeira e da segunda dimensão
 4: Limite final da primeira e da segunda dimensão
 inteiros: Tipo primitivo base da matriz
 MSALA: Nome da variável criada do tipo construído
Manipulação:
Inteiro: A,B;
MSALA[2,3] = 5;
MSALA[3,2] = 6;
MSALA[1,2] = 7;
A = 4;
B = 3;
MSALA[A,B] = 8;
MSALA[A,B-2] = 9;
MSALA[A-2,B-2] = 10;
MSALA[B,A] = 11;
MSALA[B-2,A] = 12;
MSALA
4
Fig.5: Ilustração do Resultado do Exemplo de Matriz
Fonte: Internet
5.2.1 Exemplos com o Cartão de Loteria Esportiva
Fig.5: Ilustração de Exemplo de Matriz
Fonte: Internet
Exemplo1: Este exemplo utiliza o cartão de Loteria Esportiva para buscar o jogo
mais marcado, ou seja, a linha mais marcada com “x” varrendo todas as 14 linhas e
►►as 3 colunas. A variável mLoteria é do tipo Loteria que é uma matriz de 14 linhas
e 3 colunas de “elementos” caracteres. No final a variável inteiro nJogo recebe o
número correspondente do time que recebe o maior número de “x”s que está
armazenado na variável inteiro maisMar.
início
►► tipo Loteria = matriz [1 .. 14, 1 .. 3] de caracteres;
Loteria: mLoteria;
inteiro: I, J, maisMar, nJogo, marLin;
maisMar = 0;
para I de 1 até 14 faça
5
marLin = 0;
para J de 1 até 3 faça
se mLoteria[ I, J] =‘x’;
então marLin = marLin + 1;
fimse;
fimpara;
se marLin > maisMar então
maisMar = marLin;
nJogo = I;
fimse;
fimpara;
escreva (“Jogo mais marcado: “, nJogo, “com “, maisMar);
fim.
Exemplo2: Este exemplo utiliza o cartão de Loteria Esportiva para buscar a coluna
mais marcada, ou seja, o time mais marcado com “x” varrendo todas as 14 linhas e
►►as 3 colunas. A variável mLoteria é do tipo Loteria que é uma matriz constituído
de 14 linhas e 3 colunas de “elementos” caracteres. No final a variável inteiro
nColuna recebe o número correspondente do time que recebe o maior número de
“x”s que está armazenado na variável inteiro maisMar.
início
►► tipo Loteria = matriz [1 .. 14, 1 .. 3] de caracteres;
Loteria: mLoteria;
inteiro: I, J, maisMar, nColuna, marCol;
maisMar = 0;
para J de 1 até 3 faça
marCol = 0;
para I de 1 até 14 faça
se mLoteria [ I, J] =‘x’;
então marCol = marCol + 1;
fimse;
fimpara;
se marCol > maisMar então
maisMar = marCol;
nColuna = J;
fimse;
fimpara;
escreva (“Coluna mais marcada: “, nColuna, “com “, maisMar);
fim.
5.3 Registros
Estas estruturas são denominadas de Estruturas Compostas Heterogêneas,
eles permitem a manipulação de um conjunto de informações de tipos primitivos
diferentes.
6
Exemplo: Passagem de ônibus. A variável Passagem do tipo regPassagem possui
tipos primitivos diferentes como: inteiro (Número), caracter (Origem, Destino, Data e
Horário), inteiro (Poltrona) e real (Distância). É possível manipular estes tipos
primitivos de forma em conjunto (registro) através dos comandos de leitura e escrita.
Desta forma pode-se ler e/ou alterar as informações dos elementos que compõem o
registro como a origem, destino, distância, etc.
Fig.7: Ilustração de Registro
Fonte: Internet
Declaração:
tipo regPassagem = registro
inteiro: Número;
caracter: Origem, Destino, Data, Horário;
inteiro: Poltrona;
real: Distância;
fimregistro;
regPassagem: Passagem;
Manipulação:
leia (Passagem);
escreva (Passagem);
leia (Passagem.Origem);
escreva (Passagem.Destino);
Passagem.Distância = 500;
5.3.1 Registros de Conjuntos
A combinação de estruturas heterogêneas com homogêneas pode ser obtida
ao incluir num registro outro tipo de dados construído.
Exemplo1: Registro de Estoque com Baixa Semanal. Neste exemplo temos a
combinação de estruturas heterogêneas e homogêneas na variável Produto do tipo
regProd. Este tipo regProd possui estrutura heterogênea constituída de tipos
primitivos diferentes como: caracter (Nome), inteiro (Codigo) e real (Preço) e uma
estrutura homogênea constituída do tipo vDias (Baixa) constituída de 6 “elementos”
inteiros. É possível manipular estes tipos primitivos de forma em conjunto (registro)
através dos comandos de leitura e escrita. Desta forma pode-se ler e/ou alterar as
7
informações dos elementos que compõem o registro como o nome, código, preço,
baixa, etc.
Fig.8: Ilustração de Exemplo de Registro
Fonte: Internet
Declaração:
tipo vDias = vetor [ 1 .. 6 ] de inteiros;
tipo regProd = registro
caracter: Nome;
inteiro: Código;
real: Preço;
vDias: Baixa;
fimregistro;
regProduto: Produto;
Manipulação:
escreva (Produto.Nome);
escreva (Produto.Código);
escreva (Produto.Preço);
escreva (Produto.Baixa [ 1 ]);
Produto.Baixa [ 4 ] = 500;
Exemplo2: Ônibus formado por Passagem. Neste exemplo temos a variável onibus
do tipo vetPassagem constituído de 44 RegPassagem's. RegPassagem é um tipo de
registro constituído de tipos primitivos como: inteiro (Número e Poltrona), caracter
(Origem, destino, Data e Horário) e Real (Distância). Portanto, cada elemento do vetor
Onibus possui um registro com um Número, Poltrona, Origem, Destino, Data e
Horário. É possível manipular estes tipos primitivos de forma em conjunto (registro)
através dos comandos de leitura e escrita. Desta forma pode-se ler e/ou alterar as
informações dos elementos que compõem o registro como o número, origem, destino,
data, horário, poltrona, etc.
8
Fig.9: Ilustração de Exemplo de Registro
Fonte: Internet
Declaração:
tipo regPassagem = registro
inteiro: Número;
caracter: Origem, Destino, Data, Horário;
inteiro: Poltrona;
real: Distância;
fimregistro;
Tipo vetPassagem = vetor [ 1 .. 44 ] de regPassagem;
vetPassagem: Ônibus;
Manipulação:
leia (Onibus [ 7 ]);
escreva ( Onibus [ 4 ]);
leia ( Onibus [12].Origem);
escreva ( Onibus [21].Destino);
Onibus [34].Distância = 500;
5.4 Exercícios de Fixação
1 Crie um vetor X de N elementos e :
1.1 Crie outro vetor Y contendo os elementos de X que estão na faixa entre 10 e 40;
1.2 Crie outro vetor W contendo os números que estão nas posições pares;
1.3 Pesquise a existência de um determinado elemento Z no vetor X;
1.4 Escreva o menor e maior elemento do vetor X.
2. Analise o algoritmo apresentado a seguir e defina a situação dos elementos de A
após sua execução, caso A = [2, 4, 1, 4, 6, 12, 21, 6, 10, 12, 23, 3]. Qual um algoritmo
alternativo para igual implementação.
inteiro i, j, k, x, A[n];
início
para i de 1 até n - 1 faça
9
k = i;
x = A[i];
para j de i +1 até n faça
se (A[j] < x) então
k = j;
x = A[k];
fim se
fim para
A[k] = a[i];
A[i] = x;
fim para
fim
3. Faça um algoritmo que leia um vetor N[20]. A seguir, encontre o menor elemento
do vetor N e a sua posição dentro do vetor, mostrando: “O menor elemento de N é”,
M, “e sua posição dentro do vetor é:”,P.
4. Faça um algoritmo que leia uma matriz D[60,10]. A seguir, troque o 1º,1º elemento
com o 31º,1º, o 2º,2º com o 32º,1º, etc. Mostre no final o vetor modificado.
5. Faça um algoritmo que leia um vetor K[10] e um vetor N[10]. A seguir, crie um
vetor M que seja a diferença entre o vetor K e N (M=K-N). Mostre a seguir o vetor M.
►►6. Faça um algoritmo que manipule os elementos de um registrador da turma de
Biologia. Crie uma variável turma do tipo vetTurma constituído de 40 RegAlunos.
RegAlunos deve ser um tipo de registro constituído de tipos primitivos como: inteiro
(Número de matricula), caracter (nome, endereço, idade). Portanto, cada elemento do
vetor turma possui um registro com um número de matricula, nome, endereço, idade.
1
Download

Cap5 - Estrutura de Dados_v5