Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #define BUG_1 0
- void swap(int &i_1, int &j_1, int &i_2, int &j_2);
- void DeleteDynamicArray(int **&arrtwoDimArr, const int rows, const int cols) {
- for (int i = 0; i < rows; i++) {
- delete[] arrtwoDimArr[i];
- }
- delete[]arrtwoDimArr;
- arrtwoDimArr = nullptr;
- }
- void DeleteDynamicArray(int *&arroneDimArr) {
- delete[]arroneDimArr;
- arroneDimArr = nullptr;
- }
- void AutoFillArray(int *arroneDimArr, const int size);
- void AutoFillArray(int **arrtwoDimArr, const int rows, const int cols);
- void ManuallyFillArray(int *arrtwoDimArr, const int size);
- void ManuallyFillArray(int **arrtwoDimArr, const int rows, const int cols);
- void MultArray(int *arroneDimArr_1, const int size, int **arrtwoDimArr_2, const int rows, const int cols);
- void MultArray(int **arrtwoDimArr_1, int **arrtwoDimArr_2, const int rows_1, const int cols_1, const int rows_2, const int cols_2);
- void shawArr(int* oneDimArr, const int size);
- void shawArr(int** twoDimArr, const int rows, const int cols);
- int sumArrVals(int* oneDimArr, const int size);
- int sumArrVals(int** twoDimArr, const int rows, const int cols);
- int main() {
- setlocale(LC_ALL, "ru");
- srand(time(NULL));
- int rows_1, rows_2, cols_1, cols_2; char answer;
- std::cout << "Введите количество строк первой матрицы: ";
- std::cin >> rows_1;
- std::cout << "Введите количество столбцов первой матрицы: ";
- std::cin >> cols_1;
- std::cout << "Введите количество строк второй матрицы: ";
- std::cin >> rows_2;
- std::cout << "Введите количество столбцов второй матрицы: ";
- std::cin >> cols_2;
- do {
- if (cols_1 != rows_2 && cols_2 != rows_1) {
- std::cout << "Матрицы с такими размерами нельзя перемножить."
- << "\nРазмер первой матрицы: " << rows_1 << " x " << cols_1
- << "\nРазмер второй матрицы: " << rows_2 << " x " << cols_2 << std::endl;
- while (true) {
- std::cout << "Какую матрицу изменить?(1/2) ";
- std::cin >> answer;
- if (answer == '1') {
- std::cout << "Введите количество строк первой матрицы: ";
- std::cin >> rows_1;
- std::cout << "Введите количество столбцов первой матрицы: ";
- std::cin >> cols_1;
- break;
- }
- else if (answer == '2') {
- std::cout << "Введите количество строк второй матрицы: ";
- std::cin >> rows_2;
- std::cout << "Введите количество столбцов второй матрицы: ";
- std::cin >> cols_2;
- break;
- }
- else {
- std::cout << "Ошибка: неверный ответ" << std::endl;
- continue;
- }
- }
- }
- } while (cols_1 != rows_2 && cols_2 != rows_1);
- if (cols_1 > rows_2) {
- swap(rows_1, cols_1, rows_2, cols_2);
- }
- if (rows_1 == 1) {
- int *oneDimArr_1 = new int[cols_1];
- #if BUG_1==1
- AutoFillArray(oneDimArr_1, rows_1*cols_1);
- shawArr(oneDimArr_1, rows_1*cols_1);
- #endif
- #if BUG_1==0
- std::cout << "Первая матрица: " << std::endl;
- ManuallyFillArray(oneDimArr_1, rows_1*cols_1);
- #endif
- int **twoDimArr_2 = new int*[rows_2];
- for (int i = 0; i < rows_2; i++) {
- twoDimArr_2[i] = new int[cols_2];
- }
- #if BUG_1==1
- AutoFillArray(twoDimArr_2, rows_2, cols_2);
- shawArr(twoDimArr_2, rows_2, cols_2);
- #endif
- #if BUG_1==0
- std::cout << "Вторая матрица: " << std::endl;
- ManuallyFillArray(twoDimArr_2, rows_2, cols_2);
- #endif
- MultArray(oneDimArr_1, rows_1*cols_1, twoDimArr_2, rows_2, cols_2);
- DeleteDynamicArray(oneDimArr_1);
- DeleteDynamicArray(twoDimArr_2, rows_2, cols_2);
- }
- else if (rows_1 != 1) {
- int **twoDimArr_1 = new int*[rows_1];
- for (int i = 0; i < rows_1; i++) {
- twoDimArr_1[i] = new int[cols_1];
- }
- #if BUG_1==1
- AutoFillArray(twoDimArr_1, rows_1, cols_1);
- shawArr(twoDimArr_1, rows_1, cols_1);
- #endif
- #if BUG_1==0
- std::cout << "Первая матрица: " << std::endl;
- ManuallyFillArray(twoDimArr_1, rows_1, cols_1);
- #endif
- int **twoDimArr_2 = new int*[rows_2];
- for (int i = 0; i < rows_2; i++) {
- twoDimArr_2[i] = new int[cols_2];
- }
- #if BUG_1==1
- AutoFillArray(twoDimArr_2, rows_2, cols_2);
- shawArr(twoDimArr_2, rows_2, cols_2);
- #endif
- #if BUG_1==0
- std::cout << "Вторая матрица: " << std::endl;
- ManuallyFillArray(twoDimArr_2, rows_2, cols_2);
- #endif
- MultArray(twoDimArr_1, twoDimArr_2, rows_1, cols_1, rows_2, cols_2);
- DeleteDynamicArray(twoDimArr_1, rows_1, cols_1);
- DeleteDynamicArray(twoDimArr_2, rows_2, cols_2);
- }
- return 0;
- }
- void swap(int &i_1, int &j_1, int &i_2, int &j_2) {
- int temp_1, temp_2;
- temp_1 = i_1;
- temp_2 = j_1;
- i_1 = i_2;
- j_1 = j_2;
- i_2 = temp_1;
- j_2 = temp_2;
- }
- void AutoFillArray(int *arroneDimArr, const int size) {
- for (int i = 0; i < size; i++) {
- arroneDimArr[i] = 1 + rand() % (size * 2);
- }
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < size; j++) {
- if (i == j) {
- continue;
- }
- if (arroneDimArr[i] == arroneDimArr[j]) {
- arroneDimArr[i] = 1 + rand() % (size * 2);
- i = -1;
- break;
- }
- }
- }
- }
- void AutoFillArray(int **arrtwoDimArr, const int rows, const int cols) {
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- arrtwoDimArr[i][j] = 1 + rand() % (cols*rows * 2);
- }
- }
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- for (int k = 0; k < rows; k++) {
- for (int l = 0; l < cols; l++) {
- if (i == k && j == l) {
- continue;
- }
- if (arrtwoDimArr[k][l] == arrtwoDimArr[i][j]) {
- arrtwoDimArr[i][j] = 1 + rand() % (cols*rows * 2);
- k = -1;
- break;
- }
- }
- }
- }
- }
- }
- void ManuallyFillArray(int *arrtwoDimArr, const int size) {
- char answer; int i;
- for (i = 0; i < size; i++) {
- std::cout << "Введите " << i + 1 << " элемент матрицы: ";
- std::cin >> arrtwoDimArr[i];
- }
- std::cout << "Проверьте правильность ввода матрицы" << std::endl;
- while (true) {
- for (i = 0; i < size; i++) {
- std::cout << arrtwoDimArr[i] << "\t";
- }
- std::cout << "\nВсе верно?(y/n) ";
- std::cin >> answer;
- if (answer != 'y' && answer != 'n') {
- std::cout << "Вы не ответили" << std::endl;
- continue;
- }
- else if (answer == 'n') {
- std::cout << "Какой элемент матрицы изменить?" << std::endl;
- std::cout << "Введите номер стобца матрицы: ";
- std::cin >> i;
- std::cout << "Введите новое значение элемента " << i + 1 << " матрицы: ";
- std::cin >> arrtwoDimArr[i - 1];
- continue;
- }
- else {
- break;
- }
- }
- }
- void ManuallyFillArray(int **arrtwoDimArr, const int rows, const int cols) {
- char answer; int i, j;
- for (i = 0; i < rows; i++) {
- for (j = 0; j < cols; j++) {
- std::cout << "Введите " << i + 1 << ", " << j + 1 << " элемент матрицы: ";
- std::cin >> arrtwoDimArr[i][j];
- }
- }
- std::cout << "Проверьте правильность ввода матрицы" << std::endl;
- while (true) {
- for (i = 0; i < rows; i++) {
- for (j = 0; j < cols; j++) {
- std::cout << arrtwoDimArr[i][j] << "\t";
- }
- std::cout << std::endl;
- }
- std::cout << "Все верно?(y/n) ";
- std::cin >> answer;
- if (answer != 'y' && answer != 'n') {
- std::cout << "Вы не ответили" << std::endl;
- continue;
- }
- else if (answer == 'n') {
- std::cout << "Какой элемент матрицы изменить?" << std::endl;
- std::cout << "Введите номер строки матрицы: ";
- std::cin >> i;
- std::cout << "Введите номер столбца матрицы: ";
- std::cin >> j;
- std::cout << "Введите новое значение элемента " << i << ", " << j << " матрицы: ";
- std::cin >> arrtwoDimArr[i - 1][j - 1];
- continue;
- }
- else {
- break;
- }
- }
- }
- void MultArray(int *arroneDimArr, const int size, int **arrtwoDimArr, const int rows, const int cols) {
- int temp = 0;
- int *multArr = new int[cols];
- for (int j = 0; j < cols; j++) {
- for (int m = 0, i = 0; m < size, i < rows; m++, i++) {
- temp += arroneDimArr[i] * arrtwoDimArr[i][j];
- }
- multArr[j] = temp;
- temp = 0;
- }
- std::cout << "Результат умножения матрицы 1 на матрицу 2: " << std::endl;
- for (int i = 0; i < cols; i++) {
- std::cout << multArr[i] << "\t";
- }
- std::cout << std::endl;
- DeleteDynamicArray(multArr);
- }
- void MultArray(int **arrtwoDimArr_1, int **arrtwoDimArr_2, const int rows_1, const int cols_1, const int rows_2, const int cols_2) {
- int temp = 0;
- int **multArr = new int*[rows_1];
- for (int i = 0; i < rows_1; i++) {
- multArr[i] = new int[cols_2];
- }
- for (int i = 0; i < rows_1; i++) {
- for (int l = 0; l < cols_2; l++) {
- for (int j = 0, m = 0; j < rows_2, m < cols_1; j++, m++) {
- temp += arrtwoDimArr_1[i][m] * arrtwoDimArr_2[j][l];
- }
- multArr[i][l] = temp;
- temp = 0;
- }
- }
- std::cout << "Результат умножения матрицы 1 на матрицу 2: " << std::endl;
- for (int i = 0; i < rows_1; i++) {
- for (int j = 0; j < cols_2; j++) {
- std::cout << multArr[i][j] << "\t";
- }
- std::cout << std::endl;
- }
- DeleteDynamicArray(multArr, rows_1, cols_2);
- }
- void shawArr(int* oneDimArr, const int size) {
- for (int i = 0; i < size; i++) {
- std::cout << oneDimArr[i] << "\t";
- }
- #if BUG_1==1
- std::cout << "\nСумма " << size << " элементов массива равна " << sumArrVals(oneDimArr, size) << std::endl;
- #endif
- }
- void shawArr(int** twoDimArr, const int rows, const int cols) {
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- std::cout << twoDimArr[i][j] << "\t";
- }
- std::cout << std::endl;
- }
- #if BUG_1==1
- std::cout << "Сумма элементов массива " << rows << " x " << cols << " равна " << sumArrVals(twoDimArr, rows, cols) << std::endl;
- #endif
- }
- int sumArrVals(int* oneDimArr, const int size) {
- int val = 0;
- for (int i = 0; i < size; i++) {
- val = val + oneDimArr[i];
- }
- return val;
- }
- int sumArrVals(int** twoDimArr, const int rows, const int cols) {
- int val = 0;
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- val = val + twoDimArr[i][j];
- }
- }
- return val;
- }
Advertisement
Add Comment
Please, Sign In to add comment