7. arrays multidimensionais; estratégias de resolução de problemas – fundamentos de...

19

Click here to load reader

Upload: manuel-menezes-de-sequeira

Post on 11-Jun-2015

1.029 views

Category:

Education


0 download

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

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

Apresentação 7

Arrays multidimensionaisEstratégias de resolução de problemas

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

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

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

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

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

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.

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

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

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

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.

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

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.

Page 8: 7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamentos de Programaçã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

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

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

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

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

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

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_

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

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.

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

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

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

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

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

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

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

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

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

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

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

Fundamentos de Programação 18

A reter

Arrays multidimensionais

Estratégias de resolução de problemas

2013/2014

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

Fundamentos de Programação 19

Sumário

Arrays multidimensionais

Estratégias de resolução de problemas

2013/2014