►► 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