Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
-
Upload
manuel-menezes-de-sequeira -
Category
Technology
-
view
1.375 -
download
0
description
Transcript of Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Aula 6
Matrizes multidimensionaisEstratégias de resolução de problemas
Introdução à Programação - DCTI - ISCTE-IUL 2
Da aula anterior…
Manipulação de caracteres
Relação entre os tipos char e int
Tipos de valor vs. tipos de referência
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 3
Matrizes multidimensionais Itens de matriz podem ser (referências
para) matrizes
Possíveis matrizes de mais do que uma dimensão (matrizes de matrizes)
Dimensões 1D: int[] grades; 2D: int[][] gradesPerCourse; 3D: int[][][] gradesPerCoursePerProgram; Etc.
2010/2011
Exemplo regular: matriz identidade de 3 × 3
final double[][] identityMatrix = { {1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}};
2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 4
identity
0
1
2
1.0
0.0
0.0
0 1 2
1.0
0.0
0.0
0 1 2
1.0
0.0
0.00 1 2
Sentido matemático do termo.
Exemplo irregular: factores primos de primeiros naturais
final int[][] primeFactors = { null, {}, {2}, {3}, {2, 2}, {5}, {2, 3}, {7}, {2, 2, 2}, {3, 3}, {2, 5}};
2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 5
O vector primeFactors contém vectores com diferentes tamanhos. Para obter os factores primos de um dado natural 1 ≤ n ≤ 10 usa-se primeFactors[n], que é um simples vector de inteiros. Como 0 (zero) não tem factores primos, o primeiro vector não existe. Isso representa-se usando uma referência nula.
Construção 1D
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];
2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 6
vector11.0
0.0
0.0
0 1 2
vector20.0
0.0
0.0
0 1 2
Sentido matemático de vector. Vectores e matrizes
matemáticas podem ser representados por matrizes
(arrays) do Java.
Construção 2D: regular
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}};2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 7
identityMatrix0
1
2
1.0
0.0
0.0
1.0
0.0
0.0
1.0
0.0
0.0
Construção 2D: regular
final double[][] rectangularMatrix = new double[2][3];
2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 8
rectangularMatrix
0
1
0.0
0.0
0.0
0.0
0.0
0.0
…
Construção 2D: irregular
final int[][] primeFactors = { null, {}, {2}, {3}, {2, 2}, {5}, {2, 3}, {7}, {2, 2, 2}, {3, 3}, {2, 5}};
2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 9
primeFactors
null
0
1
2
3
4
5
6
7
8
910
2
3
2 2
2 2 2
…
…
Indexação
final int secondFactorOf4 = primeFactors[4][1];
final int[] factorsOf8 = primeFactors[8];
final int firstFactorOf8 = factorsOf8[0];
2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 10
primeFactors
null
0
1
2
3
4
5
6
7
8
910
2
3
2 2
…
?
secondFactorOf4
2
secondFactorOf4
?
firstFactorOf8
2
firstFactorOf8
?
factorsOf8factorsOf8
2 2 2
…
Tamanhos
out.println(primeFactors.length);out.println(primeFactors[2].length);out.println(primeFactors[8].length);
2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 11
primeFactors
null
0
1
2
3
4
5
6
7
8
910
2
3
2 2
2 2 2
…
_11_111_
1113_
Introdução à Programação - DCTI - ISCTE-IUL 12
Exemplo: médias
int[][] gradesPerCourse = { {14, 16}, {12, 18, 20}};
int numberOfGrades = 0;double sumOfGrades = 0.0;for (int course = 0; course != gradesPerCourse.length; course++) { for (int i = 0; i != gradesPerCourse[course].length; i++) sum += gradesPerCourse[course][i]; numberOfGrades += gradesPerCourse[course].length;}
double averageOfGrades = sumOfGrades / numberOfGrades;
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 13
Problema
Dados1. uma matriz com números de alunas(os),2. uma matriz com as siglas das UC e3. uma matriz de notas (em que cada linha corresponde às notas
que a(o) aluna(o) correspondente tem nas UC indicadas, uma por coluna),
escrever código Java que4. mostre as notas de cada aluna(o),5. mostre a média das notas de cada aluna(o) e6. mostre a média mais alta, identificando a quem pertence.
final int[] studentNumbers = {20032, 30312, 25342, 31432};final String[] courseAcronyms = { "IP", "AC", "POO"};final int[][] studentGrades = { {15, 18, 17}, {18, 10, 11}, // grades of student 30312 {11, 13, 15}, {10, 19, 16}};
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 14
Resolução de problemas: etapasEtapa 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.
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 15
Resolução de problemas: estratégias
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?
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 16
Resolução de problemas: estratégias
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…
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 17
Mais informação
Resolução de problemas http://en.wikipedia.org/wiki/Problem_solv
ing
http://en.wikipedia.org/wiki/How_to_Solve_It
George Pólya http://en.wikipedia.org/wiki/George_P%C
3%B3lya
2010/2011
Fonte: Wikipédia
Introdução à Programação - DCTI - ISCTE-IUL 18
A reter
Matrizes multidimensionais
Estratégias de resolução de problemas
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 19
A ler...
Capítulo 7 do livro:
Y. Daniel Liang, Introduction to Java Programming, 8.ª edição, Prentice-Hall, 2010. ISBN: 978-0-13-213080-6
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 20
Sumário
Matrizes multidimensionais
Estratégias de resolução de problemas
2010/2011