Estrutura de Dados I Profº.: ABC Sampaio Matrizes & Matrizes Especiais Universidade Federal do...

Post on 17-Apr-2015

103 views 1 download

Transcript of Estrutura de Dados I Profº.: ABC Sampaio Matrizes & Matrizes Especiais Universidade Federal do...

Estrutura de Dados IEstrutura de Dados IProfº.: ABC SampaioProfº.: ABC Sampaio

Matrizes

&

Matrizes Especiais

Universidade Federal do ParáUniversidade Federal do ParáCentro de Ciências Exatas e NaturaisCentro de Ciências Exatas e Naturais

Curso de Bacharelado em Ciência da ComputaçãoCurso de Bacharelado em Ciência da Computação

EquipeEquipe

Adriano Martins - 0008802001

Marcelo Malcher - 0008802801

Luiz Tomé - 0008803501

Noção de MatrizNoção de Matriz

Chama - se de matriz m x n toda tabela T de dados homogêneos organizados de forma contígua na memória.

Exemplo:

2 3 -5

4 0 10

7 1/3 -3/8

Armazenamento na memóriaArmazenamento na memória

Uma matriz é armazenada na memória de forma contígua, ou seja, seus elementos estão todos uma ao lado do outro, ocupando um espaço continuo na memória.

.... a11 a12 a13 ....

Classificação das Matrizes Classificação das Matrizes

Matrizes Unidimensionais – VetoresMatrizes N-dimensionais

Matrizes UnidimensionaisMatrizes Unidimensionais

Definição: Chamamos de matrizes unidimensionais aquelas que possuem apenas uma única dimensão. Essas matrizes são comumente chamadas de vetores (linha ou coluna)

Exemplo:

f d b

7

0.1

2.8

Matrizes – N-Dimensionais Matrizes – N-Dimensionais

Operações Em Pascal há somente duas operações básicas a serem efetuadas em uma matriz.

São elas - Consulta - Atribuição

Veremos agora a implementação em Pascal.

Pascal – ExibiçãoPascal – Exibição

Procedure exibicao (M : array [1..5,1..5] of real) ;

Var i, j: integer

for i := 1 to 5 do

for j := 1 to 5 do

writeln ( M [i,j] );

End;

Pascal - AtribuiçãoPascal - Atribuição

Procedure atribuicao (M: array [1..5,1..5] of real);

var i, j: integer;

For i := 1 to 5 do

for j := 1 to 5 do

writeln (‘Digite o conteúdo da matriz’);

readln( M [i,j] );

End;

Matrizes EspeciaisMatrizes Especiais

Matrizes Diagonais Matrizes Triangulares Matrizes Simétricas Matrizes Anti-Simétricas Matrizes Tri-diagonais Matrizes Faixas

Matrizes DiagonaisMatrizes Diagonais

Definição Modelagem Modelagem da Interface Implementação das Operações

DefiniçãoDefinição

As Matrizes diagonais são aquelas cujos elementos fora da diagonal principal são nulos, ou seja, M[i,j]=0 caso i j .

-13 0 0 0

0 51 0 0

0 0 7 0

Freqüentemente, o termo Matriz Diagonal se aplica somente as matrizes quadradas (m = n), porém como o exemplo acima mostra incluímos também as retangulares.

OBS.:

Modelagem Modelagem

Uma matriz diagonal pode ser implementada no Pascal como um vetor linha ou coluna, que armazena apenas os elementos da diagonal principal.

Modelagem da InterfaceModelagem da Interface

Type Diagonal = object

Vet: array [1..3] of string;

Procedure Inicializa;

Procedure MostrarDiagonal;

Procedure Consulta(i,j:integer);

Procedure Altera (i,j:integer; X:string);

End;

Implementação das OperaçõesImplementação das Operações

Procedure diagonal.inicializa;Var i: integer;Begin

For i:=1 to 3 doRead(vet[i]);

End;

Procedure Diagonal.MostrarDiagonal;Var i: integer;Begin

For i:=1 to 3 doWriteln(vet[i]);

