• Nenhum resultado encontrado

CI1055: Algoritmos e Estruturas de Dados I

N/A
N/A
Protected

Academic year: 2021

Share "CI1055: Algoritmos e Estruturas de Dados I"

Copied!
32
0
0

Texto

(1)

CI1055: Algoritmos e Estruturas de Dados I

Profs. Drs. Marcos Castilho Carmem Hara e Bruno Muller Jr

Departamento de Inform´

atica/UFPR

(2)

Matrizes - Introdu¸c˜

ao

I

Conceitua¸c˜

ao

I

Leitura e impress˜

ao

I

Encontrar menor elemento

I

Soma de matrizes

(3)

Conceitua¸c˜

ao

I

A figura mostra conceitualmente o que ´

e uma matriz.

1

2

3

4

1

4

6

2

1

2

9

0

0

2

3

8

7

3

9

4

1

3

2

4

5

0

1

0

1

I

Cada quadrado armazena exatamente uma informa¸

ao de um

mesmo tipo (inteiro, real, etc).

(4)

Conceitua¸c˜

ao

I

A figura mostra conceitualmente o que ´

e uma matriz.

1

2

3

4

1

4

6

2

1

2

9

0

0

2

3

8

7

3

9

4

1

3

2

4

5

0

1

0

1

I

Cada quadrado armazena exatamente uma informa¸

ao de um

mesmo tipo (inteiro, real, etc).

I

Qualquer quadrado pode ser acessado individualmente atrav´

es

de dois ´ındices: a linha e a coluna.

(5)

Conceitua¸c˜

ao

I

A figura mostra conceitualmente o que ´

e uma matriz.

1

2

3

4

1

4

6

2

1

2

9

0

0

2

3

8

7

3

9

4

1

3

2

4

5

0

1

0

1

I

Cada quadrado armazena exatamente uma informa¸

ao de um

mesmo tipo (inteiro, real, etc).

(6)

Declara¸c˜

ao

1

2

3

4

1

4

6

2

1

2

9

0

0

2

3

8

7

3

9

4

1

3

2

4

5

0

1

0

1

I

Declara¸c˜

ao:

type matriz= array [1..5,1..4] of integer;

I

1..5: ´ındices das linhas;

(7)

Declara¸c˜

ao

1

2

3

4

1

4

6

2

1

2

9

0

0

2

3

8

7

3

9

4

1

3

2

4

5

0

1

0

1

I

Outra maneira de se ver uma matriz ´

e como sendo um vetor

de vetores.

type vetor

= array [1..4] of integer;

matriz = array[1..5] of vetor;

(8)

Acesso

1

2

3

4

1

4

6

2

1

2

9

0

0

2

3

8

7

3

9

4

1

3

2

4

5

0

1

0

1

I

m[linha][coluna]

(9)

Acesso

1

2

3

4

1

4

6

2

1

2

9

0

0

2

3

8

7

3

9

4

1

3

2

4

5

0

1

0

1

I

m[3][2]=7

(10)

Leitura

I

O la¸co externo “fixa” uma linha;

I

La¸

co interno “percorre as colunas”;

[0,1],

[0,2], ...,

[0,10]

[1,1],

[1,2], ...,

[1,10]

...

[50,1], [50,2], ..., [50,10]

program l e r m a t r i z ; var w: array [ 0 . . 5 0 , 1 . . 1 0 ] of r e a l ; i , j : integer ; begin for i :=0 to 50 do for j :=1 to 10 do read (w[ i , j ] ) ; end .

(11)

Impress˜

ao

program l e r m a t r i z ; var w: array [ 0 . . 5 0 , 1 . . 1 0 ] of r e a l ; i , j : integer ; begin for i :=0 to 50 do begin for j :=1 to 10 do write (w[ i , j ] , ’ ’) ; writeln () ; end ; end .

I

o que deve ser alterado para imprimir somente os pares?;

I

e somente aqueles com ´ındices pares? ([2,2], [2,4], ...)?;

(12)

Impress˜

ao

