7. arrays multidimensionais; estratégias de resolução de problemas – fundamentos de...
DESCRIPTION
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.TRANSCRIPT
Apresentação 7
Arrays multidimensionaisEstratégias de resolução de problemas
Fundamentos de Programação 2
Da apresentação anterior…
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 3
Arrays multidimensionais 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
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}};
2013/2014 Fundamentos de Programação 4
identityMatrix
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}};
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
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];
2013/2014 Fundamentos de Programação 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 arrays unidimensinais e bidimensionais do Java, respectivamente.
Forma alternativa equivalente de inicialização.
Itens inicializados com valor por omissão dos double.
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}};2013/2014 Fundamentos de Programação 7
identityMatrix0
1
2
1.0
0.0
0.0
1.0
0.0
0.0
1.0
0.0
0.0
Forma alternativa equivalente de inicialização.
Construção 2D: regular
final double[][] rectangularMatrix = new double[2][3];
2013/2014 Fundamentos de Programação 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}};
2013/2014 Fundamentos de Programação 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];
2013/2014 Fundamentos de Programação 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);
2013/2014 Fundamentos de Programação 11
primeFactors
null
0
1
2
3
4
5
6
7
8
910
2
3
2 2
2 2 2
…
_11_111_
1113_
Fundamentos de Programação 12
Exemplo: médias
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
Cálculo da média de todas as notas de todos os cursos.
Fundamentos de Programação 13
Problema
Sejam1. um array com os números das/os alunas/os,2. um array com as siglas das UC e3. 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 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[] 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 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.
2013/2014
Fundamentos de Programação 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?
2013/2014
Fundamentos de Programação 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…
2013/2014
Fundamentos de Programação 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
2013/2014
Fonte: Wikipédia
Fundamentos de Programação 18
A reter
Arrays multidimensionais
Estratégias de resolução de problemas
2013/2014
Fundamentos de Programação 19
Sumário
Arrays multidimensionais
Estratégias de resolução de problemas
2013/2014