SlideShare uma empresa Scribd logo
1 de 148
Baixar para ler offline
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
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
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
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
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
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
Arranjos de Arranjos
E como seria esse
agrupamento?
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 3 / 44
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Arranjos de Arranjos
Existe ainda um
terceiro modo
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 14 / 44
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Matrizes
Crie uma tabela
equivalente, vazia
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 27 / 44
Matrizes
Crie uma tabela
equivalente, vazia
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Matrizes e Mem´oria
Por que isso acontece?
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 33 / 44
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
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
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
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
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
Matrizes e Mem´oria
Funcionamento:
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 34 / 44
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Matrizes Multidimensionais
Finalmente, matrizes n˜ao existem apenas em duas
dimens˜oes
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 42 / 44
Matrizes Multidimensionais
Finalmente, matrizes n˜ao existem apenas em duas
dimens˜oes
Podem ter mais:
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 42 / 44
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
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
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
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
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
Videoaula
https://www.youtube.com/watch?v=SvJwVSQdwKo
e
https://www.youtube.com/watch?v=_qqGJV-ovzs
Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 44 / 44

Mais conteúdo relacionado

Mais de Norton Trevisan Roman

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04
 
(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03
 
(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02
 
(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23
 
(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22
 
(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21
 
(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20
 
(ACH2001) Introdução à Programação - Aula 19
(ACH2001) Introdução à Programação - Aula 19(ACH2001) Introdução à Programação - Aula 19
(ACH2001) Introdução à Programação - Aula 19
 

Último

Regulamento do Festival de Teatro Negro - FESTIAFRO 2024 - 10ª edição - CEI...
Regulamento do Festival de Teatro Negro -  FESTIAFRO 2024 - 10ª edição -  CEI...Regulamento do Festival de Teatro Negro -  FESTIAFRO 2024 - 10ª edição -  CEI...
Regulamento do Festival de Teatro Negro - FESTIAFRO 2024 - 10ª edição - CEI...
Eró Cunha
 
Aspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxAspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptx
profbrunogeo95
 

Último (20)

SQL Parte 1 - Criação de Banco de Dados.pdf
SQL Parte 1 - Criação de Banco de Dados.pdfSQL Parte 1 - Criação de Banco de Dados.pdf
SQL Parte 1 - Criação de Banco de Dados.pdf
 
QUESTÃO 4 Os estudos das competências pessoais é de extrema importância, pr...
QUESTÃO 4   Os estudos das competências pessoais é de extrema importância, pr...QUESTÃO 4   Os estudos das competências pessoais é de extrema importância, pr...
QUESTÃO 4 Os estudos das competências pessoais é de extrema importância, pr...
 
APH- Avaliação de cena , analise geral do ambiente e paciente.
APH- Avaliação de cena , analise geral do ambiente e paciente.APH- Avaliação de cena , analise geral do ambiente e paciente.
APH- Avaliação de cena , analise geral do ambiente e paciente.
 
Testes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfTestes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdf
 
Descrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteDescrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamente
 
UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...
UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...
UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...
 
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdfROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
 
Nós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º anoNós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º ano
 
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
 
ufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdf
ufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdfufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdf
ufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdf
 
Livro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-criançasLivro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-crianças
 
Regulamento do Festival de Teatro Negro - FESTIAFRO 2024 - 10ª edição - CEI...
Regulamento do Festival de Teatro Negro -  FESTIAFRO 2024 - 10ª edição -  CEI...Regulamento do Festival de Teatro Negro -  FESTIAFRO 2024 - 10ª edição -  CEI...
Regulamento do Festival de Teatro Negro - FESTIAFRO 2024 - 10ª edição - CEI...
 
"Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande""Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande"
 
transcrição fonética para aulas de língua
transcrição fonética para aulas de línguatranscrição fonética para aulas de língua
transcrição fonética para aulas de língua
 
"Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã""Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã"
 
Peça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigasPeça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigas
 
Aparatologia na estética - Cavitação, radiofrequência e lipolaser.pdf
Aparatologia na estética - Cavitação, radiofrequência e lipolaser.pdfAparatologia na estética - Cavitação, radiofrequência e lipolaser.pdf
Aparatologia na estética - Cavitação, radiofrequência e lipolaser.pdf
 
Poema - Maio Laranja
Poema - Maio Laranja Poema - Maio Laranja
Poema - Maio Laranja
 
Aspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxAspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptx
 
Apostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdfApostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdf
 

(ACH2001) Introdução à Programação - Aula 12

  • 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
  • 93. Matrizes Crie uma tabela equivalente, vazia 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 27 / 44
  • 94. Matrizes Crie uma tabela equivalente, vazia 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
  • 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
  • 124. Matrizes e Mem´oria Funcionamento: Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 34 / 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
  • 141. Matrizes Multidimensionais Finalmente, matrizes n˜ao existem apenas em duas dimens˜oes Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 42 / 44
  • 142. Matrizes Multidimensionais Finalmente, matrizes n˜ao existem apenas em duas dimens˜oes Podem ter mais: Norton Trevisan Roman Aula 12 – Matrizes 19 de mar¸co de 2020 42 / 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