Arrays multidimensionais
Estratégias de resolução de problemas
 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
 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
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.
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
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.
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.
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
…
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
…
…
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
…
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
_
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.
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
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
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
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
 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
 Arrays multidimensionais
 Estratégias de resolução de problemas
2013/2014 Fundamentos de Programação 18
 Arrays multidimensionais
 Estratégias de resolução de problemas
2013/2014 Fundamentos de Programação 19

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

  • 1.
  • 2.
     Manipulação decaracteres  Relação entre os tipos char e int  Tipos de valor vs. tipos de referência 2013/2014 Fundamentos de Programação 2
  • 3.
     Itens dearray 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.
    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.
    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.
    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.
    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.
    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.
    … 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.
    … 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.
    … out.println(primeFactors.length); out.println(primeFactors[2].length); out.println(primeFactors[8].length); 2013/2014 Fundamentos deProgramaçã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.
    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.
    Sejam 1. um arraycom 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.
    Etapa Descrição/notas Compreender oproblema! 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.
    Estratégia Descrição Analogia Conhecemossoluçõ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.
    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.
     Resolução deproblemas  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.
     Arrays multidimensionais Estratégias de resolução de problemas 2013/2014 Fundamentos de Programação 18
  • 19.
     Arrays multidimensionais Estratégias de resolução de problemas 2013/2014 Fundamentos de Programação 19