End;

Implementação das OperaçõesImplementação das OperaçõesProcedure diagonal.consulta(i, j: integer);Begin If i <> j then writeln (‘0’) else writeln (vet[i]);End;

Procedure Diagonal.Altera(i,j: integer;X: string);Begin If i <> j then writeln (‘Matriz Diagonal, não é possível alterar esse elemento.’) else vet[i]) := X;End;

Matriz TriangularMatriz Triangular

Definição Modelagem Modelagem da Interface Implementação das Operações

DefiniçãoDefinição

Uma matriz M é dita triangular inferior se mij = 0 com i < j, e triangular superior se mij = 0 com i > j

000

600

780

321

Triangular SuperiorM =

ModelagemModelagem

Podemos representar uma matriz triangular como sendo um vetor linha em que seus elementos são os diferentes de 0 (zero). Dispostos ordenadamente de acordo com seus índices.

Modelagem da InterfaceModelagem da Interface

Type TriangularInf = objectvet: array [1..6] of integer; Procedure Inicializa; Procedure MostrarElementos; Procedure Consulta(i,j:integer);

Procedure Altera (i,j:integer; X:string);End;

Implementação das OperaçõesImplementação das OperaçõesProcedure TriangularSup.inicializa;Var i: integer;Begin For i:=1 to 6 do Read(vet[i]);End;

Procedure TriangularSup.MostrarElementos;Var i: integerBegin For i:=1 to 6 do Writeln(vet[i]);End;

Implementação das OperaçõesImplementação das OperaçõesProcedure TriangularSup.consulta(i, j: integer);Begin If i > j then writeln (‘0’) else writeln(vet[((i * (i-1) div 2)+ j)]);End;Procedure TrangularSup.Altera(i,j: integer;X: string);Begin If i > j then writeln (‘Erro: não é possível alterar esse elemento.’) else vet[((i * (i-1) div 2)+ j)] := X;End;

Matriz SimétricaMatriz Simétrica

Definição Modelagem Modelagem da Interface Implementação das Operações

DefiniçãoDefinição

Uma matriz é dita simétrica quando ela é igual a sua transposta, ou seja, ela é simétrica em relação a diagonal principal.

450

51-3

0-32

ModelagemModelagem

Uma matriz simétrica pode ser representada como um vetor linha que contém todos os seus elementos distintos ordenados de acordo com seus índices.

Modelagem da InterfaceModelagem da Interface

Type MatSimetrica = object

vet: array [1..6] of integer;

Procedure Inicializa;

Procedure MostrarSimetrica; Procedure Consulta(i,j:integer); Procedure Altera(i,j:integer; X: string);end;

Implementação das OperaçõesImplementação das Operações

Procedure MatSimetrica.inicializa;Var i:integer;Begin

For i:=1 to 6 do Readln(vet[i]);

End;Procedure MatSimetrica.MostrarSimetrica;Var i: integer Begin For i:=1 to 6 do Writeln(vet[i]); End;

Implementação das OperaçõesImplementação das Operações

Procedure MatSimetrica.Consulta(i,j: integer);Var aux:integer;Begin if i > j then Begin aux:=j; j:=i; i:=aux; End ;Writeln ( vet[((i * (i-1) div 2)+ j)] ); End;

Implementação das OperaçõesImplementação das Operações

Procedure MatSimetrica.Altera(i,j: integer;X: string);Var aux:integer;Begin if i > j then Begin aux:=j; j:=i; i:=aux; End ; vet[((i * (i-1) div 2)+ j)] := X;End;

Matriz Anti-SimétricaMatriz Anti-Simétrica

Definição Modelagem Modelagem da Interface Implementação das Operações

DefiniçãoDefinição

Uma matriz é dita anti-simétrica, se e somente se, ela for igual a sua transposta com o sinal trocado, ou seja, M = - Mt

052

-503

-2-30

ModelagemModelagem

A matriz anti-simétrica,pode ser representada da mesma forma que a simétrica, usando um único vetor