program l e r m a t r i z ; var w: array [ 0 . . 5 0 , 1 . . 1 0 ] of r e a l ; i , j : integer ; begin for i :=0 to 50 do begin for j :=1 to 10 do write (w[ i , j ] , ’ ’) ; writeln () ; end ; end .

I

o que deve ser alterado para imprimir somente os pares?;

I

e somente aqueles com ´ındices pares? ([2,2], [2,4], ...)?;

(13)

Impress˜

ao

program l e r m a t r i z ; var w: array [ 0 . . 5 0 , 1 . . 1 0 ] of r e a l ; i , j : integer ; begin for i :=0 to 50 do begin for j :=1 to 10 do write (w[ i , j ] , ’ ’) ; writeln () ; end ; end .

I

o que deve ser alterado para imprimir somente os pares?;

(14)

Impress˜

ao da matriz transposta

I

Problema: Imprima a matriz por colunas

(ma-triz transposta)

I

program l e r m a t r i z ; var w: array [ 0 . . 5 0 , 1 . . 1 0 ] of r e a l ; i , j : integer ; begin for j :=1 to 10 do begin for i :=0 to 50 do write (w[ i , j ] , ’ ’) ; writeln () ; end ; end .

(15)

Impress˜

ao da matriz transposta

I

Problema: Imprima a matriz por colunas

(ma-triz transposta)

I

program l e r m a t r i z ; var w: array [ 0 . . 5 0 , 1 . . 1 0 ] of r e a l ; i , j : integer ; begin for j :=1 to 10 do begin for i :=0 to 50 do write (w[ i , j ] , ’ ’) ; writeln () ; end ; end .

(16)

procedimento para imprimir uma linha

I

Problema: Escreva um procedimento que

im-prime todos os elementos da linha “K” de uma

matriz “w”

I

procedure imprimir uma linha ( var w: matriz ; n ,m: integer ; K: integer ) ; (∗ imprime a l i n h a K da matriz ∗)

(∗ n eh o numero de linhas , m eh o numero de colunas ∗) var j : integer ;

begin

for j := 1 to m do

write (w[K, j ] ,’ ’) ; (∗ K f i x o na primeira posicao ∗) writeln ;

(17)

procedimento para imprimir uma linha

I

Problema: Escreva um procedimento que

im-prime todos os elementos da linha “K” de uma

matriz “w”

I

procedure imprimir uma linha ( var w: matriz ; n ,m: integer ; K: integer ) ; (∗ imprime a l i n h a K da matriz ∗)

(∗ n eh o numero de linhas , m eh o numero de colunas ∗) var j : integer ;

begin

for j := 1 to m do

write (w[K, j ] ,’ ’) ; (∗ K f i x o na primeira posicao ∗) writeln ;

(18)

procedimento para imprimir uma coluna

I

Problema: Escreva um procedimento que

im-prime todos os elementos da coluna “K” de

uma matriz “w”

I

procedure imprimir uma coluna ( var w: matriz ; n ,m: integer ; K: integer ) ; (∗ imprime a coluna K da matriz ∗)

(∗ n eh o numero de linhas , m eh o numero de colunas ∗) var i : integer ;

begin

for i := 1 to n do

write (’ ’ , w[ i ,K] ) ; (∗ K f i x o na segunda posicao ∗) writeln ;

(19)

procedimento para imprimir uma coluna

I

Problema: Escreva um procedimento que

im-prime todos os elementos da coluna “K” de

uma matriz “w”

I

procedure imprimir uma coluna ( var w: matriz ; n ,m: integer ; K: integer ) ; (∗ imprime a coluna K da matriz ∗)

(∗ n eh o numero de linhas , m eh o numero de colunas ∗) var i : integer ;

begin

for i := 1 to n do

write (’ ’ , w[ i ,K] ) ; (∗ K f i x o na segunda posicao ∗) writeln ;

(20)

Fun¸c˜

ao para encontrar o menor elemento

I

Problema: Escreva uma fun¸

ao que retorna o

menor elemento de uma matriz

I

function acha menor matriz ( var w: matriz ; n ,m: integer ) : integer ; var i , j : integer ; menor : integer ; begin menor:= w[ 1 , 1 ] ; for i := 1 to n do for j := 1 to m do i f w[ i , j ] < menor then menor:= w[ i , j ] ; acha menor matriz:= menor ; end ;

