Lógica de Programação Capítulo 4 Estruturas de Dados Lógica de Programação – Forbellone / Eberspacher Estruturas de Dados Neste capítulo Vetores Matrizes Registros Registro de Conjuntos Conjuntos de Registros Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 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. Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 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 : nomeVetor = 40*[0.0] Onde: nomeVetor: nome da variável criada com o tipo construído 40: tamanho do vetor que desejamos criar 0.0 : valor nulo ou padrão do tipo primitivo base do vetor Ex.: 0 → inteiro (int) 0.0 → real (float) “” → cadeia de caracteres (str) False → lógico (bool) Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 Vetores Manipulação: nomeVetor = 40*[0.0] nomeVetor [ 6 ] = 6.5 nomeVetor [ 1 ] = 7.8 nomeVetor [ 3 ] = 5.3 a = int(input(“valor do índice: ”)) # supondo que foi informado 5 nomeVetor [ a ] = 9.8 nomeVetor [ a­1 ] = 9.1 # supondo que foi informado 4.7 nomeVetor [ a+3 ] = float(input(“Novo valor: “)) nomeVetor 7.8 0 1 5.3 2 3 9.1 9.8 6.5 4 5 6 4.7 7 8 Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 37 38 39 Vetores Algoritmo 4.2 – Notas acima da média usando variáveis simples notasAcima = 0 a = float(input()); b = float(input()); c = float(input()); d = float(input()); e = float(input()); f = float(input()); g = float(input()); h = float(input()); i = float(input()); j = float(input()); media = (a + b + c + d + e + f + g + h + i + j) / 10.0 if (a > media): notasAcima = notasAcima + 1 if (b > media): notaAcima = NotaAcima + 1; . . . if (j > media): notasAcima = notasAcima + 1 print (“Quantidade de notas acima da média:”, notasAcima) Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 Vetores Algoritmo 4.3 – Notas acima da média usando vetor nota = 10*[0.0] soma = 0.0 notasAcima = 0 for x in range(10): nota [ x ] = float(input()) soma = soma + nota [ x ] # fim do para media = soma / 10.0 for x in range(10): if ( nota[X] > media ): notasAcima = notasAcima + 1 print ( “Notas acima da média”, notasAcima ) Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 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: sala = [4*[0] for i in range(4)] Onde: 0: Tipo primitivo base da matriz. Vide exemplo de vetores sala: Nome da variável criada com o tipo construído 4: tamanho da primeira e da segunda dimensão Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 Matrizes Manipulação: SALA 0 sala [ 1 ][ 2 ] = 5 sala [ 2 ][ 1 ] = 6 sala [ 0 ][ 1 ] = 7 a = 3 b = 2 sala [ a ][ b­1 ] = 8 sala [ a ][ b­2 ] = 9 sala [ a­2 ][ b­3 ] = 10 sala [ b ][ a ] = 11 sala [ b ][ a ] = 12 10 2 3 2 7 0 1 1 12 5 6 9 Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 3 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 Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 Matrizes Algoritmo 4.5 – Loteria Esportiva, jogo mais marcado int main() { char Loteria[14][3]; int i, j, maisMar, nJogo, marLin; maisMar = 0; for ( i=0; i<14; i=i+1 ) { marLin = 0; for ( j=0; j<3; j=j+1 ) { if ( mLoteria [ i ][ j ] =‘x’; marLin = marLin + 1; } if ( marLin > maisMar ) { maisMar = marLin; nJogo = i; } } printf (“Jogo mais marcado: %d com %d“, nJogo, maisMar); } Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 Matrizes Algoritmo 4.6 – Loteria Esportiva, coluna mais marcada int main() { char Loteria[14][3]; int i, j, maisMar, nColuna, marCol; maisMar = 0; for ( j=0; j<3; j=j+1 ) { marCol = 0; for ( i=0; i<14; i=i+1) { if ( mLoteria[ I, J] =‘x’ ) marCol = marCol + 1; } if (marCol > maisMar) { maisMar = marCol; nColuna = j; } } printf (“Coluna mais marcada: %d com %d“, nColuna, maisMar); } Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 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 Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 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; Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 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 Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 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; Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 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: ____________ Distância: ____________ km 44 Lógica de Programação – Forbellone / Eberspacher – Capítulo 4 Conjunto de Registros Declaração: struct regPassagem{ int numero; char origem, destino, data, horario; int poltrona; float distancia; } struct regPassagem onibus [44]; Manipulação: scanf(“%d”, &passagem [ 7 ].numero ); printf (“%d”, passagem [ 4 ].numero ); scanf (“%c”, &passagem [12].origem ); printf (“%c”, passagem [21].destino ); passagem[34].distancia = 500; Lógica de Programação – Forbellone / Eberspacher – Capítulo 4