FAÇA A IMPLEMANTAÇÃO EM C++

(Não deve ser alocado arrays, apenas nós.)


______________________________Classe SparseMatrix___________________________________


* SparseMatrix(int m, int n); <- deve ser separada da main
Construtor da classe. Inicializa uma matriz esparsa vazia com capacidade para m
linhas e n colunas. Essa função deve checar se os valores passados são válidos (se
são inteiros positivos, ou seja m > 0 e n > 0); se não forem, uma exceção deve ser
lançada


* SparseMatrix();
Destrutor. Libera toda a memória que foi alocada dinamicamente para a matriz

* void insert(int i, int j, double value);
Esta função-membro faz o valor na célula (i, j) da matriz ser igual a value, onde i
 é a linha e “j” é a coluna. Se já houver um valor nessa posição, ele é atualizado para
esse novo valor. Essa função deve checar se os índices i, j passados por parâmetro
são válidos; se não forem válidos, uma exceção deve ser lançada. Atenção: No caso
em que o valor do argumento value for igual a zero, a função deve desconsiderar e
não fazer nada neste caso. Ou seja, chamadas desta função passando o valor 0 não
terão efeito algum.

* double get(int i, int j);
Devolve o valor na célula (i, j) da matriz, onde “i” é a  linha e “j”  é a coluna. Essa
função deve checar se os índices passados são válidos; se não forem válidos, uma
exceção deve ser lançada.

* void print();
Esta função imprime a matriz A no terminal, inclusive os elementos iguais a zero.


Além da classe SparseMatrix, você deve implementar três funções adicionais no arquivo
main.cpp (não são funções-membro da SparseMatrix, são funções externas à classe)


_____________________________________Arquivo main.cpp______________________________________


* SparseMatrix* readSparseMatrix(std::string nome do arquivo);
Essa função lê, de um arquivo de entrada, os elementos diferentes de zero de uma
matriz esparsa e monta a estrutura especificada anteriormente, devolvendo um ponteiro para a SparseMatrix alocada dinamicamente. Considere que a primeira linha
do arquivo de entrada consiste dos valores m e n (número de linhas e de colunas da
matriz), e as demais linhas do arquivo sao constitúıdas de triplas (i, j, valor) para
Os elementos diferentes de zero da matriz. Por exemplo, para a matriz A anterior,
o contéudo do arquivo de entrada seria:


--matriz.txt----
4 4
1 1 50.0
2 1 10.0
2 3 20.0
4 1 -30.0
4 3 -60.0
4 4 -5.0


você pode usar a biblioteca fstream, que possibilita ler arquivos e escrever neles, arquivos-texto


ATENÇÃO: As matrizes podem ter até 30000 linhas e 30000 colunas.


* SparseMatrix* sum(SparseMatrix* A, SparseMatrix* B);
Essa função recebe como parâmetro as matrizes A e B, devolvendo uma matriz C
que  é a soma de A e B.


* SparseMatrix *multiply(SparseMatrix *A, SparseMatrix *B);
Essa fuņçao recebe como parametro as matrizes A e B, devolvendo uma matriz C
que é a multiplicação  de A por B.


É obrigat́orio o uso de alocação dinâmica de memória para implementar
as listas de adjacência que representam as matrizes


separe o codigo em nesses arquivos 
[main.cpp] - [SparseMatrix.cpp] - [SparseMatrix.h]