(21)

Fun¸c˜

ao para encontrar o menor elemento

I

Problema: Escreva uma fun¸

ao que retorna o

menor elemento de uma matriz

I

function acha menor matriz ( var w: matriz ; n ,m: integer ) : integer ; var i , j : integer ; menor : integer ; begin menor:= w[ 1 , 1 ] ; for i := 1 to n do for j := 1 to m do i f w[ i , j ] < menor then menor:= w[ i , j ] ; acha menor matriz:= menor ; end ;

(22)

Procedimento que soma duas matrizes

Problema: Escreva uma procedimento que soma

duas

matrizes

“v”

e

“w”

em

uma

matriz

“soma v w”

I

“v”, “w” e “soma v w” devem ter o mesmo n´

umero de linhas

e colunas;

I

soma v w := v [i , j ] + w [i , j ]

I

procedure somar matrizes ( var v , w, soma v w : matriz ; n ,m: integer ) ; var i , j : integer ;

begin

(∗ n e m sao o numero de l i n h a s e colunas , respectivamente ∗) for i := 1 to n do

for j := 1 to m do

soma v w [ i , j ]:= v [ i , j ] + w[ i , j ] ; end ;

(23)

Procedimento que soma duas matrizes

Problema: Escreva uma procedimento que soma

duas

matrizes

“v”

e

“w”

em

uma

matriz

“soma v w”

I

“v”, “w” e “soma v w” devem ter o mesmo n´

umero de linhas

e colunas;

I

soma v w := v [i , j ] + w [i , j ]

I

procedure somar matrizes ( var v , w, soma v w : matriz ; n ,m: integer ) ; var i , j : integer ;

begin

(∗ n e m sao o numero de l i n h a s e colunas , respectivamente ∗) for i := 1 to n do

for j := 1 to m do

soma v w [ i , j ]:= v [ i , j ] + w[ i , j ] ; end ;

(24)

Procedimento que soma duas matrizes

Problema: Escreva uma procedimento que soma

duas

matrizes

“v”

e

“w”

em

uma

matriz

“soma v w”

I

“v”, “w” e “soma v w” devem ter o mesmo n´

umero de linhas

e colunas;

I

soma v w := v [i , j ] + w [i , j ]

I

procedure somar matrizes ( var v , w, soma v w : matriz ; n ,m: integer ) ; var i , j : integer ;

begin

(∗ n e m sao o numero de l i n h a s e colunas , respectivamente ∗) for i := 1 to n do

for j := 1 to m do

soma v w [ i , j ]:= v [ i , j ] + w[ i , j ] ; end ;

(25)

Procedimento que multiplica duas matrizes

Problema: Escreva uma procedimento que

mul-tiplica duas matrizes “A” e “B” em uma matriz

“AB”

I

umero de colunas da matriz A tem de ser igual ao n´

umero de

linhas da matriz B;

I

Considere A

n×m

e B

m×p

, ent˜

ao AB

n×p

39

26

39

20

27

54

60

45

134

16

24

61

6

0

9

4

6

2

1

9

0

0

2

8

7

3

9

1

2

3

4

0

1

0

1

2

3

4

5

0

0

0

7

7

1

0

9

(26)

Procedimento que multiplica duas matrizes

Problema: Escreva uma procedimento que

mul-tiplica duas matrizes “A” e “B” em uma matriz

“AB”

I

umero de colunas da matriz A tem de ser igual ao n´

umero de

linhas da matriz B;

I

Considere A

n×m

e B

m×p

, ent˜

ao AB

n×p

39

26

39

20

27

54

60

45

134

16

24

61

6

0

9

Matriz:

AB

4

6

2

1

9

0

0

2

8

7

3

9

1

2

3

4

0

1

0

1

Matriz:

A

2

3

4

5

0

0

0

7

7

1

0

9

Matriz:

B

(27)

alculo de um elemento (B[3,2])

I

8 × 3 + 7 × 0 + 3 × 7 + 9 × 0 = 45

39

26

39

20

27

54

60

45