Modelagem da InterfaceModelagem da Interface

Type MatAntiSimetrica = object

vet: array [1..3] of integer;

Procedure Inicializa;

Procedure MostrarAntiSimetrica; Procedure Consulta(i,j:integer); Procedure Altera(i,j:integer; X: real);End;

Implementação das OperaçõesImplementação das Operações

Procedure MatAntiSimetrica.inicializa;Var i:integer;Begin

For i:=1 to 3 do Readln(vet[i]);

End;Procedure MatAntiSimetrica.MostrarAntiSimetrica;Var i: integer Begin For i:=1 to 3 do Writeln(vet[i]); End;

Implementação das OperaçõesImplementação das Operações

Procedure MatAntiSimetrica.Consulta(i,j: integer);Var aux:integer; AS: Boolean;Begin AS:=False; if i > j then Begin aux:=j; j:=i; i:=aux; AS := True; End ;

Implementação das OperaçõesImplementação das Operações

if i = j then writeln(‘0’)

else Begin

If AS then writeln ( (-1*vet[((i * (i-1) div 2)+ j)]) );

else writeln (vet[((i * (i-1) div 2)+ j)]);

End;

End;

Implementação das OperaçõesImplementação das Operações

Procedure MatAntiSimetrica.Altera(i,j: integer; X:real);Var aux:integer; AS: Boolean;Begin AS:=False; if i > j then Begin aux:=j; j:=i; i:=aux; AS := True; End ;

Implementação das OperaçõesImplementação das Operações

if i = j then writeln(‘Matriz Anti-Simétrica, impossível alterar esse elemento.’)

else

Begin

If AS then vet[((i * (i-1) div 2)+ j)]) := -X;

else writeln (vet[((i * (i-1) div 2)+ j)]) := X;

End;

End;

Matriz Tri-DiagonaisMatriz Tri-Diagonais

Definição Modelagem Modelagem da Interface Implementação das Operações

DefiniçãoDefinição

É a matriz onde todos os seus elementos são nulos exceto a diagonal principal e as

diagonais vizinhas mais próximas.

19000

26400

0-1-210

00254

0003-1

ModelagemModelagem

Uma matriz tri-diagonal pode ser implementada transferindo os elementos das três diagonais para um vetor linha.

Modelagem da InterfaceModelagem da Interface

Type TriDiagonal = objectvet: array [1..7] of string;Procedure Inicializa;Procedure MostrarTriDiagonal;

Procedure Consulta(i,j:integer); Procedure Altera(i,j:integer; X: string); End;

Implementação das OperaçõesImplementação das OperaçõesProcedure TriDiagonal.Inicializa;Var i: integer;Begin For i:=1 to 7 do Readln (vet[i]);End;

Procedure TriDiagonal.MostrarTriDiagonal;Var i:integer;Begin For i:=1 to 7 do Writeln (vet[i]);End;

Implementação das OperaçõesImplementação das Operações

Procedure TriDiagonal.consulta(i, j: integer);

Begin

If (i > j + 1) or (j > i + 1) then

writeln (‘0’)

else writeln (vet [2i +j - 2]);

End;

Procedure TriDiagonal.Altera(i,j: integer;X: string);

Begin

If (i > j + 1) or (j > i + 1) then

writeln (‘Matriz Tri-Diagonal, não é possível alterar esse elemento.’)

else vet [2i +j - 2] := X;

End;

Matriz FaixaMatriz Faixa

Definição Modelagem Modelagem da Interface Implementação das Operações

DefiniçãoDefinição

É semelhante a Matriz Tri-Diagonal, porém possibilita ao usuário definir a faixa de vizinhança da diagonal principal a qual os elementos serão não-nulos.

03-45900

0013260

000-183-2

0000-404

0000057

M é uma matriz de faixa 2x1

M =

ModelagemModelagem

Existem duas formas possíveis de se modelar esta matriz. A primeira consiste em usar um único vetor com todos os elementos diferentes de zero; a segunda consiste em usar n vetores de acordo com o número diagonais da faixa.