Universidade Federal do Pará Centro de Ciências Exatas e Naturais Curso de Bacharelado em Ciência da Computação Estrutura de Dados I Profº.: ABC Sampaio Matrizes & Matrizes Especiais Equipe Adriano Martins - 0008802001 Marcelo Malcher - 0008802801 Luiz Tomé - 0008803501 Noçã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 4 7 3 -5 0 10 1/3 -3/8 Armazenamento 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 Matrizes Unidimensionais – Vetores Matrizes N-dimensionais Matrizes 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 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çã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çã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 Especiais Matrizes Diagonais Matrizes Triangulares Matrizes Simétricas Matrizes Anti-Simétricas Matrizes Tri-diagonais Matrizes Faixas Matrizes Diagonais Definição Modelagem Modelagem da Interface Implementação das Operações Definiçã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 51 0 0 0 7 0 0 0 OBS.: 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. 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 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ções Procedure diagonal.inicializa; Var i: integer; Begin For i:=1 to 3 do Read(vet[i]); End; Procedure Diagonal.MostrarDiagonal; Var i: integer; Begin For i:=1 to 3 do Writeln(vet[i]); End; Implementação das Operações Procedure 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 Triangular Definição Modelagem Modelagem da Interface Implementação das Operações Definição Uma matriz M é dita triangular inferior se mij = 0 com i < j, e triangular superior se mij = 0 com i>j M= 1 0 0 0 2 8 0 0 3 7 6 0 Triangular Superior Modelagem 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 Interface Type TriangularInf = object vet: 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ções Procedure TriangularSup.inicializa; Var i: integer; Begin For i:=1 to 6 do Read(vet[i]); End; Procedure TriangularSup.MostrarElementos; Var i: integer Begin For i:=1 to 6 do Writeln(vet[i]); End; Implementação das Operações Procedure 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étrica Definição Modelagem Modelagem da Interface Implementação das Operações Definição Uma matriz é dita simétrica quando ela é igual a sua transposta, ou seja, ela é simétrica em relação a diagonal principal. 2 -3 0 -3 1 5 0 5 4 Modelagem 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 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çõ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çõ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çõ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étrica Definição Modelagem Modelagem da Interface Implementação das Operações Definiçã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 0 -3 -2 3 0 -5 2 5 0 Modelagem A matriz anti-simétrica,pode ser representada da mesma forma que a simétrica, usando um único vetor Modelagem 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çõ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çõ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çõ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çõ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çõ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-Diagonais Definição Modelagem Modelagem da Interface Implementação das Operações Definição É a matriz onde todos os seus elementos são nulos exceto a diagonal principal e as diagonais vizinhas mais próximas. -1 4 0 0 0 3 5 1 0 0 0 2 -2 4 0 0 0 -1 6 9 0 0 0 2 1 Modelagem Uma matriz tri-diagonal pode ser implementada transferindo os elementos das três diagonais para um vetor linha. Modelagem da Interface Type TriDiagonal = object vet: 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ções Procedure 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çõ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 Faixa Definição Modelagem Modelagem da Interface Implementação das Operações Definiçã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. M= 7 5 0 0 0 0 0 4 0 -4 0 0 0 0 -2 3 8 -1 0 0 0 0 6 2 3 1 0 0 0 0 9 5 -4 3 0 M é uma matriz de faixa 2x1 Modelagem 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.