Aula 6Matrizes multidimensionaisEstratégias de resolução de problemas
Da aula anterior…Manipulação de caracteresRelação entre os tipos char e intTipos de valor vs. tipos de referência2010/2011Introdução à Programação - DCTI - ISCTE-IUL2
Matrizes multidimensionaisItens de matriz podem ser (referências para) matrizesPossíveis matrizes de mais do que uma dimensão (matrizes de matrizes)Dimensões1D: int[] grades;2D: int[][]gradesPerCourse;3D: int[][][]gradesPerCoursePerProgram;Etc.2010/2011Introdução à Programação - DCTI - ISCTE-IUL3
Exemplo regular: matriz identidade de 3 × 3final double[][]identityMatrix = {{1.0, 0.0, 0.0},{0.0,1.0,0.0},{0.0,0.0,1.0}};2010/2011Introdução à Programação - DCTI - ISCTE-IUL4Sentido matemático do termo.identity01.00.00.01.00.00.01.00.00.010120120122
Exemplo irregular: factores primos de primeiros naturaisfinal int[][]primeFactors = {null,{},{2},{3},{2, 2},{5},{2, 3},{7},{2, 2, 2},{3, 3},{2, 5}};2010/2011Introdução à Programação - DCTI - ISCTE-IUL5O 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 1Dfinal double[] vector1 = {1.0, 0.0, 0.0};final double[] vector1 = newdouble[] {1.0, 0.0, 0.0};final double[] vector2 = newdouble[3];2010/2011Introdução à Programação - DCTI - ISCTE-IUL6Sentido matemático de vector. Vectores e matrizes matemáticas podem ser representados por matrizes (arrays) do Java.vector1vector21.00.00.00.00.00.0012012
Construção 2D: regularfinal double[][] identityMatrix = {    {1.0, 0.0, 0.0},    {0.0, 1.0, 0.0},    {0.0, 0.0, 1.0}};final double[][] identityMatrix = newdouble[][] {newdouble[] {1.0, 0.0, 0.0},newdouble[] {0.0, 1.0, 0.0},newdouble[] {0.0, 0.0, 1.0}};2010/2011Introdução à Programação - DCTI - ISCTE-IUL7identityMatrix01.00.00.01.00.00.01.00.00.012
Construção 2D: regularfinal double[][] rectangularMatrix =newdouble[2][3];2010/2011Introdução à Programação - DCTI - ISCTE-IUL8rectangularMatrix00.00.00.00.00.00.01
Construção 2D: irregularfinal int[][] primeFactors = {null,    {},    {2},    {3},    {2, 2},    {5},    {2, 3},    {7},    {2, 2, 2},    {3, 3},    {2, 5}};2010/2011Introdução à Programação - DCTI - ISCTE-IUL9primeFactors023222null2212…3456…78910
Indexaçãofinal int secondFactorOf4 =primeFactors[4][1];final int[] factorsOf8 =primeFactors[8];final int firstFactorOf8 =    factorsOf8[0];2010/2011Introdução à Programação - DCTI - ISCTE-IUL10primeFactorssecondFactorOf4secondFactorOf4firstFactorOf8firstFactorOf8factorsOf8factorsOf8?2?2?23222022…null123…45678910
Tamanhosout.println(primeFactors.length);out.println(primeFactors[2].length);out.println(primeFactors[8].length);2010/2011Introdução à Programação - DCTI - ISCTE-IUL11primeFactors_11_111_1113_023222null22123…4567…8910
Exemplo: médiasint[][] 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/2011Introdução à Programação - DCTI - ISCTE-IUL12
Problema Dadosuma matriz com números de alunas(os),uma matriz com as siglas das UC euma 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 quemostre as notas de cada aluna(o),mostre a média das notas de cada aluna(o) emostre 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/2011Introdução à Programação - DCTI - ISCTE-IUL13
Resolução de problemas: etapas2010/2011Introdução à Programação - DCTI - ISCTE-IUL14
Resolução de problemas: estratégias2010/2011Introdução à Programação - DCTI - ISCTE-IUL15
Resolução de problemas: estratégias2010/2011Introdução à Programação - DCTI - ISCTE-IUL16
Mais informaçãoResolução de problemashttp://en.wikipedia.org/wiki/Problem_solvinghttp://en.wikipedia.org/wiki/How_to_Solve_ItGeorge Pólyahttp://en.wikipedia.org/wiki/George_P%C3%B3lya2010/2011Introdução à Programação - DCTI - ISCTE-IUL17Fonte: Wikipédia
A reterMatrizes multidimensionaisEstratégias de resolução de problemas2010/2011Introdução à Programação - DCTI - ISCTE-IUL18
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-62010/2011Introdução à Programação - DCTI - ISCTE-IUL19
SumárioMatrizes multidimensionaisEstratégias de resolução de problemas2010/2011Introdução à Programação - DCTI - ISCTE-IUL20

Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas

  • 1.
  • 2.
    Da aula anterior…Manipulaçãode caracteresRelação entre os tipos char e intTipos de valor vs. tipos de referência2010/2011Introdução à Programação - DCTI - ISCTE-IUL2
  • 3.
    Matrizes multidimensionaisItens dematriz podem ser (referências para) matrizesPossíveis matrizes de mais do que uma dimensão (matrizes de matrizes)Dimensões1D: int[] grades;2D: int[][]gradesPerCourse;3D: int[][][]gradesPerCoursePerProgram;Etc.2010/2011Introdução à Programação - DCTI - ISCTE-IUL3
  • 4.
    Exemplo regular: matrizidentidade de 3 × 3final double[][]identityMatrix = {{1.0, 0.0, 0.0},{0.0,1.0,0.0},{0.0,0.0,1.0}};2010/2011Introdução à Programação - DCTI - ISCTE-IUL4Sentido matemático do termo.identity01.00.00.01.00.00.01.00.00.010120120122
  • 5.
    Exemplo irregular: factoresprimos de primeiros naturaisfinal int[][]primeFactors = {null,{},{2},{3},{2, 2},{5},{2, 3},{7},{2, 2, 2},{3, 3},{2, 5}};2010/2011Introdução à Programação - DCTI - ISCTE-IUL5O 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.
  • 6.
    Construção 1Dfinal double[]vector1 = {1.0, 0.0, 0.0};final double[] vector1 = newdouble[] {1.0, 0.0, 0.0};final double[] vector2 = newdouble[3];2010/2011Introdução à Programação - DCTI - ISCTE-IUL6Sentido matemático de vector. Vectores e matrizes matemáticas podem ser representados por matrizes (arrays) do Java.vector1vector21.00.00.00.00.00.0012012
  • 7.
    Construção 2D: regularfinaldouble[][] identityMatrix = { {1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}};final double[][] identityMatrix = newdouble[][] {newdouble[] {1.0, 0.0, 0.0},newdouble[] {0.0, 1.0, 0.0},newdouble[] {0.0, 0.0, 1.0}};2010/2011Introdução à Programação - DCTI - ISCTE-IUL7identityMatrix01.00.00.01.00.00.01.00.00.012
  • 8.
    Construção 2D: regularfinaldouble[][] rectangularMatrix =newdouble[2][3];2010/2011Introdução à Programação - DCTI - ISCTE-IUL8rectangularMatrix00.00.00.00.00.00.01
  • 9.
    Construção 2D: irregularfinalint[][] primeFactors = {null, {}, {2}, {3}, {2, 2}, {5}, {2, 3}, {7}, {2, 2, 2}, {3, 3}, {2, 5}};2010/2011Introdução à Programação - DCTI - ISCTE-IUL9primeFactors023222null2212…3456…78910
  • 10.
    Indexaçãofinal int secondFactorOf4=primeFactors[4][1];final int[] factorsOf8 =primeFactors[8];final int firstFactorOf8 = factorsOf8[0];2010/2011Introdução à Programação - DCTI - ISCTE-IUL10primeFactorssecondFactorOf4secondFactorOf4firstFactorOf8firstFactorOf8factorsOf8factorsOf8?2?2?23222022…null123…45678910
  • 11.
  • 12.
    Exemplo: médiasint[][] 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/2011Introdução à Programação - DCTI - ISCTE-IUL12
  • 13.
    Problema Dadosuma matrizcom números de alunas(os),uma matriz com as siglas das UC euma 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 quemostre as notas de cada aluna(o),mostre a média das notas de cada aluna(o) emostre 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/2011Introdução à Programação - DCTI - ISCTE-IUL13
  • 14.
    Resolução de problemas:etapas2010/2011Introdução à Programação - DCTI - ISCTE-IUL14
  • 15.
    Resolução de problemas:estratégias2010/2011Introdução à Programação - DCTI - ISCTE-IUL15
  • 16.
    Resolução de problemas:estratégias2010/2011Introdução à Programação - DCTI - ISCTE-IUL16
  • 17.
    Mais informaçãoResolução deproblemashttp://en.wikipedia.org/wiki/Problem_solvinghttp://en.wikipedia.org/wiki/How_to_Solve_ItGeorge Pólyahttp://en.wikipedia.org/wiki/George_P%C3%B3lya2010/2011Introdução à Programação - DCTI - ISCTE-IUL17Fonte: Wikipédia
  • 18.
    A reterMatrizes multidimensionaisEstratégiasde resolução de problemas2010/2011Introdução à Programação - DCTI - ISCTE-IUL18
  • 19.
    A ler...Capítulo 7do livro:Y. Daniel Liang, Introduction to Java Programming, 8.ª edição, Prentice-Hall, 2010. ISBN: 978-0-13-213080-62010/2011Introdução à Programação - DCTI - ISCTE-IUL19
  • 20.
    SumárioMatrizes multidimensionaisEstratégias deresolução de problemas2010/2011Introdução à Programação - DCTI - ISCTE-IUL20