Необходимо разработать программу, которая предоставляет удобный функционал для работы с разреженной матрицей. Разреженная матрица — матрица с большим количеством нулевых элементов. Требуется написать следующие функции:
- Ввода матрицы;
- Печати матрицы;
- Суммирования двух матриц;
- Умножения двух матриц.
Представлять матрицы можно в виде списка или в виде динамического массива.
К сожалению, решения данной задачи пока нет. Если Вы решили эту задачу, сообщите нам, и мы выложим её на сайте.
E-mail : admin@cppstudio.com
Комментарии
AndreiST
#include <iostream> #include <cstdlib> using namespace std; void Input(int **Arr, int sizeMatrix){ for(int i(0); i<sizeMatrix; i++){ for (int j(0); j<sizeMatrix; j++){ cout << "Element matrix [" << i << "][" << j << "]="; cin >> Arr[i][j]; } } } void Print(int **Arr, int sizeMatrix){ for(int i(0); i<sizeMatrix; i++){ for (int j(0); j<sizeMatrix; j++){ cout << Arr[i][j] << " "; } cout << endl; } } void Sum(int **Arr1, int **Arr2, int **Arr3, int sizeMatrix){ for(int i(0); i<sizeMatrix; i++){ for (int j(0); j<sizeMatrix; j++){ Arr3[i][j]=Arr1[i][j]+Arr2[i][j]; } } } void Mult(int **Arr1, int **Arr2, int **Arr3, int sizeMatrix){ for(int i(0); i<sizeMatrix; i++){ for (int j(0); j<sizeMatrix; j++){ Arr3[i][j]=(Arr1[i][j])*(Arr2[i][j]); } } } int main() { int **Arr1, **Arr2, **Arr3; int sizeMatrix; int key; int flag=0; cout << "-------Menu-------" << endl; cout << "1-Input matrix" << endl; cout << "2-Print matrix" << endl; cout << "3-Sum matrix" << endl; cout << "4-Multiply matrix" << endl; cout << "0-Exit" << endl; cout << "------------------" << endl; while(1){ cout << "You choice "; cin >> key; switch (key){ case 1:{ cout << "Input size matrix "; cin >> sizeMatrix; cout << "Matrix 1:" << endl; Arr1=new int*[sizeMatrix]; for(int i(0); i<sizeMatrix; i++){Arr1[i]=new int[sizeMatrix];} Input(Arr1, sizeMatrix); cout << "Matrix 2:" << endl; Arr2=new int*[sizeMatrix]; for(int i(0); i<sizeMatrix; i++){Arr2[i]=new int[sizeMatrix];} Input(Arr2, sizeMatrix); flag=1; break; } case 2:{ if(flag==1){ cout << "----Matrix 1---- " << endl; Print(Arr1, sizeMatrix); cout << "----Matrix 2---- " << endl; Print(Arr2, sizeMatrix); } else cout << "Enter matrix choice 1!" << endl; break; } case 3:{ if(flag==1){ Arr3=new int*[sizeMatrix]; for(int i(0); i<sizeMatrix; i++){Arr3[i]=new int[sizeMatrix];} Sum(Arr1, Arr2, Arr3, sizeMatrix); cout << "Sum matrix 1 & matrix 2" << endl; Print(Arr3, sizeMatrix); for (int i(0); i<sizeMatrix; i++) delete [] Arr3[i]; delete [] Arr3; } else cout << "Enter matrix choice 1!" << endl; break; } case 4:{ if(flag==1){ Arr3=new int*[sizeMatrix]; for(int i(0); i<sizeMatrix; i++){Arr3[i]=new int[sizeMatrix];} Mult(Arr1, Arr2, Arr3, sizeMatrix); cout << "Multiplex matrix 1 & matrix 2" << endl; Print(Arr3, sizeMatrix); for (int i(0); i<sizeMatrix; i++) delete [] Arr3[i]; delete [] Arr3; } else cout << "Enter matrix choice 1!" << endl; break; } case 0:{ exit(1); } } } for (int i(0); i<sizeMatrix; i++) delete [] Arr1[i]; delete [] Arr1; for (int i(0); i<sizeMatrix; i++) delete [] Arr2[i]; delete [] Arr2; return 0; }YourSpace_tym
// ConsoleApplication3.cpp : Defines the entry point for the console application. // created by YourSpace_tym #include "stdafx.h" #include "iostream" using namespace std; void menu() { cout << endl; cout << "1 - input arrays" << endl; cout << "2 - print arrays" << endl; cout << "3 - sum arrays" << endl; cout << "4 - multiply arrays" << endl; cout << "0 - exit" << endl; cout << endl; } void input(int ** array, int n, int k) { for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { cout << "Array[" << i << "][" << j << "] : "; cin >> array[i][j]; } } } void print(int ** array, int n, int k) { for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { cout << array[i][j] << ' '; } cout << endl; } } void sum(int ** array1, int ** array2, int ** array3, int n, int k) { for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { array3[i][j] = array1[i][j] + array2[i][j]; } } cout << endl; cout << "New array (array1 + array2) : " << endl; print(array3, n, k); } void multiply(int ** array1, int n1, int k1, int ** array2, int n2, int k2, int ** array3) { for (int i = 0; i < n1; i++) { for (int j = 0; j < k2; j++) { array3[i][j] = 0; for (int p = 0; p < n2; p++) { array3[i][j] += array1[i][p] * array2[p][j]; } } } cout << endl; cout << "New array (array1 * array2) : " << endl; print(array3, n1, k2); } int main() { int ** array_f; int ** array_s; int choose = -1; int r_first, c_first; int r_second, c_second; cout << "First array : " << endl; cout << "Rows : "; cin >> r_first; cout << "Columns : "; cin >> c_first; cout << endl; cout << "Second array : " << endl; cout << "Rows : "; cin >> r_second; cout << "Columns : "; cin >> c_second; array_f = new int*[r_first]; for (int i = 0; i < r_first; i++) { array_f[i] = new int[c_first]; } array_s = new int*[r_second]; for (int i = 0; i < r_second; i++) { array_s[i] = new int[c_second]; } while (choose != 0) { menu(); cout << "Your choose : "; cin >> choose; if (choose == 0) break; while (choose != 1 && choose != 2 && choose != 3 && choose != 4) { cout << "Incorrect, your choose : "; cin >> choose; } switch (choose) { case 1: cout << "First array : "; cout << endl; input(array_f, r_first, c_first); cout << endl; cout << "Second array : "; cout << endl; input(array_s, r_second, c_second); break; case 2: cout << endl; cout << "Array 1 : " << endl; print(array_f, r_first, c_first); cout << endl; cout << "Array 2 : " << endl; print(array_s, r_second, c_second); break; case 3: if (r_first == r_second && c_first == c_second) { int ** sum_ar = new int*[r_first]; for (int i = 0; i < r_first; i++) { sum_ar[i] = new int[c_first]; } cout << endl; sum(array_f, array_s, sum_ar, r_first, c_second); } else cout << "Try again : size of first must be equal with size of second array " << endl; break; case 4: if (c_first == r_second) { int ** multiplier = new int*[r_first]; for (int i = 0; i < r_first; i++) { multiplier[i] = new int[c_second]; } multiply(array_f, r_first, c_first, array_s, r_second, c_second, multiplier); } else cout << "Try again : number of columns in first array must be equal with number of rows in second array " << endl; break; } } return 0; }