·

Cursos Gerais ·

Estrutura de Dados

Send your question to AI and receive an answer instantly

Ask Question

Preview text

TAD Matriz Esqueleto No fim do arquivo você encontra uma pasta chamada projeto contendo um esqueleto da atividade Baixe todo esse projeto no seu computador Não mexa no arquivo maincpp pois ele já está pronto para uso O único arquivo que você deve completar para finalizar esta atividade é o arquivo Matrizcpp todos no fim do pdf anexo com os arquivos O objetivo desta atividade é implementar um TAD chamado Matriz usando obrigatoriamente Programação Orientada a Objetos O TAD Matriz encapsula uma matriz com m linhas e n colunas sobre a qual podemos fazer as seguintes operações criar matriz com m linhas e n colunas alocada dinamicamente e com todos os elementos iguais a zero liberardeletar a matriz que foi alocada dinamicamente acessar valor na posição ij da matriz atribuir valor ao elemento na posição ij da matriz retornar o número de linhas da matriz retornar o número de colunas da matriz imprimir a matriz multiplicar a matriz atual por uma matriz passada por parâmetro e retornar a matriz resultante somar a matriz atual com uma matriz passada por parâmetro e retornar a matriz resultante Observações Lembrese de que nem sempre é possível multiplicar ou somar duas matrizes Para que a soma dê certo as duas matrizes precisam ter as mesmas dimensões Para que a multiplicação dê certo o número de colunas da primeira matriz deve ser igual ao número de linhas da segunda Requisitos O código do TAD Matriz deve ser dividido em dois arquivos Matrizh e Matrizcpp como explicado em sala O código do arquivo Matrizh já foi escrito e pode ser encontrado em anexo logo acima nesta atividade na pasta projeto Você precisa apenas implementar as funçõesmembro da classe Matriz no arquivo Matrizcpp que está incompleto Além disso o código do programa cliente maincpp já está feito O programa principal lê comandos passados como entrada e manipula uma ou mais matrizes Os comandos aceitos pelo menu principal estão listados abaixo Comandos do programa principal Comando Significado creatematrix l c Instancia um objeto da Classe Matriz com l linhas e c colunas Lê os l x c valores e inicializa o objeto matriz exit Sai do programa liberando todos os objetos criados printmatrix k Imprime a k1ésima matriz criada nlinhas k Imprime o número de linhas da k1ésima matriz criada ncolunas k Imprime o número de colunas da k1ésima matriz criada getvalor i j k Imprime o valor contido na posição ij da k1ésima matriz criada sum p q Soma a p1ésima matriz com a q1ésima matriz e imprime a matriz resultante na tela multiply p q Multiplica a p1ésima matriz com a q1ésima matriz e imprime a matriz resultante na tela Exemplo de Entrada creatematrix 5 5 0 2 0 3 1 9 8 23 0 1 33 87 2 6 7 0 1 4 0 9 0 3 0 1 3 nlinhas 0 ncolunas 0 printmatrix 0 exit Exemplo de Saída linhas 5 colunas 5 0 2 0 3 1 9 8 23 0 1 33 87 2 6 7 0 1 4 0 9 0 3 0 1 3 matriz liberada Matrizcpp Arquivo de Implementacao do TAD Matriz include iostream include iomanip include Matrizh using namespace std Aloca espaco dinamicamente para matriz com m linhas e n colunas MatrizMatrizint m int n Destrutor Libera a memoria que foi alocada dinamicamente no construtor MatrizMatriz Retorna o numero de linhas da matriz int Matrizlinhas Retorna o numero de colunas da matriz int Matrizcolunas Retorna o valor da celula ij da matriz int MatrizgetValorint i int j Atribui valor a celula ij da matriz void MatrizsetValorint valor int i int j Imprimir a matriz void Matrizprint forint i 0 i lin i forint j 0 j col j cout setw7 matij cout Soma matrizes Matriz MatrizsomaMatriz B Multiplica matrizes Matriz MatrizmultiplicaMatriz B Maincpp include iostream include sstream include string include vector include Matrizh using namespace std int main vectorMatriz matrizes Vector de ponteiros para matrizes whiletrue string line string comando getlinecin line stringstream ss line ss comando ifcomando exit forint i 0 i matrizessize i delete matrizesi return 0 creatematrix l c else ifcomando creatematrix int l c ss l ss c Matriz m new Matrizl c forint i 0 i l i forint j 0 j c j int val 0 cin val cinignore msetValorval i j matrizespushback m printmatrix k else ifcomando printmatrix int k ss k matrizeskprint nlinhas k else ifcomando nlinhas int k ss k cout linhas matrizesklinhas endl ncolunas k else ifcomando ncolunas int k ss k cout colunas matrizeskcolunas endl getvalor i j k else ifcomando getvalor int i j k ss i j k cout valor matrizeskgetValorij endl sum p q else ifcomando sum int p q ss p q Matriz C matrizespsomamatrizesq ifC nullptr cout nao foi possivel somar endl else Cprint delete C multiply p q else ifcomando multiply int p q ss p q Matriz C matrizespmultiplicamatrizesq ifC nullptr cout nao foi possivel multiplicar endl else Cprint delete C else cout comando inexistente endl return 0 Matrizh ifndef MATRIZH define MATRIZH class Matriz private int lin numero de linhas da matriz int col numero de colunas da matriz int mat ponteiro para matriz de inteiros deve ser alocada dinamicamente public Construtor aloca matriz com m linhas e n colunas Matrizint m int n Destrutor libera memoria alocada Matriz Retorna o numero de linhas da matriz int linhas Retorna o numero de colunas da matriz int colunas Retorna o valor contido na celula ij da matriz int getValorint i int j Atribui o valor v a celula ij da matriz void setValorint v int i int j Imprimir a matriz void print Recebe uma referencia para o objeto B do tipo Matriz que possui m linhas e n colunas e soma a matriz B com a matriz atual Lembre que a soma de uma matriz A com uma matriz B so eh possivel se o numero de linhas e de colunas de A for igual ao numero de linhas e de colunas de B respectivamente Se for possivel fazer a soma um ponteiro para uma nova matriz C contendo o resultado da soma deve ser retornado note que a matriz C deve ser alocada dinamicamente dentro da funcaomembro Caso contrario retorna nullptr indicando que nao foi possivel fazer a soma das matrizes Matriz somaMatriz B Recebe uma referencia para o objeto B do tipo Matriz que possui m linhas e n colunas e multiplica a matriz que chamar essa funcaomembro pela matriz B Lembre que a multiplicacao de uma matriz A por uma matriz B so eh possivel se o numero de colunas de A for igual ao numero de linhas de B Se for possivel fazer a multiplicacao um ponteiro para uma nova matriz C contendo o resultado da multiplicacao deve ser retornado note que a matriz C deve ser alocada dinamicamente dentro da funcaomembro Caso contrario retorna nullptr indicando que nao foi possivel fazer a multiplicacao das matrizes Matriz multiplicaMatriz B Com a linha abaixo eu estou dizendo para o C nao criar o construtor de copia default Ou seja nao quero que seja possivel instanciar uma matriz passando outra matriz como argumento pelo construtor Matrizconst Matriz m delete endif