Advertisement
codegod313

Mul_m (v2.0)

Aug 6th, 2020
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.79 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <cstdlib>
  3. #include <locale.h>
  4.  
  5.  
  6.  
  7. void inputer(int &a) // функция безотказного ввода
  8. {
  9.     while (!scanf("%d",&a) && a < 0) // если не ввели или значение меньше нуля
  10.     {
  11.         fflush(stdin); // чистим буфер
  12.         printf("Enter again\n");
  13.     }
  14. }
  15.  
  16. void matrix_in(int a[100][100], int n, int m) // функция ввода матрицы
  17. {
  18.     for (int i = 0; i < n; i++)
  19.     {
  20.         for (int j = 0; j < m; j++)
  21.             inputer(a[i][j]);
  22.     }
  23. }
  24.  
  25. void matrix_out(int a[100][100], int n, int m)// функция вывода
  26. {
  27.     for (int i = 0; i < n; i++)
  28.     {
  29.         for (int j = 0; j < m; j++)
  30.         {
  31.             printf("%d ", a[i][j]);
  32.         }
  33.         printf("\n");
  34.     }
  35. }
  36.  
  37. int main()
  38. {
  39.     setlocale(LC_ALL, "Russian"); // Подключаем русиш
  40.     int n1, n2, m1, m2; // размерности матриц
  41.     printf("Введите размерности матриц\n");
  42.     inputer(n1); //
  43.     inputer(m1); // вводим размерности матриц
  44.     inputer(n2); //
  45.     inputer(m2); //
  46.     if (m1 != n2) // проверяем можно ли перемноить матрицы (это из матеши)
  47.     {
  48.         printf("Перемножение невозможно\n");
  49.         return 0;
  50.     }
  51.     printf("Введите первую матрицу\n");
  52.     int a[100][100]; // создаём первую матрицу
  53.     matrix_in(a, n1, m1); // вводим первую матрицу
  54.     printf("Введите вторую матрицу\n");
  55.     int b[100][100]; // создаём вторую матрицу
  56.     matrix_in(b, n2, m2); // вводим вторую матрицу
  57.     int c[100][100]; // матрица-результат
  58.     int i_c = 0, j_c = 0; // эти i и j указывают на просчитываемый элемент в результируюцей матрице
  59.     for (int i = 0; i < n1; i++) // цикл по строкам матрицы a
  60.     {
  61.         for (int k = 0; k < m2; k++) // цикл по столбцам матрицы b
  62.         {
  63.             int sum = 0;
  64.             for (int j = 0; j < m1; j++) // цикл по столбцам матрицы a
  65.             {
  66.                 sum += a[i][j] * b[j][k]; // перемножаем каждую строку матрицы а на каждый столбец матрицы b (k - столбец матрицы b)
  67.             }
  68.             c[i_c][j_c++] = sum; // записыаем результат перемножения в результирующую матрицу
  69.             if (j_c == m2) //  если мы дошли до правой границы результирующей матрицы
  70.             {
  71.                 i_c++; // переводим указатели на начало следующей строки
  72.                 j_c = 0;
  73.             }
  74.         }
  75.     }
  76.     printf("Готовая матрца\n");
  77.     matrix_out(c, n1, m2); // вывод готовой матрицы
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement