Buscar

06.LabII.TADMatrizesEspeciais-Triangular

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Laboratório de Programação II
Departamento de Ciência da Computação
UFJF
Aula de hoje
•Casos especiais de Matrizes: Matriz Triangular
•Representação linear
Matriz Triangular
–Definição: Uma matriz é considerada
triangular se todos os elementos abaixo ou
acima da diagonal principal são nulos.
–A seguir, será apresentada a implementação
de um TAD para matrizes triangulares
inferiores, usando a representação linear
vista na aula de ED.
–TAD TMatTriang
TAD TMatTriang
•Dados
– Numa matriz triangular de ordem n (quadrada
n x n), o total de elementos a serem representados
é: n(n+1)/2
•Operações
–Construir (Criar) a representação linear da matriz
–Destruir (Liberar) a representação linear da matriz
–Consultar (Acessar) o elemento na posição (i,j)
–Atribuir (Alterar) o valor do elemento da posição
(i,j)
–etc.
TAD TMatTriang
(representação linear)
TAD TMatTriang
•Observações:
–O TAD TMatTriang será implementado usando uma
representação linear – isto é, um vetor.
–Sendo assim, é necessário transformar os índices i
e j da matriz, no índice K correspondente do vetor.
–Logo, K = (i*(i+1)/2) + j
TAD TMatTriang
•Para implementar o TAD TMatTriang em C++
deve-se criar os seguintes arquivos:
–TMatTriang.h
•Definição da classe TMatTriang
•Dados e operações do TAD
–TMatTriang.cpp
•MI – Modulo de implementação do TAD TMatTriang
TMatTriang.h
class TMatTriang
{
int n; // ordem da matriz triangular
float *vet; // representação linear da
// triangular
bool Verifica(int i, int j);
public:
TMatTriang(int ordemMatriz);
float Consulta(int i, int j);
void Atribui(int i, int j, float valor);
~TMatTriang();
};
TMatTriang.cpp (1)
#include "TMaTriang.h"
#include <iostream>
#include <cstdlib>
using namespace std;
TMatTriang::TMatTriang(int ordemMatriz)
{
n = ordemMatriz;
//m: tamanho do vetor vet
int m = n*(n + 1)/2;
vet = new float[m];//aloca m floats para vet
}
TMatTriang::~TMatTriang()
//desaloca a memória alocada pelo construtor
{
delete [] vet;
}
TMatTriang.cpp (2)
bool TMatTriang::Verifica(int i, int j)
{
//verifica validade dos indices de linha e coluna
if(i >= 0 && i < n && j >= 0 && j < n)
return true;
else
return false; //indice invalido
};
TMatTriang.cpp (3)
float TMatTriang::Consulta(int i, int j)
{
if(Verifica(i, j))
{
if(i >= j)
{
int k = i*(i + 1)/2 + j;
return vet[k];
}
else
return 0.0;
}
else
cout<<“Não consulta: Indice invalido”<<endl;
exit(1); // finaliza o programa
}
TMatTriang.cpp (4)
void TMatTriang::Atribui(int i, int j, float valor)
{
if(Verifica(i, j))
{
if(i >= j)
{
int k = i*(i + 1)/2 + j;
vet[k] = valor;
}
else
if(valor != 0.0)
cout<<“Não atribui:elemento[“<<i<<“,”
<<j<<“] fora do triangulo 
inferior” <<endl;
}
else
cout<<“Não atribui: Indice invalido” <<endl;
}
PA usando o TAD TMatTriang
#include <iostream>
#include "TMatTriang.h" // inclui o TAD TMatTriang
using namespace std;
int main()
{
TMatTriang *mat = new TMatTriang(2);
mat->Atribui(0, 0, 1.2);
mat->Atribui(1, 0, 2.2);
mat->Atribui(1, 1, 3.2);
printf("%f", mat->Consulta(1,1));
delete mat;
return 0;
}
Exercícios
1. Implementar o TAD matriz simétrica usando o TAD da 
matriz triangular inferior anteriormente implementado. 
Ver abaixo o TAD TMatSim.
class TMatSim
{ // representação da matriz simétrica por uma
// triangular inferior
TMatTriang *MatTriagInf;
public:
TMatSim(int ordemMatriz);
float Consulta(int i, int j);
void Atribui(int i, int j, float valor);
void Imprime(void);
~TMatSim();
};
Exercícios
Desenvolver:
a) Construtor (inicializa variáveis e aloca memória, se 
necessário);
b) Destrutor (desaloca memória que foi alocada no 
construtor);
c) Verificar a validade dos índices i e j da matriz.
d) Consultar o valor real da posição de índices i e j 
(válidos) da matriz simétrica.
e) Atribuir um valor real para a posição de índices i e j 
(válidos) da matriz simétrica.
Exercícios
1. Resolução.
a) Criar o projeto PMatSimetrica
b) Fazer uma cópia dos arquivos (foram implementados):
TMatTriang.cpp
TMatTriang.h
na mesma pasta do projeto PMatSimetrica
c) Incluir estes arquivos no projeto PMatSimetrica (usar 
botão direito do mouse sobre o nome do projeto 
PMatSimetrica)
Exercícios
1. Resolução.
d) Criar o aquivo MatSimetrica.h
#include "TMatTriang.h" // inclui o TAD TMatTriang
class TMatSim
{ // representação da matriz simétrica por uma
// triangular inferior
TMatTriang *MatTriagInf;
public:
TMatSim(int ordemMatriz);
float Consulta(int i, int j);
void Atribui(int i, int j, float valor);
void Imprime(void);
~TMatSim();
};
Exercícios
1. Resolução.
e) Criar o arquivo MatSimetrica.cpp 
Construtor e destrutor
#include "MatSimetrica.h"
#include <iostream>
using namespace std;
TMatSim::TMatSim(int ordemMatriz){
//cria um objeto da da matriz triangular inferior
//essa matriz representará a matriz simétrica
MatTriagInf = new TMatTriang(ordemMatriz);
}
TMatSim::~TMatSim(){
//desaloca a memória alocada pelo construtor
delete MatTriagInf;
}
Exercícios
1. Resolução.
e) Criar o arquivo MatSimetrica.cpp 
Consulta
float TMatSim::Consulta(int i, int j)
{
//a operação consulta() da matriz triangular
//inferior verificará os índices
if(i >= j)//valor está na triangulo inferior
return MatTriagInf->Consulta(i, j);
else //valor está na triangulo superior
return MatTriagInf->Consulta(j, i);
}
Exercícios
1. Resolução.
e) Criar o arquivo MatSimetrica.cpp 
Atribui
void TMatSim::Atribui(int i, int j, float valor)
{
//a operação consulta() da matriz triangular
//inferior verificará os índices
if(i >= j)//valor está na triangulo inferior
return MatTriagInf->Atribui(i, j, valor);
else //valor está na triangulo superior
return MatTriagInf->Atribui(j, i, valor);
}
Exercícios
1. Resolução.
e) Criar o arquivo MatSimetrica.cpp 
Imprime
void TMatSim::Imprime(int Ordem)
{
cout<<endl;
for(int i=0; i<Ordem; i++)
{
for(int j=0; j<Ordem; j++)
cout<<Consulta(i, j)<<"\t";
cout<<endl;
}
}
Exercícios
1. Resolução.
e) Criar o arquivo MatSimetrica.cpp 
main
#include <iostream>
#include "MatSimetrica.h"
using namespace std;
int main(){
int Ordem = 8;
TMatSim *m = new TMatSim(Ordem);
for(int i=0; i<Ordem; i++)
for(int j=0; j<Ordem; j++)
m->Atribui(i,j,i*Ordem + j + 1);
m->Imprime(Ordem);
delete m;
return 0;
}
Exercícios
2. Implementar o TAD matriz anti-simétrica usando o TAD 
da matriz triangular inferior já implementado. Ver a seguir 
o TAD TMatAntiSimetrica.
class TMatAntiSimetrica
{ // representação da matriz anti-simétrica por
// uma triang. inferior
TMatTriang *MatTriagInf;
public:
TMatAntiSimetrica(int ordemMatriz);
float Consulta(int i, int j);
void Atribui(int i, int j, float valor);
~TMatAntiSimetrica();
};
Exercícios
Desenvolver:
a) Construtor (inicializa variáveis e aloca memória, se 
necessário);
b) Destrutor (desaloca memória que foi alocada no 
construtor);
c) Verificar a validade dos índices i e j da matriz.
d) Consultar o valor real da posição de índices i e j 
(válidos) da matriz anti-simétrica.
e) Atribuir um valor real para a posição de índices i e j 
(válidos) da matriz anti-simétrica.

Outros materiais