7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamentos de Programação

1.804 visualizações

Publicada em

Fundamentos da Programação 7:
• Arrays multidimensionais
• Estratégias de resolução de problemas

Apresentação 7 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.

Publicada em: Educação
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamentos de Programação

  1. 1. Arrays multidimensionais Estratégias de resolução de problemas
  2. 2.  Manipulação de caracteres  Relação entre os tipos char e int  Tipos de valor vs. tipos de referência 2013/2014 Fundamentos de Programação 2
  3. 3.  Itens de array podem ser (referências para) arrays  Possíveis arrays de mais do que uma dimensão (arrays de arrays, arrays de arrays de arrays, ...)  Dimensões  1D: int[] grades;  2D: int[][] gradesPerCourse;  3D: int[][][] gradesPerCoursePerProgram;  Etc. 2013/2014 Fundamentos de Programação 3
  4. 4. final double[][] identityMatrix = { {1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0} }; 2013/2014 Fundamentos de Programação 4 identityMatrix 0 1 2 1.0 0.0 0.0 0 1 2 1.00.0 0.0 0 1 2 1.00.00.0 0 1 2 Sentido matemático do termo.
  5. 5. final int[][] primeFactors = { null, {}, {2}, {3}, {2, 2}, {5}, {2, 3}, {7}, {2, 2, 2}, {3, 3}, {2, 5} }; 2013/2014 Fundamentos de Programação 5 O array primeFactors contém arrays com diferentes tamanhos. Para obter os factores primos de um dado natural 1 ≤ n ≤ 10 usa-se primeFactors[n], que é um simples array de inteiros. Como 0 (zero) não tem factores primos, o primeiro array não existe. Isso representa-se usando uma referência nula. Parámos nos factores primos de 10 porque não havia mais espaço na apresentação. :-P
  6. 6. final double[] vector1 = {1.0, 0.0, 0.0}; final double[] vector1 = new double[] {1.0, 0.0, 0.0}; final double[] vector2 = new double[3]; 2013/2014 Fundamentos de Programação 6 vector1 1.0 0.0 0.0 0 1 2 vector2 0.0 0.0 0.0 0 1 2 Sentido matemático de vector. Vectores e matrizes matemáticas podem ser representados por arrays unidimensinais e bidimensionais do Java, respectivamente. Forma alternativa equivalente de inicialização. Itens inicializados com valor por omissão dos double.
  7. 7. final double[][] identityMatrix = { {1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0} }; final double[][] identityMatrix = new double[][] { new double[] {1.0, 0.0, 0.0}, new double[] {0.0, 1.0, 0.0}, new double[] {0.0, 0.0, 1.0} }; 2013/2014 Fundamentos de Programação 7 identityMatrix 0 1 2 1.0 0.0 0.0 1.00.0 0.0 1.00.00.0 Forma alternativa equivalente de inicialização.
  8. 8. final double[][] rectangularMatrix = new double[2][3]; 2013/2014 Fundamentos de Programação 8 rectangularMatrix 0 1 0.0 0.0 0.0 0.00.0 0.0
  9. 9. … final int[][] primeFactors = { null, {}, {2}, {3}, {2, 2}, {5}, {2, 3}, {7}, {2, 2, 2}, {3, 3}, {2, 5} }; 2013/2014 Fundamentos de Programação 9 primeFactors null0 1 2 3 4 5 6 7 8 9 10 2 3 2 2 2 2 2 …
  10. 10. … final int secondFactorOf4 = primeFactors[4][1]; final int[] factorsOf8 = primeFactors[8]; final int firstFactorOf8 = factorsOf8[0]; 2013/2014 Fundamentos de Programação 10 primeFactors null0 1 2 3 4 5 6 7 8 9 10 2 3 2 2 … ? secondFactorOf4 2 secondFactorOf4 ? firstFactorOf8 2 firstFactorOf8 ? factorsOf8factorsOf8 2 2 2
  11. 11. … out.println(primeFactors.length); out.println(primeFactors[2].length); out.println(primeFactors[8].length); 2013/2014 Fundamentos de Programação 11 primeFactors null0 1 2 3 4 5 6 7 8 9 10 2 3 2 2 2 2 2 … _11 _ 11 1 _ 11 1 3 _
  12. 12. final int[][] gradesPerCourse = { {14, 16}, {12, 18, 20} }; int numberOfGrades = 0; int sumOfGrades = 0; for (int course = 0; course != gradesPerCourse.length; course++) { for (int i = 0; i != gradesPerCourse[course].length; i++) sumOfGrades += gradesPerCourse[course][i]; numberOfGrades += gradesPerCourse[course].length; } final double averageOfGrades = sumOfGrades / (double) numberOfGrades; 2013/2014 Fundamentos de Programação 12 Cálculo da média de todas as notas de todos os cursos.
  13. 13. Sejam 1. um array com os números das/os alunas/os, 2. um array com as siglas das UC e 3. um array de notas, em que cada linha corresponde às notas que a/o aluna/o correspondente tem nas UC indicadas, uma por coluna. Escreva código Java que 1. mostre as notas de cada aluna/o, 2. mostre a média das notas de cada aluna/o e 3. mostre a média mais alta, identificando a quem pertence. final int[] studentIDs = {50020032, 50030312, 50025342, 50031432}; final String[] courseAcronyms = { ”EPL", ”P1", ”P2"}; final int[][] studentGrades = { {15, 18, 17}, {18, 14, 16}, // grades of student 50030312 {11, 13, 15}, {10, 19, 16} }; 2013/2014 Fundamentos de Programação 13
  14. 14. Etapa Descrição/notas Compreender o problema! Ser cuidadoso e preciso. Planear • (Escolher uma ou mais estratégias.) • Partir a tarefa em pequenos passos. • Descrever em pormenor cada passo. Seguir o plano • Decidir qual o próximo passo. • Executar o próximo passo. Rever e estender • Analisar o processo de resolução. • Aprender com os erros. 2013/2014 Fundamentos de Programação 14
  15. 15. Estratégia Descrição Analogia Conhecemos soluções para problemas semelhantes? Especialização O nosso problema é caso particular de outro de que conhecemos a solução? Generalização O nosso problema é um caso genérico de outro mais particular de que conhecemos a solução? Indução Compreendemos melhor o problema se estudarmos alguns dos seus casos particulares? Alteração Será que alterar o enunciado do problema o transforma noutro de que conhecemos a solução? 2013/2014 Fundamentos de Programação 15
  16. 16. Estratégia Descrição Aproximações sucessivas • Será que conseguimos encontrar uma forma de atingir um subobjectivo e ficar, assim, mais próximo da solução? • Será que podemos repetir o processo até resolver o problema? Decomposição ou dividir para conquistar Será que podemos dividir o problema em subproblemas de mais simples solução e compor, assim, uma solução global? Partir do objectivo Será que olhar para o nosso destino nos dá boas pistas acerca do caminho a seguir? Fazer um diagrama/desenho Nem calcula o quanto ajuda… 2013/2014 Fundamentos de Programação 16
  17. 17.  Resolução de problemas  http://en.wikipedia.org/wiki/Problem_solving  http://en.wikipedia.org/wiki/How_to_Solve_It  George Pólya  http://en.wikipedia.org/wiki/George_P%C3%B3lya 2013/2014 Fundamentos de Programação 17 Fonte: Wikipédia
  18. 18.  Arrays multidimensionais  Estratégias de resolução de problemas 2013/2014 Fundamentos de Programação 18
  19. 19.  Arrays multidimensionais  Estratégias de resolução de problemas 2013/2014 Fundamentos de Programação 19

×