134

16

24

61

6

0

9

Matriz:

AB

4

6

2

1

9

0

0

2

8

7

3

9

1

2

3

4

0

1

0

1

Matriz:

A

2

3

4

5

0

0

0

7

7

1

0

9

Matriz:

B

I

A[

3

, 1] × B[1,

2

]+

A[

3

, 2] × B[2,

2

]+

A[

3

, 3] × B[3,

2

]+

AB[

i

,

j

] =

n

X

k=1

A[

i

, k] × B[k,

j

]

(28)

alculo de um elemento (B[3,2])

I

8 × 3 + 7 × 0 + 3 × 7 + 9 × 0 = 45

39

26

39

20

27

54

60

45

134

16

24

61

6

0

9

Matriz:

AB

4

6

2

1

9

0

0

2

8

7

3

9

1

2

3

4

0

1

0

1

Matriz:

A

2

3

4

5

0

0

0

7

7

1

0

9

Matriz:

B

I

A[3, 1] × B[1,

2

]+

A[3, 2] × B[2,

2

]+

A[3, 3] × B[3,

2

]+

A[3, 4] × B[4,

2

]

AB[i,

j

] =

n

X

k=1

A[i

, k] × B[k,

j

]

(29)

alculo de um elemento: implementa¸c˜

ao

AB[i , j ] =

n

X

k=1

A[i , k] × B[k, j ]

I

Do somat´

orio, chega-se facilmente ao c´

odigo:

begin (∗ calcula AB[ i , j ] ∗) soma:= 0;

for k:= 1 to n do

soma:= soma + A[ i , k ] ∗ B[ k , j ] ; AB[ i , j ]:= soma;

end ;

(30)

alculo de um elemento: implementa¸c˜

ao

AB[i , j ] =

n

X

k=1

A[i , k] × B[k, j ]

I

Do somat´

orio, chega-se facilmente ao c´

odigo:

begin (∗ calcula AB[ i , j ] ∗) soma:= 0;

for k:= 1 to n do

soma:= soma + A[ i , k ] ∗ B[ k , j ] ; AB[ i , j ]:= soma;

end ;

(31)

Multiplica¸c˜

ao de Matrizes: implementa¸c˜

ao

procedure m ul t i pl i ca r m at r iz e s ( var A: matriz ; lin A , col A : integer ; var B: matriz ; lin B , col B : integer ; var AB: matriz ; var lin AB , col AB : integer ) ; var i , j , k : integer ;

begin

lin AB:= lin A ; col AB:= col B ; for i := 1 to lin A do for j := 1 to col B do begin AB[ i , j ]:= 0; for k:= 1 to lin B do AB[ i , j ]:= AB[ i , j ] + A[ i , k ] ∗ B[ k , j ] ; end ; end ;

(32)

Referências

Documentos relacionados

Observações como esta ganham peso ainda maior quando se leva em conta que, num país desprovido de cultura científica, os veículos de comunicação representam o canal mais

É relevante, ainda, considerar que os termos “reciclagem/ formação” indiciam a vontade que o especialista, reconhecido como portador de um saber, tem de

Para Rogers (1977) existem seis condições básicas para que ocorra o processo terapêutico, são elas: que duas pessoas estejam em contato psicológico; a primeira

Micro System Mini System Reprodutor de Imagens Caixas Acústicas Home Theater Fone de ouvido TVs e Monitores Periféricos de TVs ÍNDICE Net / Notebook Tablet Smartphone Soundbar

Creative Commons Atribui¸ c˜ ao-Uso N˜ ao-Comercial-Vedada a Cria¸ c˜ ao de Obras Derivadas 2.5 Brasil

Conforme adiante será narrado, para o perfeito funcionamento deste cartel de grandes empreiteiras, foi praticada a corrupção de diversos empregados públicos do

A leitura é uma habilidade indispensável para o desenvolvimento do indivíduo, incidindo diretamente no processo ensino-aprendizagem. O gosto pela leitura deve

7 A simulação assume não haver restrições sobre a oferta de mão de obra nas regiões metropolitanas. Se houver essa restrição, ou os salários aumentarão mais fortemente