mc-102 aula 18 matrizes e vetores multidimensionaiseduardo/material_mc102/aula18.pdf · note por em...

36
MC-102 — Aula 18 Matrizes e Vetores Multidimensionais Eduardo C. Xavier Instituto de Computa¸c˜ ao – Unicamp 28 de Junho de 2017

Upload: others

Post on 31-Oct-2020

172 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

MC-102 — Aula 18Matrizes e Vetores Multidimensionais

Eduardo C. Xavier

Instituto de Computacao – Unicamp

28 de Junho de 2017

Page 2: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Roteiro

1 Matrizes e Vetores MultidimensionaisDeclaracao de MatrizesAcessando dados de uma MatrizDeclarando Vetores MultidimensionaisVetores multi-dimensionais e funcoes

2 Exemplo com Matrizes

3 Exercıcios

4 Informacoes Extras: Inicializacao de Matrizes

5 Informacoes Extras: Representacao de Matrizes por Linearizacao

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 2 / 36

Page 3: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Matrizes e Vetores Multidimensionais

Matrizes e Vetores Multidimensionais sao generalizacoes de vetoressimples vistos anteriormente.

Suponha por exemplo que devemos armazenar as notas de cada alunoem cada laboratorio de MC102.

Podemos alocar 15 vetores (um para cada lab.) de tamanho 50(tamanho da turma), onde cada vetor representa as notas de umlaboratorio especıfico.

d o u b l e l a b 1 [ 5 0 ] , l a b 2 [ 5 0 ] , . . . . , l a b 1 5 [ 5 0 ] ;

Matrizes e Vetores Multidimensionais permitem fazer a mesma coisamas com todas as informacoes sendo acessadas por um nome emcomum (ao inves de 15 nomes distintos).

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 3 / 36

Page 4: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Declaracao de Matrizes

A criacao de uma matriz e feita com a seguinte sintaxe:

tipo nome da matriz[linhas][colunas];

onde tipo e o tipo de dados que a matriz armazenara, linhas(respectivamente colunas) e um inteiro que especifica o numero delinhas (respectivamente colunas) que a matriz tera.

A matriz criada tera (linhas× colunas) variaveis do tipo tipo.

As linhas sao numeradas de 0 a (linhas− 1).

As colunas sao numeradas de 0 a (colunas− 1).

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 4 / 36

Page 5: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo de declaracao de matriz

int matriz [4][4];

0 1 2 3

0

1

2

3

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 5 / 36

Page 6: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Acessando dados de uma Matriz

Em qualquer lugar onde voce usaria uma variavel no seu programa,voce pode usar um elemento especıfico de uma matriz da seguinteforma:

nome da matriz [ind linha][ind coluna]

onde ind linha (respectivamente ind coluna) e um ındice inteiroespecificando a linha (respectivamente coluna) a ser acessada.

No exemplo abaixo e atribuıdo para aux o valor armazenado navariavel da 1a linha e 11a coluna da matriz:

i n t m a t r i z [ 1 0 0 ] [ 2 0 0 ] ;i n t aux ;. . .aux = m a t r i z [ 0 ] [ 1 0 ] ;

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 6 / 36

Page 7: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Acessando dados de uma Matriz

O compilador nao verifica se voce utilizou valores validos para a linhae para a coluna!

Assim como vetores unidimensionais, comportamentos anomalos doprograma podem ocorrer em caso de acesso a posicoes invalidas deuma matriz.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 7 / 36

Page 8: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Declarando Vetores Multidimensionais

Para se declarar um vetor com 3 ou mais dimensoes usamos aseguinte sintaxe:

tipo nome vetor[d1][d2] . . . [dn];

onde di , para i = 1, . . . , n, e um inteiro que especifica o tamanho dovetor na dimensao correspondente.

O vetor criado possuira d1 × d2 × · · · × dn variaveis do tipo tipo.

Cada dimensao i e numerada de 0 a di − 1.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 8 / 36

Page 9: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Declarando Vetores Multidimensionais

Voce pode criar por exemplo uma matriz para armazenar aquantidade de chuva em um dado dia, mes e ano, para cada um dosultimos 3000 anos:

d o u b l e chuva [ 3 0 0 0 ] [ 1 2 ] [ 3 1 ] ;

chuva [ 1 9 7 9 ] [ 3 ] [ 2 3 ] = 6 . 0 ;

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 9 / 36

Page 10: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Vetores multi-dimensionais e funcoes

Ao passar um vetor simples como parametro, nao e necessariofornecer o seu tamanho na declaracao da funcao.

Quando o vetor e multi-dimensional a possibilidade de nao informaro tamanho na declaracao se restringe a primeira dimensao apenas.

