1) O documento discute arranjos de arranjos em Java para agrupar nomes de materiais de forma mais organizada.
2) Um arranjo de arranjos (ou matriz) é criado para armazenar cada nome como um arranjo de caracteres internos.
3) Os nomes podem ser acessados pelo índice do arranjo principal e dos arranjos internos, como nomes[1] para o segundo nome e nomes[1][2] para o terceiro caractere do segundo nome.
1. Aula 12 – Matrizes
Norton Trevisan Roman
19 de mar¸co de 2020
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 1 / 44
2. Arranjos
Voltemos `a
necessidade de se
dar nomes aos
materiais
/* nomes dos materiais */
static char[] nAlvenaria = {’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’};
static char[] nVinil = {’V’,’i’,’n’,
’i’,’l’};
static char[] nFibra = {’F’,’i’,’b’,
’r’,’a’};
static char[] nPlastico = {’P’,’l’,
’´a’,’s’,’t’,’i’,’c’,’o’};
...
public static void main(...) {
System.out.print("Piscina de ");
System.out.print(nFibra);
System.out.println(": "+
valorPiscina(100,FIBRA));
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 2 / 44
3. Arranjos
Voltemos `a
necessidade de se
dar nomes aos
materiais
Qual o problema?
/* nomes dos materiais */
static char[] nAlvenaria = {’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’};
static char[] nVinil = {’V’,’i’,’n’,
’i’,’l’};
static char[] nFibra = {’F’,’i’,’b’,
’r’,’a’};
static char[] nPlastico = {’P’,’l’,
’´a’,’s’,’t’,’i’,’c’,’o’};
...
public static void main(...) {
System.out.print("Piscina de ");
System.out.print(nFibra);
System.out.println(": "+
valorPiscina(100,FIBRA));
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 2 / 44
4. Arranjos
Voltemos `a
necessidade de se
dar nomes aos
materiais
Qual o problema?
Come¸cou a crescer
demais...
/* nomes dos materiais */
static char[] nAlvenaria = {’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’};
static char[] nVinil = {’V’,’i’,’n’,
’i’,’l’};
static char[] nFibra = {’F’,’i’,’b’,
’r’,’a’};
static char[] nPlastico = {’P’,’l’,
’´a’,’s’,’t’,’i’,’c’,’o’};
...
public static void main(...) {
System.out.print("Piscina de ");
System.out.print(nFibra);
System.out.println(": "+
valorPiscina(100,FIBRA));
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 2 / 44
5. Arranjos
Voltemos `a
necessidade de se
dar nomes aos
materiais
Qual o problema?
Come¸cou a crescer
demais...
O que poder´ıamos
fazer?
/* nomes dos materiais */
static char[] nAlvenaria = {’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’};
static char[] nVinil = {’V’,’i’,’n’,
’i’,’l’};
static char[] nFibra = {’F’,’i’,’b’,
’r’,’a’};
static char[] nPlastico = {’P’,’l’,
’´a’,’s’,’t’,’i’,’c’,’o’};
...
public static void main(...) {
System.out.print("Piscina de ");
System.out.print(nFibra);
System.out.println(": "+
valorPiscina(100,FIBRA));
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 2 / 44
6. Arranjos
Voltemos `a
necessidade de se
dar nomes aos
materiais
Qual o problema?
Come¸cou a crescer
demais...
O que poder´ıamos
fazer?
Um agrupamento
semelhante ao feito
com os pre¸cos.
/* nomes dos materiais */
static char[] nAlvenaria = {’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’};
static char[] nVinil = {’V’,’i’,’n’,
’i’,’l’};
static char[] nFibra = {’F’,’i’,’b’,
’r’,’a’};
static char[] nPlastico = {’P’,’l’,
’´a’,’s’,’t’,’i’,’c’,’o’};
...
public static void main(...) {
System.out.print("Piscina de ");
System.out.print(nFibra);
System.out.println(": "+
valorPiscina(100,FIBRA));
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 2 / 44
7. Arranjos de Arranjos
E como seria esse
agrupamento?
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 3 / 44
8. Arranjos de Arranjos
E como seria esse
agrupamento?
Um arranjo de strings
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 3 / 44
9. Arranjos de Arranjos
E como seria esse
agrupamento?
Um arranjo de strings
Um arranjo de
arranjos
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 3 / 44
10. Arranjos de Arranjos
E como seria esse
agrupamento?
Um arranjo de strings
Um arranjo de
arranjos
Uma matriz
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 3 / 44
11. Arranjos de Arranjos
E como seria esse
agrupamento?
Um arranjo de strings
Um arranjo de
arranjos
Uma matriz
E como ficaria em
java?
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 3 / 44
12. Arranjos de Arranjos
E como seria esse
agrupamento?
Um arranjo de strings
Um arranjo de
arranjos
Uma matriz
E como ficaria em
java?
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes[1]);
System.out.println(nomes[1][2]);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 3 / 44
13. Arranjos de Arranjos
E como acessamos
isso?
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes[1]);
System.out.println(nomes[1][2]);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 4 / 44
14. Arranjos de Arranjos
E como acessamos
isso?
O segundo nome:
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes[1]);
System.out.println(nomes[1][2]);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 4 / 44
15. Arranjos de Arranjos
E como acessamos
isso?
O segundo nome:
A terceira letra do
segundo nome:
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes[1]);
System.out.println(nomes[1][2]);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 4 / 44
16. Arranjos de Arranjos
E como acessamos
isso?
O segundo nome:
A terceira letra do
segundo nome:
Sa´ıda
$ java AreaCasa
Vinil
n
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes[1]);
System.out.println(nomes[1][2]);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 4 / 44
17. Arranjos de Arranjos
E o que acontece
se fizermos:
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes.length);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 5 / 44
18. Arranjos de Arranjos
E o que acontece
se fizermos: D´a 4
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes.length);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 5 / 44
19. Arranjos de Arranjos
E o que acontece
se fizermos: D´a 4
E se fizermos:
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes.length);
System.out.println(nomes[0].length);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 5 / 44
20. Arranjos de Arranjos
E o que acontece
se fizermos: D´a 4
E se fizermos: D´a 9
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes.length);
System.out.println(nomes[0].length);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 5 / 44
21. Arranjos de Arranjos
E o que acontece
se fizermos: D´a 4
E se fizermos: D´a 9
(comprimento de
“Alvenaria”)
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes.length);
System.out.println(nomes[0].length);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 5 / 44
22. Arranjos de Arranjos
E o que acontece
se fizermos: D´a 4
E se fizermos: D´a 9
(comprimento de
“Alvenaria”)
Cada arranjo
(definido por [ ])
possui um atributo
length associado
/* nomes dos materiais */
static char[][] nomes =
{{’A’,’l’,’v’,’e’,’n’,’a’,
’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
public static void main(String[]
args) {
System.out.println(nomes.length);
System.out.println(nomes[0].length);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 5 / 44
23. Arranjos de Arranjos
E qual o tamanho
de cada um dos
nomes?
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 6 / 44
24. Arranjos de Arranjos
E qual o tamanho
de cada um dos
nomes?
public static void main(String[]
args) {
for (int i=0; i<4; i++) {
System.out.print(
nomes[i].length);
System.out.print(" ");
}
System.out.println();
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 6 / 44
25. Arranjos de Arranjos
E qual o tamanho
de cada um dos
nomes?
$ java AreaCasa
9 5 5 8
public static void main(String[]
args) {
for (int i=0; i<4; i++) {
System.out.print(
nomes[i].length);
System.out.print(" ");
}
System.out.println();
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 6 / 44
26. Arranjos de Arranjos
E qual o tamanho
de cada um dos
nomes?
$ java AreaCasa
9 5 5 8
O tamanho ´e
vari´avel
public static void main(String[]
args) {
for (int i=0; i<4; i++) {
System.out.print(
nomes[i].length);
System.out.print(" ");
}
System.out.println();
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 6 / 44
27. Arranjos de Arranjos
E qual o tamanho
de cada um dos
nomes?
$ java AreaCasa
9 5 5 8
O tamanho ´e
vari´avel
H´a outro modo de
se escrever o
mesmo la¸co
public static void main(String[]
args) {
for (int i=0; i<4; i++) {
System.out.print(
nomes[i].length);
System.out.print(" ");
}
System.out.println();
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 6 / 44
28. Arranjos de Arranjos
E qual o tamanho
de cada um dos
nomes?
$ java AreaCasa
9 5 5 8
O tamanho ´e
vari´avel
H´a outro modo de
se escrever o
mesmo la¸co
public static void main(String[]
args) {
for (int i=0; i<4; i++) {
System.out.print(
nomes[i].length);
System.out.print(" ");
}
System.out.println();
for (char[] nome : nomes) {
System.out.print(nome.length);
System.out.print(" ");
}
System.out.println();
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 6 / 44
29. Arranjos de Arranjos
Note que nome ´e
char[]
public static void main(String[]
args) {
for (char[] nome : nomes) {
System.out.print(nome[2]);
System.out.print(nome.length);
System.out.print(" ");
}
System.out.println();
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 7 / 44
30. Arranjos de Arranjos
Note que nome ´e
char[]
Logo, podemos fazer
nome[2] para acessar
sua terceira letra, por
exemplo
public static void main(String[]
args) {
for (char[] nome : nomes) {
System.out.print(nome[2]);
System.out.print(nome.length);
System.out.print(" ");
}
System.out.println();
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 7 / 44
31. Arranjos de Arranjos
Note que nome ´e
char[]
Logo, podemos fazer
nome[2] para acessar
sua terceira letra, por
exemplo
public static void main(String[]
args) {
for (char[] nome : nomes) {
System.out.print(nome[2]);
System.out.print(nome.length);
System.out.print(" ");
}
System.out.println();
}
$ java AreaCasa
v9 n5 b5 `a8
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 7 / 44
32. Arranjos de Arranjos
O que acontece na
mem´oria quando
declaramos o arranjo?
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 8 / 44
33. Arranjos de Arranjos
O que acontece na
mem´oria quando
declaramos o arranjo?
Primeiro alocamos
espa¸co para o arranjo
nomes
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
0xa53
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 8 / 44
34. Arranjos de Arranjos
O que acontece na
mem´oria quando
declaramos o arranjo?
Primeiro alocamos
espa¸co para o arranjo
nomes
Cada posi¸c˜ao ter´a
espa¸co suficiente para
um endere¸co (32 ou 64
bits)
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
0xa53
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 8 / 44
35. Arranjos de Arranjos
Em seguida,
alocamos espa¸co para
a vari´avel nomes
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
0xa53
nomes
0x053
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 9 / 44
36. Arranjos de Arranjos
Em seguida,
alocamos espa¸co para
a vari´avel nomes
Conter´a o endere¸co do
arranjo correspondente
a nomes
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
0xa53
nomes
0x053
0xa53
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 9 / 44
37. Arranjos de Arranjos
Em seguida,
alocamos espa¸co para
a vari´avel nomes
Conter´a o endere¸co do
arranjo correspondente
a nomes
Alocamos ent˜ao
espa¸co para os
arranjos que
comp˜oem nomes
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
0xa53
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 9 / 44
38. Arranjos de Arranjos
Note que n˜ao h´a
vari´avel que guarde
seus endere¸cos
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
0xa53
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 10 / 44
39. Arranjos de Arranjos
Note que n˜ao h´a
vari´avel que guarde
seus endere¸cos
Em seguida,
guardamos seus
endere¸cos nas
posi¸c˜oes de nomes
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 10 / 44
40. Arranjos de Arranjos
E o que acontece na
mem´oria quando
fazemos
nomes[1][2]?
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 11 / 44
41. Arranjos de Arranjos
E o que acontece na
mem´oria quando
fazemos
nomes[1][2]?
O conte´udo da
vari´avel nomes ´e lido
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 11 / 44
42. Arranjos de Arranjos
E o que acontece na
mem´oria quando
fazemos
nomes[1][2]?
O conte´udo da
vari´avel nomes ´e lido
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
O deslocamento ´e calculado:
0xa53 + 1 × 8, sendo 8 (bytes) o tamanho do endere¸co
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 11 / 44
43. Arranjos de Arranjos
A regi˜ao de mem´oria
correspondente a
esse novo endere¸co ´e
lida
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 12 / 44
44. Arranjos de Arranjos
A regi˜ao de mem´oria
correspondente a
esse novo endere¸co ´e
lida
O novo deslocamento
´e calculado
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
(0xab5 + 2 × 2 , sendo 2 o tamanho do char)
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 12 / 44
45. Arranjos de Arranjos
A regi˜ao de mem´oria
correspondente a
esse novo endere¸co ´e
lida
O novo deslocamento
´e calculado
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
(0xab5 + 2 × 2 , sendo 2 o tamanho do char)
Finalmente, esse novo endere¸co ´e visitado, e o seu
conte´udo lido
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 12 / 44
46. Arranjos de Arranjos
Existe outro modo de
inicializar um arranjo
de arranjos
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 13 / 44
47. Arranjos de Arranjos
Existe outro modo de
inicializar um arranjo
de arranjos
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
static char[][] nomes =
new char[4][9];
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 13 / 44
48. Arranjos de Arranjos
Existe outro modo de
inicializar um arranjo
de arranjos
No segundo modo
cada caractere precisa
ser atribu´ıdo assim:
nomes[0][0] = ’A’;
nomes[0][1] = ’l’;
nomes[0][2] = ’v’;
...
static char[][] nomes = {{’A’,’l’,
’v’,’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
static char[][] nomes =
new char[4][9];
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 13 / 44
49. Arranjos de Arranjos
Existe ainda um
terceiro modo
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 14 / 44
50. Arranjos de Arranjos
Existe ainda um
terceiro modo
static char[][] nomes = new char[4][];
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 14 / 44
51. Arranjos de Arranjos
Existe ainda um
terceiro modo
Mas ´e realmente
chato de inicializar
static char[][] nomes = new char[4][];
char[] aux1 = {’A’,’l’,’v’,’e’,’n’,
’a’,’r’,’i’,’a’};
char[] aux2 = {’V’,’i’,’n’,’i’,’l’};
...
nomes[0] = aux1;
nomes[1] = aux2;
...
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 14 / 44
52. Comparando as inicializa¸c˜oes
char[][] nomes = {{’A’,’l’,’v’,
’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
char[][] nomes = new char[4][9];
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 15 / 44
53. Comparando as inicializa¸c˜oes
char[][] nomes = {{’A’,’l’,’v’,
’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
char[][] nomes = new char[4][9];
Usada quando temos
poucos dados e os
conhecemos de
antem˜ao
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 15 / 44
54. Comparando as inicializa¸c˜oes
char[][] nomes = {{’A’,’l’,’v’,
’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,
’o’}};
char[][] nomes = new char[4][9];
Usada quando temos
poucos dados e os
conhecemos de
antem˜ao
Usada quando temos
muitos dados ou n˜ao os
conhecemos de
antem˜ao
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 15 / 44
55. Comparando as inicializa¸c˜oes
char[][] nomes = {{’A’,’l’...}}; char[][] nomes = new char[4][9];
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
0xa53
0xff5 0xab5 0xfb9 0xf5a nomes
0x053
0xa53
0xff5
0xab5
0xfb9
0xf5a
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 16 / 44
56. Comparando as inicializa¸c˜oes
char[][] nomes = {{’A’,’l’...}}; char[][] nomes = new char[4][9];
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
0xa53
0xff5 0xab5 0xfb9 0xf5a nomes
0x053
0xa53
0xff5
0xab5
0xfb9
0xf5a
Poupa mem´oria
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 16 / 44
57. Comparando as inicializa¸c˜oes
char[][] nomes = {{’A’,’l’...}}; char[][] nomes = new char[4][9];
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
0xa53
0xff5 0xab5 0xfb9 0xf5a nomes
0x053
0xa53
0xff5
0xab5
0xfb9
0xf5a
Poupa mem´oria Usa mais mem´oria
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 16 / 44
58. Matrizes
A ideia de arranjos de arranjos, em que todas as
linhas tˆem igual tamanho, ´e conhecida como matriz
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 17 / 44
59. Matrizes
A ideia de arranjos de arranjos, em que todas as
linhas tˆem igual tamanho, ´e conhecida como matriz
´Util para uma gama de problemas
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 17 / 44
60. Matrizes
A ideia de arranjos de arranjos, em que todas as
linhas tˆem igual tamanho, ´e conhecida como matriz
´Util para uma gama de problemas
Ex: Suponha que queiramos tabelar os pre¸cos das
piscinas de 50, 100, 150 e 200 m2
, com os mais
diversos materiais
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 17 / 44
61. Matrizes
A ideia de arranjos de arranjos, em que todas as
linhas tˆem igual tamanho, ´e conhecida como matriz
´Util para uma gama de problemas
Ex: Suponha que queiramos tabelar os pre¸cos das
piscinas de 50, 100, 150 e 200 m2
, com os mais
diversos materiais
Queremos uma
tabela:
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 17 / 44
62. Matrizes
Como criamos
essa tabela?
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 18 / 44
63. Matrizes
Como criamos
essa tabela?
Da mesma forma
que o arranjo de
strings:
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
public static void main(String[] args) {
double[][] valores = new double[4][4];
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 18 / 44
64. Matrizes
Como criamos
essa tabela?
Da mesma forma
que o arranjo de
strings:
E como
armazenamos
valores nela?
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
public static void main(String[] args) {
double[][] valores = new double[4][4];
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 18 / 44
65. Matrizes
Como criamos
essa tabela?
Da mesma forma
que o arranjo de
strings:
E como
armazenamos
valores nela?
Com um m´etodo
auxiliar:
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
/* Carrega os valores das piscinas na matriz
de ´area X material
public static void carregaVal(double[][] m) {
for (int i=0; i<m.length; i++) {
for (int j=50; j<=200; j+=50) {
m[i][j / 50 - 1] = precos[i] * j;
}
}
}
public static void main(String[] args) {
double[][] valores = new double[4][4];
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 18 / 44
66. Matrizes
Note que as
linhas usam o
c´odigo natural
dos materiais
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
/* Carrega os valores das piscinas na matriz
de ´area X material
public static void carregaVal(double[][] m) {
for (int i=0; i<m.length; i++) {
for (int j=50; j<=200; j+=50) {
m[i][j / 50 - 1] = precos[i] * j;
}
}
}
public static void main(String[] args) {
double[][] valores = new double[4][4];
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 19 / 44
67. Matrizes
Note que as
linhas usam o
c´odigo natural
dos materiais
J´a colunas
precisam de um
c´alculo
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
/* Carrega os valores das piscinas na matriz
de ´area X material
public static void carregaVal(double[][] m) {
for (int i=0; i<m.length; i++) {
for (int j=50; j<=200; j+=50) {
m[i][j / 50 - 1] = precos[i] * j;
}
}
}
public static void main(String[] args) {
double[][] valores = new double[4][4];
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 19 / 44
68. Matrizes
Note que as
linhas usam o
c´odigo natural
dos materiais
J´a colunas
precisam de um
c´alculo
Podemos ainda
usar os m´etodos
j´a desenvolvidos
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
/* Carrega os valores das piscinas na matriz
de ´area X material
public static void carregaVal(double[][] m) {
for (int i=0; i<m.length; i++) {
for (int j=50; j<=200; j+=50) {
m[i][j / 50 - 1] = valorPiscina(j,i);
}
}
}
public static void main(String[] args) {
double[][] valores = new double[4][4];
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 19 / 44
69. Matrizes
E como
mostramos os
valores da
matriz?
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 20 / 44
70. Matrizes
E como
mostramos os
valores da
matriz?
Primeiro
modo:
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 20 / 44
71. Matrizes
E como
mostramos os
valores da
matriz?
Primeiro
modo:
Percorrendo os
´ındices da
matriz
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
for (int i=0; i<valores.length; i++) {
for (int j=0; j<valores[i].length;j++)
System.out.print(valores[i][j]+" ");
System.out.println();
}
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 20 / 44
72. Matrizes
Segundo
modo:
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
for (int i=0; i<valores.length; i++) {
for (int j=0; j<valores[i].length;j++)
System.out.print(valores[i][j]+" ");
System.out.println();
}
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 21 / 44
73. Matrizes
Segundo
modo:
Percorrendo os
valores da
matriz
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
for (int i=0; i<valores.length; i++) {
for (int j=0; j<valores[i].length;j++)
System.out.print(valores[i][j]+" ");
System.out.println();
}
for (double[] linha : valores) {
for (double valor : linha)
System.out.print(valor+" ");
System.out.println();
}
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 21 / 44
74. Matrizes
Segundo
modo:
Percorrendo os
valores da
matriz
Por ser um
arranjo de
arranjos, o
primeiro valor
conter´a um
arranjo
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
for (int i=0; i<valores.length; i++) {
for (int j=0; j<valores[i].length;j++)
System.out.print(valores[i][j]+" ");
System.out.println();
}
for (double[] linha : valores) {
for (double valor : linha)
System.out.print(valor+" ");
System.out.println();
}
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 21 / 44
75. Matrizes
J´a o segundo,
por correr em
um dos
arranjos finais,
conter´a o valor
no arranjo
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
for (int i=0; i<valores.length; i++) {
for (int j=0; j<valores[i].length;j++)
System.out.print(valores[i][j]+" ");
System.out.println();
}
for (double[] linha : valores) {
for (double valor : linha)
System.out.print(valor+" ");
System.out.println();
}
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 22 / 44
76. Matrizes
Vamos usar essa
matriz agora para: public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 23 / 44
77. Matrizes
Vamos usar essa
matriz agora para:
Dizer o pre¸co de uma
piscina de pl´astico com
150m2
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
System.out.println("Piscina de pl´astico
de 150m2: "+valores[PLASTICO][2]);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 23 / 44
78. Matrizes
Vamos usar essa
matriz agora para:
Dizer o pre¸co de uma
piscina de pl´astico com
150m2
Sa´ıda: Piscina de
pl´astico de 150m2:
75000.0
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
System.out.println("Piscina de pl´astico
de 150m2: "+valores[PLASTICO][2]);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 23 / 44
79. Matrizes
Vamos usar essa
matriz agora para:
Dizer o pre¸co de uma
piscina de pl´astico com
150m2
Sa´ıda: Piscina de
pl´astico de 150m2:
75000.0
Dizer o pre¸co m´edio
das piscinas de pl´astico
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
System.out.println("Piscina de pl´astico
de 150m2: "+valores[PLASTICO][2]);
double media = 0;
for (double valor : valores[PLASTICO]) {
media += valor;
}
media /= valores[PLASTICO].length;
System.out.println("M´edia: "+media);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 23 / 44
80. Matrizes
Vamos usar essa
matriz agora para:
Dizer o pre¸co de uma
piscina de pl´astico com
150m2
Sa´ıda: Piscina de
pl´astico de 150m2:
75000.0
Dizer o pre¸co m´edio
das piscinas de pl´astico
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
System.out.println("Piscina de pl´astico
de 150m2: "+valores[PLASTICO][2]);
double media = 0;
for (double valor : valores[PLASTICO]) {
media += valor;
}
media /= valores[PLASTICO].length;
System.out.println("M´edia: "+media);
}
Sa´ıda: M´edia: 62500.0
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 23 / 44
81. Matrizes
Alternativa para o
pre¸co m´edio:
public static void main(String[] args) {
double[][] valores = new double[4][4];
carregaVal(valores);
System.out.println("Piscina de pl´astico
de 150m2: "+valores[PLASTICO][2]);
double media = 0;
for (int i=0; i<valores[PLASTICO].length;
i++){
media += valores[PLASTICO][i];
}
media /= valores[PLASTICO].length;
System.out.println("M´edia: "+media);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 24 / 44
82. Matrizes
J´a temos a tabela
com os valores
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 25 / 44
83. Matrizes
J´a temos a tabela
com os valores
Suponha agora
que existam
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
descontos nos materiais:
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 25 / 44
84. Matrizes
J´a temos a tabela
com os valores
Suponha agora
que existam
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
descontos nos materiais:
Alvenaria est´a com 20% acima de 100m2
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 25 / 44
85. Matrizes
J´a temos a tabela
com os valores
Suponha agora
que existam
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
descontos nos materiais:
Alvenaria est´a com 20% acima de 100m2
Vinil tem 5% para piscinas de at´e 100m2
, 10% para as de
150m2
e 15% para as acima disso
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 25 / 44
86. Matrizes
J´a temos a tabela
com os valores
Suponha agora
que existam
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
descontos nos materiais:
Alvenaria est´a com 20% acima de 100m2
Vinil tem 5% para piscinas de at´e 100m2
, 10% para as de
150m2
e 15% para as acima disso
Fibra tem descontos de 2%, 4%, 8% e 16%
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 25 / 44
87. Matrizes
J´a temos a tabela
com os valores
Suponha agora
que existam
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
descontos nos materiais:
Alvenaria est´a com 20% acima de 100m2
Vinil tem 5% para piscinas de at´e 100m2
, 10% para as de
150m2
e 15% para as acima disso
Fibra tem descontos de 2%, 4%, 8% e 16%
Pl´astico tem desconto de 5% apenas nas piscinas com 200m2
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 25 / 44
88. Matrizes
E como
tabelamos os
descontos?
Pre¸cos
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 26 / 44
89. Matrizes
E como
tabelamos os
descontos?
Pre¸cos
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Descontos
´Areas (m2)
Material 50 100 150 200
Alvenaria 0 0 0.2 0.2
Vinil 0.05 0.05 0.1 0.15
Fibra 0.02 0.04 0.08 0.16
Pl´astico 0 0 0 0.05
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 26 / 44
90. Matrizes
E como
tabelamos os
descontos?
Gostar´ıamos
agora de
recalcular a
tabela de valores
Pre¸cos
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Descontos
´Areas (m2)
Material 50 100 150 200
Alvenaria 0 0 0.2 0.2
Vinil 0.05 0.05 0.1 0.15
Fibra 0.02 0.04 0.08 0.16
Pl´astico 0 0 0 0.05
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 26 / 44
91. Matrizes
E como
tabelamos os
descontos?
Gostar´ıamos
agora de
recalcular a
tabela de valores
Uma tabela de
pre¸co final
Pre¸cos
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Descontos
´Areas (m2)
Material 50 100 150 200
Alvenaria 0 0 0.2 0.2
Vinil 0.05 0.05 0.1 0.15
Fibra 0.02 0.04 0.08 0.16
Pl´astico 0 0 0 0.05
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 26 / 44
92. Matrizes
E como
tabelamos os
descontos?
Gostar´ıamos
agora de
recalcular a
tabela de valores
Uma tabela de
pre¸co final
Como?
Pre¸cos
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Descontos
´Areas (m2)
Material 50 100 150 200
Alvenaria 0 0 0.2 0.2
Vinil 0.05 0.05 0.1 0.15
Fibra 0.02 0.04 0.08 0.16
Pl´astico 0 0 0 0.05
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 26 / 44
95. Matrizes
Crie uma tabela
equivalente, vazia
Nela, o valor final de
cada c´elula ser´a
preco − preco ×
desconto, ou
preco × (1 −
desconto)
Pre¸cos
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Descontos
´Areas (m2)
Material 50 100 150 200
Alvenaria 0 0 0.2 0.2
Vinil 0.05 0.05 0.1 0.15
Fibra 0.02 0.04 0.08 0.16
Pl´astico 0 0 0 0.05
Final
´Areas (m2)
Material 50 100 150 200
Alvenaria
Vinil
Fibra
Pl´astico
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 27 / 44
96. Matrizes
Crie uma tabela
equivalente, vazia
Nela, o valor final de
cada c´elula ser´a
preco − preco ×
desconto, ou
preco × (1 −
desconto)
Ou seja:
pFinal[i][j] = preco[i][j] *
(1 - desconto[i][j]);
Pre¸cos
´Areas (m2)
Material 50 100 150 200
Alvenaria 75000 150000 225000 300000
Vinil 55000 110000 165000 220000
Fibra 37500 75000 112500 150000
Pl´astico 25000 50000 75000 100000
Descontos
´Areas (m2)
Material 50 100 150 200
Alvenaria 0 0 0.2 0.2
Vinil 0.05 0.05 0.1 0.15
Fibra 0.02 0.04 0.08 0.16
Pl´astico 0 0 0 0.05
Final
´Areas (m2)
Material 50 100 150 200
Alvenaria
Vinil
Fibra
Pl´astico
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 27 / 44
97. Matrizes
Criando as
tabelas:
public static void main(String[] args) {
double[][] valores = new double[4][4];
double[][] descontos = {{0,0,0.2,0.2},
{0.05,0.05,0.1,0.15},
{0.02,0.04,0.08,0.16},
{0,0,0,0.05}};
double[][] pFinal;
carregaVal(valores);
pFinal = calculaFinal(valores,
descontos);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 28 / 44
98. Matrizes
Criando as
tabelas:
Note este outro
modo de criar:
public static void main(String[] args) {
double[][] valores = new double[4][4];
double[][] descontos = {{0,0,0.2,0.2},
{0.05,0.05,0.1,0.15},
{0.02,0.04,0.08,0.16},
{0,0,0,0.05}};
double[][] pFinal;
carregaVal(valores);
pFinal = calculaFinal(valores,
descontos);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 28 / 44
99. Matrizes
Criando as
tabelas:
Note este outro
modo de criar:
Aloca somente
espa¸co para
pFinal → um
endere¸co
public static void main(String[] args) {
double[][] valores = new double[4][4];
double[][] descontos = {{0,0,0.2,0.2},
{0.05,0.05,0.1,0.15},
{0.02,0.04,0.08,0.16},
{0,0,0,0.05}};
double[][] pFinal;
carregaVal(valores);
pFinal = calculaFinal(valores,
descontos);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 28 / 44
100. Matrizes
Criando as
tabelas:
Note este outro
modo de criar:
Aloca somente
espa¸co para
pFinal → um
endere¸co
public static void main(String[] args) {
double[][] valores = new double[4][4];
double[][] descontos = {{0,0,0.2,0.2},
{0.05,0.05,0.1,0.15},
{0.02,0.04,0.08,0.16},
{0,0,0,0.05}};
double[][] pFinal;
carregaVal(valores);
pFinal = calculaFinal(valores,
descontos);
}
Carrega valores iniciais
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 28 / 44
101. Matrizes
Criando as
tabelas:
Note este outro
modo de criar:
Aloca somente
espa¸co para
pFinal → um
endere¸co
public static void main(String[] args) {
double[][] valores = new double[4][4];
double[][] descontos = {{0,0,0.2,0.2},
{0.05,0.05,0.1,0.15},
{0.02,0.04,0.08,0.16},
{0,0,0,0.05}};
double[][] pFinal;
carregaVal(valores);
pFinal = calculaFinal(valores,
descontos);
}
Carrega valores iniciais e calcula a nova tabela
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 28 / 44
102. Matrizes
Construindo a
tabela de valores
finais
/*
Retorna matriz com os pre¸cos finais.
Par^ametros:
val - matriz de valores
desc - matriz de descontos
*/
public static double[][] calculaFinal(double[][]
val, double[][] desc) {
double[][] saida = new double[val.length]
[val[0].length];
for (int i=0; i<saida.length; i++) {
for (int j=0; j<saida[0].length; j++) {
saida[i][j] = val[i][j]*(1-desc[i][j]);
}
}
return(saida);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 29 / 44
103. Matrizes
Construindo a
tabela de valores
finais
Recebe matrizes
como parˆametros
/*
Retorna matriz com os pre¸cos finais.
Par^ametros:
val - matriz de valores
desc - matriz de descontos
*/
public static double[][] calculaFinal(double[][]
val, double[][] desc) {
double[][] saida = new double[val.length]
[val[0].length];
for (int i=0; i<saida.length; i++) {
for (int j=0; j<saida[0].length; j++) {
saida[i][j] = val[i][j]*(1-desc[i][j]);
}
}
return(saida);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 29 / 44
104. Matrizes
Construindo a
tabela de valores
finais
Recebe matrizes
como parˆametros
Cria a auxiliar
com base nos
parˆametros
/*
Retorna matriz com os pre¸cos finais.
Par^ametros:
val - matriz de valores
desc - matriz de descontos
*/
public static double[][] calculaFinal(double[][]
val, double[][] desc) {
double[][] saida = new double[val.length]
[val[0].length];
for (int i=0; i<saida.length; i++) {
for (int j=0; j<saida[0].length; j++) {
saida[i][j] = val[i][j]*(1-desc[i][j]);
}
}
return(saida);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 29 / 44
105. Matrizes
Construindo a
tabela de valores
finais
Recebe matrizes
como parˆametros
Cria a auxiliar
com base nos
parˆametros
Retorna o
endere¸co da
matriz
/*
Retorna matriz com os pre¸cos finais.
Par^ametros:
val - matriz de valores
desc - matriz de descontos
*/
public static double[][] calculaFinal(double[][]
val, double[][] desc) {
double[][] saida = new double[val.length]
[val[0].length];
for (int i=0; i<saida.length; i++) {
for (int j=0; j<saida[0].length; j++) {
saida[i][j] = val[i][j]*(1-desc[i][j]);
}
}
return(saida);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 29 / 44
106. Matrizes e Mem´oria
Como nomes est´a na
mem´oria?
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 30 / 44
107. Matrizes e Mem´oria
Como nomes est´a na
mem´oria? 0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 30 / 44
108. Matrizes e Mem´oria
Como nomes est´a na
mem´oria?
Queremos fazer
char[][] nomes2;
nomes2 = nomes;
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 30 / 44
109. Matrizes e Mem´oria
Como nomes est´a na
mem´oria?
Queremos fazer
char[][] nomes2;
nomes2 = nomes;
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
O que acontece ao declararmos nomes2?
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 30 / 44
110. Matrizes e Mem´oria
Como nomes est´a na
mem´oria?
Queremos fazer
char[][] nomes2;
nomes2 = nomes;
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
nomes2
0x093
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
O que acontece ao declararmos nomes2?
Alocamos espa¸co suficiente para caber um endere¸co
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 30 / 44
111. Matrizes e Mem´oria
Ao fazermos
nomes2 = nomes;
copiamos o conte´udo
de nomes (ou seja, o
endere¸co que l´a est´a)
para nomes2
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
nomes2
0x093
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 31 / 44
112. Matrizes e Mem´oria
Ao fazermos
nomes2 = nomes;
copiamos o conte´udo
de nomes (ou seja, o
endere¸co que l´a est´a)
para nomes2
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
nomes2
0x093
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
E tanto nomes quanto nomes2 referenciam a mesma
estrutura na mem´oria
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 31 / 44
113. Matrizes e Mem´oria
Ao fazermos
nomes2 = nomes;
copiamos o conte´udo
de nomes (ou seja, o
endere¸co que l´a est´a)
para nomes2
0xa53
0xff5
0xab5
0xfb9
0xf5a
nomes
0x053
0xa53
nomes2
0x093
0xa53
0xff5
’A’ ’l’ ’v’ ’e’ ’n’ ’a’ ’r’ ’i’ ’a’
0xab5
’V’ ’i’ ’n’ ’i’ ’l’
0xfb9
’F’ ’i’ ’b’ ’r’ ’a’
0xf5a
’P’ ’l’ ’´a’ ’s’ ’t’ ’i’ ’c’ ’o’
E tanto nomes quanto nomes2 referenciam a mesma
estrutura na mem´oria
Ent˜ao, para copiarmos uma matriz em outra
teremos que fazer elemento por elemento
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 31 / 44
114. Matrizes e Mem´oria
Considere os c´odigos:
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[j][i];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 32 / 44
115. Matrizes e Mem´oria
Considere os c´odigos:
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[j][i];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
M´edia de tempo em 50 repeti¸c˜oes:
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 32 / 44
116. Matrizes e Mem´oria
Considere os c´odigos:
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[j][i];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
M´edia de tempo em 50 repeti¸c˜oes:
10ms
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 32 / 44
117. Matrizes e Mem´oria
Considere os c´odigos:
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[j][i];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
M´edia de tempo em 50 repeti¸c˜oes:
10ms 38ms
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 32 / 44
118. Matrizes e Mem´oria
Por que isso acontece?
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 33 / 44
119. Matrizes e Mem´oria
Por que isso acontece?
Por conta da cache
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 33 / 44
120. Matrizes e Mem´oria
Por que isso acontece?
Por conta da cache
Cache
Circuito de mem´oria que, juntamente com a RAM (e
outros) formam a mem´oria prim´aria do computador
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 33 / 44
121. Matrizes e Mem´oria
Por que isso acontece?
Por conta da cache
Cache
Circuito de mem´oria que, juntamente com a RAM (e
outros) formam a mem´oria prim´aria do computador
Caracter´ısticas:
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 33 / 44
122. Matrizes e Mem´oria
Por que isso acontece?
Por conta da cache
Cache
Circuito de mem´oria que, juntamente com a RAM (e
outros) formam a mem´oria prim´aria do computador
Caracter´ısticas:
Rapidez (por volta de 2ns) – 5 vezes mais r´apido que a RAM
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 33 / 44
123. Matrizes e Mem´oria
Por que isso acontece?
Por conta da cache
Cache
Circuito de mem´oria que, juntamente com a RAM (e
outros) formam a mem´oria prim´aria do computador
Caracter´ısticas:
Rapidez (por volta de 2ns) – 5 vezes mais r´apido que a RAM
Caro
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 33 / 44
125. Matrizes e Mem´oria
Funcionamento:
Quando um endere¸co de mem´oria ´e buscado, o
computador verifica primeiro se o conte´udo est´a na
cache
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 34 / 44
126. Matrizes e Mem´oria
Funcionamento:
Quando um endere¸co de mem´oria ´e buscado, o
computador verifica primeiro se o conte´udo est´a na
cache
Se n˜ao estiver, ele ´e buscado na RAM, sendo ent˜ao
trazido, juntamente com alguns vizinhos, para a
cache
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 34 / 44
127. Matrizes e Mem´oria
Funcionamento:
Quando um endere¸co de mem´oria ´e buscado, o
computador verifica primeiro se o conte´udo est´a na
cache
Se n˜ao estiver, ele ´e buscado na RAM, sendo ent˜ao
trazido, juntamente com alguns vizinhos, para a
cache
Assim, o pr´oximo acesso ao mesmo endere¸co (ou
algum vizinho) ser´a mais r´apido, pois ele estar´a na
cache
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 34 / 44
128. Matrizes e Mem´oria
Agora vejamos como cada arranjo ´e corrido na
mem´oria (supondo que o arranjo em 0xa53 est´a na
cache):
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 35 / 44
129. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
O primeiro elemento ([0,0]) desse arranjo ´e
buscado na cache
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 36 / 44
130. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
O primeiro elemento ([0,0]) desse arranjo ´e
buscado na cache – n˜ao ´e encontrado
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 36 / 44
131. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
0xaa5
O primeiro elemento ([0,0]) desse arranjo ´e
buscado na cache – n˜ao ´e encontrado
Ent˜ao ´e buscado na mem´oria, sendo alguns vizinhos
trazidos para a cache
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 36 / 44
132. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
0xaa5
O uso da cache ´e transparente ao programador
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 37 / 44
133. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
0xaa5
O uso da cache ´e transparente ao programador
O S.O. gerencia tudo isso, com a ajuda do hardware
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 37 / 44
134. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
0xaa5
A pr´oxima itera¸c˜ao do for buscar´a o segundo
elemento desse primeiro arranjo
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 38 / 44
135. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[i][j];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
0xaa5
A pr´oxima itera¸c˜ao do for buscar´a o segundo
elemento desse primeiro arranjo
Ao buscar esse elemento, ele j´a est´a na cache – ´e recuperado
mais rapidamente
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 38 / 44
136. Matrizes e Mem´oria
E no segundo modelo?
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[j][i];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 39 / 44
137. Matrizes e Mem´oria
E no segundo modelo?
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[j][i];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
0xaa5
Primeiro elemento do primeiro arranjo: idˆentico ao
esquema anterior
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 39 / 44
138. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[j][i];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
0xaa5
Pr´oxima itera¸c˜ao do for: primeiro elemento do
segundo arranjo
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 40 / 44
139. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[j][i];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
0xaa5
Ao buscar esse elemento, ele n˜ao estar´a na cache
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 41 / 44
140. Matrizes e Mem´oria
public static void main(String args[]) {
int[][] matriz = new int[1000][1000];
int l;
long t = System.currentTimeMillis();
for (int i=0; i< matriz.length; i++)
for (int j = 0; j<matriz[0].length;
j++)
l = matriz[j][i];
long t2 = System.currentTimeMillis();
System.out.println(t2 - t);
}
0xa53
0xff5
0xab5
. . .
0xf5a
matriz
0x053
0xa53
0xff5
. . .
0xab5
. . .
. . .
0xf5a
. . .
cache
0xaa5
0xaff
Ao buscar esse elemento, ele n˜ao estar´a na cache
Deve ser trazido da RAM → mais lento
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 41 / 44
143. Matrizes Multidimensionais
Finalmente, matrizes n˜ao existem apenas em duas
dimens˜oes
Podem ter mais:
Ex:
double[][][][] matriz; //quatro dimens~oes
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 42 / 44
144. Matrizes Multidimensionais
Finalmente, matrizes n˜ao existem apenas em duas
dimens˜oes
Podem ter mais:
Ex:
double[][][][] matriz; //quatro dimens~oes
Acessada com matriz[1][2][0][1]
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 42 / 44
145. Matrizes Multidimensionais
Finalmente, matrizes n˜ao existem apenas em duas
dimens˜oes
Podem ter mais:
Ex:
double[][][][] matriz; //quatro dimens~oes
Acessada com matriz[1][2][0][1]
Cada dimens˜ao pode ter tamanho diferente:
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 42 / 44
146. Matrizes Multidimensionais
Finalmente, matrizes n˜ao existem apenas em duas
dimens˜oes
Podem ter mais:
Ex:
double[][][][] matriz; //quatro dimens~oes
Acessada com matriz[1][2][0][1]
Cada dimens˜ao pode ter tamanho diferente:
double[][][][] matriz = new double [10][45][max]
[c+2];
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 42 / 44
147. Material Adicional
Material adicional pode ser encontrado no video
https:
//www.youtube.com/watch?v=_qqGJV-ovzs
Opera¸c˜oes apresentadas:
Soma de matrizes
Impress˜ao de matriz em tela
Subtra¸c˜ao de matrizes
Matriz transposta
Multiplica¸c˜ao de matrizes
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 43 / 44