estrutura de dados i profº.: abc sampaio matrizes & matrizes especiais universidade federal do...
TRANSCRIPT
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.