v o i d m o s t r a m a t r i z ( i n t mat [ ] [ 1 0 ] , i n t n l i n h a s ) {. . .

}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 10 / 36

Page 11: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Vetores multi-dimensionais e funcoes

Pode-se criar uma funcao deixando de indicar a primeira dimensao:

v o i d m o s t r a m a t r i z ( i n t mat [ ] [ 1 0 ] , i n t n l i n h a s ) {. . .

}

Ou pode-se criar uma funcao indicando todas as dimensoes:

v o i d m o s t r a m a t r i z ( i n t mat [ 5 ] [ 1 0 ] , i n t n l i n h a s ) {. . .

}

Mas nao pode-se deixar de indicar outras dimensoes (exceto aprimeira):

v o i d m o s t r a m a t r i z ( i n t mat [ 5 ] [ ] , i n t n l i n h a s ) {//ESTE NAO FUNCIONA. . .

}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 11 / 36

Page 12: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Vetores multi-dimensionais em funcoes

v o i d m o s t r a m a t r i z ( i n t mat [ ] [ 1 0 ] , i n t n l i n h a s ) {i n t i , j ;

f o r ( i = 0 ; i < n l i n h a s ; i ++) {f o r ( j = 0 ; j < 1 0 ; j ++)

p r i n t f ( ”%2d ” , mat [ i ] [ j ] ) ;p r i n t f ( ”\n” ) ;

}}

i n t main ( ) {i n t mat [ ] [ 1 0 ] = { { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ,

{10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19} ,{20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29} ,{30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39} ,{40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49} ,{50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59} ,{60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69} ,{70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 7 9}} ;

m o s t r a m a t r i z ( mat , 8 ) ;r e t u r n 0 ;

}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 12 / 36

Page 13: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Vetores multi-dimensionais em funcoesLembre-se que vetores (multi-dimensionais ou nao) sao alteradosquando passados como parametro em uma funcao

v o i d t e s t e ( i n t mat [ 2 ] [ 2 ] ) {i n t i , j ;

f o r ( i = 0 ; i < 2 ; i ++) {f o r ( j = 0 ; j < 2 ; j ++){

mat [ i ] [ j ] = −1;}

}}

i n t main ( ) {i n t mat [ 2 ] [ 2 ] = { { 0 , 1} ,

{ 2 , 3} } ;

t e s t e ( mat ) ;// Neste ponto mat tem que v a l o r e s em s u a s p o s i c o e s ???

r e t u r n 0 ;}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 13 / 36

Page 14: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo

Criar aplicacoes com operacoes basicas sobre matrizes quadradas:

Soma de 2 matrizes com dimensoes l × c .

Subtracao de 2 matrizes com dimensoes l × c .

Calculo da transposta de uma matriz de dimensao l × c .

Multiplicacao de 2 matrizes com dimensoes l × c e l2× c2 onde c = l2.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 14 / 36

Page 15: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Lendo e Imprimindo uma Matriz

Primeiramente vamos implementar o codigo para se fazer a leitura e aimpressao de uma matriz:

#i n c l u d e <s t d i o . h>#d e f i n e MAX SIZE 100

v o i d readMat ( d o u b l e mat [ MAX SIZE ] [ MAX SIZE ] , i n t l , i n t c ){i n t i , j ;

p r i n t f ( ” Lendo dados da matr i z , l i n h a por l i n h a \n” ) ;f o r ( i =0; i< l ; i ++){

f o r ( j =0; j<c ; j ++){s c a n f ( ”%l f ” , &mat [ i ] [ j ] ) ;

}}

}

MAX SIZE e uma constante inteira definida com valor 100 (tam.max. matriz).

Note porem que o tamanho efetivo da matriz e o numero de linhas l≤ 100 e colunas c≤ 100 passado como parametros para a funcao.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 15 / 36

Page 16: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Lendo e Imprimindo uma Matriz

Agora o codigo da funcao que faz a impressao de uma matriz:

v o i d p r i n t M a t ( d o u b l e mat [ MAX SIZE ] [ MAX SIZE ] , i n t l , i n t c ){i n t i , j ;

p r i n t f ( ” Impr imindo dados da matr i z , l i n h a por l i n h a \n” ) ;f o r ( i =0; i< l ; i ++){

f o r ( j =0; j<c ; j ++){p r i n t f ( ”%.2 l f \ t ” , mat [ i ] [ j ] ) ;

}p r i n t f ( ”\n” ) ;

}}

Para imprimir linha por linha, fixado uma linha i , imprimimos todascolunas j desta linha e ao final do laco em j , pulamos uma linha, paraimpressao de uma proxima linha.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 16 / 36

Page 17: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Lendo e Imprimindo uma Matriz

Com as funcoes anteriores podemos criar uma funcao main comoabaixo:

#i n c l u d e <s t d i o . h>

#d e f i n e MAX SIZE 100

v o i d readMat ( d o u b l e mat [ MAX SIZE ] [ MAX SIZE ] , i n t l , i n t c ) ;v o i d p r i n t M a t ( d o u b l e mat [ MAX SIZE ] [ MAX SIZE ] , i n t l , i n t c ) ;

i n t main (){d o u b l e m1 [ MAX SIZE ] [ MAX SIZE ] , m2 [ MAX SIZE ] [ MAX SIZE ] , m3 [ MAX SIZE ] [ MAX SIZE ] ;i n t l1 , c1 , l2 , c2 , l3 , c3 ;

p r i n t f ( ” Dimensoes da m a t r i z 1 : ” ) ;s c a n f ( ”%d %d” , &l1 , &c1 ) ;p r i n t f ( ” Dimensoes da m a t r i z 2 : ” ) ;s c a n f ( ”%d %d” , &l2 , &c2 ) ;

readMat (m1, l1 , c1 ) ;readMat (m2, l2 , c2 ) ;

p r i n t M a t (m1, l1 , c1 ) ;p r i n t M a t (m2, l2 , c2 ) ;

}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 17 / 36

Page 18: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Soma de Matrizes

Vamos implementar a funcionalidade de soma de matrizes.A funcao recebe como parametro a matriz resposta mat3.

i n t soma ( d o u b l e mat1 [ ] [ MAX SIZE ] , i n t l1 , i n t c1 , d o u b l e mat2 [ ] [ MAX SIZE ] ,i n t l2 , i n t c2 , d o u b l e mat3 [ ] [ MAX SIZE ] ){

i n t i , j ;

i f ( c1 != c2 | | l 1 != l 2 )r e t u r n 0 ;

. . . .

. . . .

r e t u r n 1 ;}

A funcao devolve 1 caso a soma foi feita (matrizes de dimensoescompatıveis) ou 0 caso contrario (matrizes de dimensoesincompatıveis).

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 18 / 36

Page 19: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Soma de Matrizes

Agora para cada posicao (i , j) fazemos

mat3[i ][j ] = mat1[i ][j ] + mat2[i ][j ]

tal que o resultado da soma das matrizes estara em mat3.

i n t soma ( d o u b l e mat1 [ ] [ MAX SIZE ] , i n t l1 , i n t c1 , d o u b l e mat2 [ ] [ MAX SIZE ] ,i n t l2 , i n t c2 , d o u b l e mat3 [ ] [ MAX SIZE ] ){

i n t i , j ;

i f ( c1 != c2 | | l 1 != l 2 )r e t u r n 0 ;

f o r ( i =0; i<l 1 ; i ++){f o r ( j =0; j<c1 ; j ++){

mat3 [ i ] [ j ] = mat1 [ i ] [ j ] + mat2 [ i ] [ j ] ;}

}

r e t u r n 1 ;}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 19 / 36

Page 20: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Soma de Matrizes

Com as funcoes anteriores podemos alterar o main para:

i n t main (){d o u b l e m1 [ MAX SIZE ] [ MAX SIZE ] , m2 [ MAX SIZE ] [ MAX SIZE ] , m3 [ MAX SIZE ] [ MAX SIZE ] ;i n t l1 , c1 , l2 , c2 , l3 , c3 ;

p r i n t f ( ” Dimensoes da m a t r i z 1 : ” ) ;s c a n f ( ”%d %d” , &l1 , &c1 ) ;p r i n t f ( ” Dimensoes da m a t r i z 2 : ” ) ;s c a n f ( ”%d %d” , &l2 , &c2 ) ;readMat (m1, l1 , c1 ) ;readMat (m2, l2 , c2 ) ;p r i n t M a t (m1, l1 , c1 ) ;p r i n t M a t (m2, l2 , c2 ) ;

i f ( soma (m1, l1 , c1 , m2, l2 , c2 , m3)){l 3 = l 1 ; c3 = c1 ;p r i n t f ( ” R e s u l t a d o da soma :\n” ) ;p r i n t M a t (m3, l3 , c3 ) ;

}

}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 20 / 36

Page 21: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Multiplicacao de Matrizes

Vamos implementar a funcionalidade de multiplicacao de matrizes.

Vamos multiplicar duas matrizes M1 e M2 (de dimensoes l1 × c1 el2 × c2 com c1 = l2).

O resultado sera uma terceira matriz M3 (de dimensoes l1 × c2).

Lembre-se que uma posicao (i , j) de M3 tera o produto interno dovetor linha i de M1 com o vetor coluna j de M2:

M3[i , j ] =

c1−1∑k=0

M1[i , k] ·M2[k , j ]

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 21 / 36

Page 22: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Multiplicacao de Matrizes

O codigo da multiplicacao esta abaixo: para cada posicao (i , j) demat3 devemos computar

mat3[i , j ] =

c1−1∑k=0

mat1[i , k] ·mat2[k, j ]

. . .f o r ( i =0; i < l 1 ; i ++){

f o r ( j =0; j < c2 ; j ++){mat3 [ i ] [ j ] = 0 ;f o r ( k=0; k < c 1 ; k++){

mat3 [ i ] [ j ] = mat3 [ i ] [ j ] + ( mat1 [ i ] [ k ] ∗ mat2 [ k ] [ j ] ) ;}

}}. . .

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 22 / 36

Page 23: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Multiplicacao de Matrizes

Abaixo temos a funcao que devolve 1 caso a multiplicacao possa serfeita e 0 caso contrario.i n t mult ( d o u b l e mat1 [ ] [ MAX SIZE ] , i n t l1 , i n t c1 , d o u b l e mat2 [ ] [ MAX SIZE ] ,

i n t l2 , i n t c2 , d o u b l e mat3 [ ] [ MAX SIZE ] ){i n t i , j , k ;

i f ( c1 != l 2 )r e t u r n 0 ;

f o r ( i =0; i < l 1 ; i ++){f o r ( j =0; j < c2 ; j ++){

mat3 [ i ] [ j ] = 0 ;f o r ( k=0; k < c1 ; k++)

mat3 [ i ] [ j ] = mat3 [ i ] [ j ] + ( mat1 [ i ] [ k ] ∗ mat2 [ k ] [ j ] ) ;}

}

r e t u r n 1 ;}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 23 / 36

Page 24: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exemplo: Multiplicacao de Matrizes

Podemos usar a funcao de multiplicacao na main:

i n t main (){d o u b l e m1 [ MAX SIZE ] [ MAX SIZE ] , m2 [ MAX SIZE ] [ MAX SIZE ] , m3 [ MAX SIZE ] [ MAX SIZE ] ;i n t l1 , c1 , l2 , c2 , l3 , c3 ;

p r i n t f ( ” Dimensoes da m a t r i z 1 : ” ) ;s c a n f ( ”%d %d” , &l1 , &c1 ) ;p r i n t f ( ” Dimensoes da m a t r i z 2 : ” ) ;s c a n f ( ”%d %d” , &l2 , &c2 ) ;readMat (m1, l1 , c1 ) ;readMat (m2, l2 , c2 ) ;p r i n t M a t (m1, l1 , c1 ) ;p r i n t M a t (m2, l2 , c2 ) ;

i f ( soma (m1, l1 , c1 , m2, l2 , c2 , m3)){l 3 = l 1 ; c3 = c1 ;p r i n t f ( ” R e s u l t a d o da soma :\n” ) ;p r i n t M a t (m3, l3 , c3 ) ;

}

i f ( mult (m1, l1 , c1 , m2, l2 , c2 , m3)){l 3 = l 1 ; c3 = c2 ;p r i n t f ( ” R e s u l t a d o da m u l t i p l i c a c a o :\n” ) ;p r i n t M a t (m3, l3 , c3 ) ;

}}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 24 / 36

Page 25: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exercıcios

Faca um programa para realizar operacoes com matrizes que tenha asseguintes funcionalidades:

I Um menu para escolher a operacao a ser realizada:1 Leitura de uma matriz1.2 Leitura de uma matriz2.3 Impressao da matriz1 e matriz2.4 Calculo da soma de matriz1 com matriz2, e impressao do resultado.5 Calculo da multiplicacao de matriz1 com matriz2, e impressao do

resultado.6 Calculo da subtracao de matriz1 com matriz2, e impressao do resultado.7 Impressao da transposta de matriz1 e matriz2.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 25 / 36

Page 26: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exercıcios

Escreva um programa que leia todas as posicoes de uma matriz 10× 10.O programa deve entao exibir o numero de posicoes nao nulas na matriz.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 26 / 36

Page 27: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exercıcios

Escreva um programa que le todos os elementos de uma matriz 4× 4e mostra a matriz e a sua transposta na tela.

Matriz Transposta0 1 0 20 1 0 20 1 0 20 1 0 2

0 0 0 01 1 1 10 0 0 02 2 2 2

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 27 / 36

Page 28: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Exercıcios

Escreva um programa leia uma matriz do teclado e entao imprime oselementos com menor e maior frequencia de ocorrencia na matriz.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 28 / 36

Page 29: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Informacoes Extras: Inicializacao de Matrizes

No caso de matrizes, usa-se chaves para delimitar as linhas:

Exemplo

int vet[2][5] = { {10, 20, 30, 40, 50} , {60, 70, 80, 90, 100 } } ;

No caso tridimensional, cada ındice da primeira dimensao se refere auma matriz inteira:

Exemplo

int v3[2][3][4] = {{ {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} },{ {0, 0, 0, 0}, {5, 6, 7, 8}, {0, 0, 0, 0} },};

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 29 / 36

Page 30: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Informacoes Extras: Inicializacao de Matrizes

i n t main ( ){i n t i , j , k ;i n t v1 [ 5 ] = {1 , 2 , 3 , 4 , 5} ;i n t v2 [ 2 ] [ 3 ] = { {1 , 2 , 3} , {4 , 5 , 6}} ;i n t v3 [ 2 ] [ 3 ] [ 4 ] = {{ {1 , 2 , 3 , 4} , {5 , 6 , 7 , 8} , {9 , 10 , 11 , 12} } ,{ {0 , 0 , 0 , 0} , {5 , 6 , 7 , 8} , {0 , 0 , 0 , 0} }

} ;

.

.

.

.}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 30 / 36

Page 31: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Informacoes Extras: Linearizacao de Indices

Podemos usar sempre vetores simples para representar matrizes (napratica o compilador faz isto por voce).

Ao declarar uma matriz como int mat[3][4], sabemos que seraoalocados 12 posicoes de memoria associadas com a variavel mat.

Poderıamos simplesmente criar int mat[12]. Mas perdemos asimplicidade de uso dos ındices em forma de matriz.

I Voce nao mais podera escrever mat[1][3] por exemplo.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 31 / 36

Page 32: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Informacoes Extras: Linearizacao de Indices

A linearizacao de ındices e justamente a representacao de matrizesusando-se um vetor simples.

Mas devemos ter um padrao para acessar as posicoes deste vetorcomo se sua organizacao fosse na forma de matriz.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 32 / 36

Page 33: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Informacoes Extras: Linearizacao de Indices

Considere o exemplo:int mat[12]; // ao inves de int mat[3][4]

Fazemos a divisao por linhas como segue:I Primeira linha: mat[0] ate mat[3]I Segunda linha: mat[4] ate mat[7]I Terceira linha: mat[8] ate mat[11]

Para acessar uma posicao [i ][j ] usamos:I mat[i*4 + j];

onde 0 ≤ i ≤ 2 e 0 ≤ j ≤ 3.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 33 / 36

Page 34: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Informacoes Extras: Linearizacao de Indices

De forma geral, seja matriz mat[n*m], representando mat[n][m].

Para acessar a posicao correspondente a [i ][j ] usamos:I mat[i*m + j];

onde 0 ≤ i ≤ n − 1 e 0 ≤ j ≤ m − 1.

Note que i pula de blocos de tamanho m, e j indexa a posicao dentrode um bloco.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 34 / 36

Page 35: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Informacoes Extras: Linearizacao de Indices

Podemos estender para mais dimensoes. Seja matriz mat[n*m*q],representando mat[n][m][q].

I As posicoes de 0 ate (m ∗ q)− 1 sao da primeira matriz.I As posicoes de (m ∗ q) ate (2 ∗m ∗ q)− 1 sao da segunda matriz.I Etc...

De forma geral, seja matriz mat[n*m*q], representandomat[n][m][q].

Para acessar a posicao correspondente a [i ][j ][k] usamos:I mat[i*m*q + j*q + k];

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 35 / 36

Page 36: MC-102 Aula 18 Matrizes e Vetores Multidimensionaiseduardo/material_mc102/aula18.pdf · Note por em que o tamanho efetivo da matriz e o numero de linhas l 100 e colunas c 100 passado

Informacoes Extras: Linearizacao de Indices

i n t main ( ){i n t mat [ 4 0 ] ; // r e p r e s e n t a n d o mat [ 5 ] [ 8 ]i n t i , j ;

f o r ( i =0; i <5; i ++)f o r ( j =0; j <8; j ++)

mat [ i ∗8 + j ] = i ∗ j ;

f o r ( i =0; i <5; i ++){f o r ( j =0; j <8; j ++)

p r i n t f ( ”%d , ” , mat [ i ∗8 + j ] ) ;p r i n t f ( ”\n” ) ;

}

}

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 18 28 de Junho de 2017 36 / 36