ESTRUTURAS DE DADOS Algoritmos – Aula 04 Estruturas de Dados Tópicos Vetores Matrizes Registros Registro de Conjuntos Conjuntos de Registros Estruturas de Dados Os tipos primitivos (inteiro, real, caracter e lógico) não são suficientes para representar todos os tipos de informação. Particularmente quando temos mais de uma informação relacionada. Ex: Lista dos nomes dos alunos de uma sala, endereço de alguém etc. Utilizaremos os tipos primitivos para construir outras estruturas de dados mais complexas. Vetores Também denominados Estruturas compostas homogêneas unidimensionais Permitem a manipulação de um conjunto de informações de um mesmo tipo primitivo 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 cf o tipo construído Vetores 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 7,8 1 2 5,3 3 4 9,1 5 9,8 6,5 6 7 4,7 8 9 38 39 40 Vetores Algoritmo 4.1 – Notas acima da média usando variáveis simples 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) então NotaAcima NotaAcima + 1; fimse; escreva (NotaAcima); fim. Vetores Algoritmo 4.2 – Notas acima da média usando vetor 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. Matrizes Também denominadas Estruturas compostas homogêneas multidimensionais Permitem a manipulação de um conjunto de informações de um mesmo tipo primitivo Declaração: int SALA [4][5]; Onde: SALA: Nome da matriz 4: capacidade da primeira dimensão 5: capacidade da segunda divisão. int: Tipo primitivo base da matriz Matrizes Manipulação: Int A, B; SALA [ 1][2] = 5; SALA [ 2][1]= 6; SALA [ 0][1 ] = 7; A = 3; B = 2; SALA [ A][B ] = 8; SALA [ A ][B-2 ] = 9; SALA [ A-2 ][B-2 ] = 10; SALA [ B ][ A ] = 11; SALA [ B-2 ][ A ] = 12; MSALA 0 0 1 7 1 10 2 3 9 2 3 12 5 6 11 8 Matrizes Exemplo: Cartão da Loteria Esportiva Jg Coluna 1 Ept Coluna 2 1 Santos Corinthians 2 Flamengo Fluminense 3 Palmeiras São Paulo 4 Vasco Botafogo 5 Portuguesa XV de jaú 6 São Caetano XV de Piracicaba 7 Grêmio Internacional 8 Havaí Figueirense 9 Coritiba Atlético-PR 10 Paysandú Juventude 11 Atlético-MG Cruzeiro 12 Brasiliense Ponte Preta 13 Fortaleza Goiás 14 Esportivo Londrina Matrizes Algoritmo 4.3 – Loteria Esportiva, jogo mais marcado int Loteria[14][3]; int I, J, maisMar, nJogo, marLin; maisMar = 0; for(int I = 0; i<14; i++){ marLin = 0; for( int J = 0; j <3; j++){ if(mLoteria[I][J] ==1){ marLin = marLin + 1; } } if(marLin > maisMar} { maisMar = marLin; nJogo = I; } } cout << “Jogo mais marcado: " << maisMar; nJogo << "com " << Matrizes Algoritmo 4.4 – Loteria Esportiva, coluna mais marcada int Loteria [14][ 3]; inteiro I, J, maisMar, nColuna, marCol; maisMar = 0; for(int J=0; J<3; J++){ marCol=0; for(int I=0 ; I<14; I++){ if(mLoteria[ I][J] == 1){ marCol = marCol + 1; } } if(marCol > maisMar){ maisMar = marCol; nColuna = J; } } cout << "Coluna mais marcada: " << nColuna << "com " << maisMar; Registros Também denominadas Estruturas compostas heterogêneas Permitem a manipulação de um conjunto de informações de tipos primitivos diferentes Exemplo: Passagem de ônibus Número: 0001 De: ____________________ Para: _______________________ Data: ____ / ____ / _______ Horário: ________ : _________ Poltrona: ____________ Distância: ____________ km Registros 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; Registro de Conjuntos Combinação de estruturas heterogêneas com homogêneas Podem ser obtidas ao incluir num registro outro tipo de dados construído Exemplo: Registro de Estoque com Baixa semanal Nome: _____________________________________________ Código: ___________________ Preço: __________________ Baixa 1 2 3 4 5 6 Registro de Conjuntos 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; Conjunto de Registros Combinação de estruturas homogêneas com heterogêneas Podem ser obtidas ao formar um conjunto com outro tipo de dados construído Exemplo: Ônibus formado por Passagem 1 Número: 0001 2 De: ____________________ Para: _______________________ 3 Data: ____ / ____ / _______ Horário: ________ : _________ 4 Poltrona: ____________ 44 Distância: ____________ km Conjunto de Registros 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 (Passagem [ 7 ]); escreva (Passagem [ 4 ]); leia (Passagem [12].Origem); escreva (Passagem [21].Destino); Passagem [34].Distância 500;