Advertisement
Qellex

lab5.2 - v6

Dec 2nd, 2022
742
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.94 KB | None | 0 0
  1. #include "stdio.h" // подключение ввода, вывода
  2. #include "locale.h" // подключение русского языка
  3. #include "stdlib.h" // подключение рандома
  4. #include "time.h"
  5. #include "malloc.h"
  6.  
  7. /*функция ввода массива с клавиатуры*/
  8. void vvodArray(int** a, int n, int m) {
  9.     printf("Введите числа (%i): ", n);
  10.     for (int i = 0; i < n; i++) {
  11.         for (int j = 0; j < m; j++)
  12.             scanf_s("%i", &a[i][j]);
  13.     }
  14. }
  15.  
  16.  
  17. /*функция заполнения массива случайными числами*/
  18. void randomArray(int** a, int n, int m) {
  19.     srand(clock());
  20.     for (int i = 0; i < n; i++) {
  21.         for (int j = 0; j < m; j++)
  22.             a[i][j] = rand() % 100;
  23.     }
  24. }
  25.  
  26.  
  27. /*функция вывода массива*/
  28. void vivodArray(int** a, int n, int m) {
  29.     for (int i = 0; i < n; i++) {
  30.         for (int j = 0; j < m; j++)
  31.             printf("%i ", a[i][j]);
  32.         printf("\n");
  33.     }
  34. }
  35.  
  36. int main()
  37. {
  38.     setlocale(LC_ALL, "rus");
  39.     int n, m;// размерность матрицы
  40.     /*ввод размера матрицы*/
  41.     printf("Введите размер матрицы NxM: ");
  42.     do {
  43.         scanf_s("%i%i", &n, &m);
  44.         if ((n <= 0) || (m <= 0))
  45.             printf("Повторите ввод, введите положительное число: ");
  46.     } while ((n <= 0) || (m <= 0));
  47.  
  48.     /*выделение памяти под массив*/
  49.     int** a = (int**)malloc(n * sizeof(int**));
  50.     for (int x = 0; x < m; x++) {
  51.         a[x] = (int*)malloc(m * sizeof(int*));
  52.     }
  53.  
  54.  
  55.     printf("Выберите способ ввода массива:\n1-ввод с клавиатуры\n2-заполнение массива случайными числами\n");
  56.  
  57.     /*выбор способа ввода массива*/
  58.     int f;
  59.     do {
  60.         scanf_s("%i", &f);
  61.         if ((f != 1) && (f != 2))
  62.             printf("Введите только 1 или 2: ");
  63.     } while ((f != 1) && (f != 2));
  64.     if (f == 1)
  65.         vvodArray(a, n, m);
  66.     else
  67.         randomArray(a, n, m);
  68.  
  69.     printf("\nИсходная матрица\n");
  70.     vivodArray(a, n, m);
  71.  
  72.     int sum; // переменная для суммы элеметов Apq
  73.     // будем идти с нижнего правого угла в верхней левый
  74.     for (int i = n-1; i >= 0; i--) {
  75.         for (int j = m-1; j >= 0; j--) {
  76.             sum = 0; // обнуляем сумму
  77.             // считаем сумму элементов Apq
  78.             for (int p = 0; p <= i; p++) {
  79.                 for (int q = 0; q <= j; q++) {
  80.                     sum = sum + a[p][q];
  81.                 }
  82.             }
  83.             a[i][j] = sum; // заменяем переменную
  84.         }
  85.     }
  86.     printf("\nГотовая матрица\n");
  87.     vivodArray(a, n, m);
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement