Advertisement
Qellex

5.2 в - 7

Dec 9th, 2021
560
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.00 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "locale.h"
  3. #include "stdlib.h"
  4. #include "time.h"
  5.  
  6.  
  7. // ввод чисел вручную
  8. void input_arr(int** a, int n, int m) {
  9.     printf("Введите числа не больше 100: ");
  10.     for (int i = 0; i < n; i++) {
  11.         for (int j = 0; j < m; j++)
  12.             do {
  13.                 scanf_s("%i", &a[i][j]);
  14.             } while ((a[i][j] < 0) || (a[i][j] > 100));
  15.     }
  16. }
  17.  
  18. // ввод чисел рандомно
  19. void inputrand_arr(int** a, int n, int m) {
  20.     srand(clock());
  21.     for (int i = 0; i < n; i++) {
  22.         for (int j = 0; j < m; j++)
  23.             a[i][j] = rand() % 10;
  24.     }
  25. }
  26.  
  27. // вывод массива
  28. void output(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. // смотрит является ли это число максимум вокруг себя, если нет то функция возращает нуль и зануляет элемент
  37. int maximum(int** a, int n, int m, int i, int j) {
  38.     // проверяет элементы вокруг себя поле 3x3
  39.     for (int x = i - 1; x < i + 2; x++) {
  40.         for (int y = j - 1; y < j + 2; y++) {
  41.             if (x >= 0 && y >= 0 && x < n && y < m && a[x][y] >= a[i][j] && (i != x || j != y)) { // смотрим выходим ли мы пределы массива
  42.                 return 0;
  43.             }
  44.         }
  45.     }
  46.     return 1;
  47. }
  48.  
  49.  
  50.  
  51.  
  52. int main() {
  53.  
  54.     setlocale(LC_ALL, "rus");
  55.  
  56.     int n; int m; // размер массива
  57.     printf("Введите размер матрицы nxm: ");
  58.     do {
  59.         scanf_s("%d%d", &n, &m);
  60.         if ((n <= 0) || (m <= 0))
  61.             printf("Повторите ввод, введите положительное число: ");
  62.     } while ((n <= 0) || (m <= 0));
  63.  
  64.     // создаем массив
  65.     int** a = (int**)malloc(n * sizeof(int**));
  66.     for (int i = 0; i < n; i++) {
  67.         a[i] = (int*)malloc(n * sizeof(int*));
  68.     }
  69.  
  70.  
  71.     printf("Выберите способ ввода массива:\n1-ввод с клавиатуры\n2-заполнение массива случайными числами\n");
  72.  
  73.     int f;
  74.     do {
  75.         scanf_s("%i", &f);
  76.         if ((f != 1) && (f != 2))
  77.             printf("Введите только 1 или 2: ");
  78.     } while ((f != 1) && (f != 2));
  79.     if (f == 1)
  80.         input_arr(a, n, m);
  81.     else
  82.         inputrand_arr(a, n, m);
  83.  
  84.  
  85.     printf("\nИсходная матрица\n");
  86.     output(a, n, m);
  87.  
  88.     // проверям каждый элемент
  89.     for (int i = 0; i < n; i++) {
  90.         for (int j = 0; j < m; j++) {
  91.             if (maximum(a, n, m, i, j) == 0) { // если возращает 0, то не меняем, если 1 то зануляем
  92.                 a[i][j] = 0;
  93.             }
  94.         }
  95.     }
  96.  
  97.  
  98.     printf("\n\nГотовая матрица\n");
  99.     output(a, n, m);
  100.  
  101.  
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement