Advertisement
Underhing

ЛАБ 10/VER2.0

Apr 7th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. ///ФУНКЦИЯ ПЕЧАТЬ МАТРИЦЫ
  4. void printmatrix(int **a, int n, int m, int i , int j, int new){
  5.  
  6.   if(new==0){
  7.      printf("\033[1;33m---{ ВВЕДЕННАЯ МАТРИЦА }---\033[0m\n");
  8.    }
  9.     else
  10.      {
  11.        printf("\033[1;33m---{ НОВАЯ МАТРИЦА }---\033[0m\n");
  12.        }
  13.         for(i=0; i<n; i++)
  14.         {
  15.             for(j=0; j<m; j++)
  16.                 printf("%d\t", a[i][j]);
  17.                 printf("\n");
  18.         }
  19.  
  20. }
  21. ///ФУНКЦИЯ ПОИСКА СЕРДЛОВЫХ ТОЧЕК
  22. void serdldot(int **a, int n, int m, int i , int j)
  23. {
  24.  int min[n];
  25.  int max[m];
  26.  
  27.  
  28.     min[0] = a[0][0];
  29.     max[0] = a[0][0];
  30.     for (i = 0; i < n; i++)
  31.     {
  32.         for (j = 0; j < m; j++)
  33.         {
  34.             if (a[i][j] < min[i]) min[i] = a[i][j];
  35.             if (a[i][j] > max[j]) max[j] = a[i][j];
  36.         }
  37.     }
  38.  
  39.  
  40.     for (int i = 0; i < n; i++)
  41.     {
  42.         for (int j = 0; j < m; j++)
  43.         {
  44.             if ((a[i][j] == min[i]) && (a[i][j] == max[j]))
  45.             {
  46.                 printf("Найдена седловая точка: строка %d, столбец %d\n",i, j);
  47.                
  48.             }
  49.         }
  50.     }
  51. }
  52. ///ФУНКЦИЯ ПРОВЕРКИ ОТРИЦАТЕЛЬНЫХ ЭЛЕМЕНТОВ В СТРОКАХ
  53. void negativestroke(int **a, int n, int m, int i , int j){
  54. int summ = 0;
  55. printf("Все строки с отрицательными значениями:\n");
  56.         for(i=0; i<n; i++)
  57.             for(j=0; j<m; j++)
  58.             {
  59.  
  60.                if(a[i][j] < 0)
  61.                 {
  62.  
  63.               for(j=0; j<m; j++)
  64.                {
  65.              summ += a[i][j];
  66.                }
  67.  
  68.                 printf("# Строка %d, сумма элементов: %d \n", i+1, summ);
  69.                   }
  70.             }
  71.     if(summ==0){
  72.  
  73.     printf("\033[1;33m[Уведомление]\033[0m В данной матрице нет строк с отрицательными значениями\n");
  74.  
  75.     }
  76.  
  77. }
  78. ///ФУНКЦИЯ ПОИСКА КРАТНЫХ ЭЛЕМЕНТОВ k
  79. void kratno(int **a, int n, int m, int i , int j){
  80. int k=0, counter=0, max=0;
  81.  
  82.  
  83.  if(m!=n){
  84.  printf("Матрица не является квадратной\n");
  85.  }else
  86.   {
  87.     printf("Введите число k: ");
  88.     scanf("%d",&k);
  89.  
  90.     for(i=0; i<n; i++)
  91.     {
  92.       for(j=0; j<m; j++)
  93.         {
  94.            if((a[i][j]%k) == 0){
  95.              counter++;
  96.             if(a[i][j]>max)
  97.              {
  98.              max= a[i][j];
  99.              }
  100.  
  101.             }
  102.  
  103.  
  104.         }
  105.      }
  106.  
  107.  
  108.    }
  109. printf("Число элементов кратных k: %d\n",counter);
  110. printf("Наибольший из кратных элементов: %d\n",max);
  111. }
  112. ///ФУНКЦИЯ ЗАМЕНЫ МАКСИМАЛЬНОГО ЭЛЕМЕНТА
  113. void maxelementchange(int **a, int n, int m, int i , int j){
  114. int max=0, min=a[0][0], id_x=0, id_y=0, id_xx=0, id_yy=0, temp=0;
  115. for(i=0; i<n; i++)
  116.     {
  117.       for(j=0; j<m; j++)
  118.        {
  119.            if(a[i][j] > max){
  120.             max = a[i][j];
  121.             id_x = i;
  122.             id_y = j;
  123.              }
  124.            
  125.             if(a[i][j] < min){
  126.             min = a[i][j];
  127.             id_xx = i;
  128.             id_yy = j;
  129.              }
  130.  
  131.  
  132.        }
  133.      }
  134.  
  135. temp = a[id_x][id_y];
  136. a[id_x][id_y]=a[id_xx][id_yy];
  137. a[id_xx][id_yy]= temp;
  138. printf("Максимальный элемент массива: %d\n",max);
  139. printf("Минимальный элемент массива: %d\n",min);
  140. printmatrix(a, n, m, i , j, 1);
  141. }
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148. /////ГЛАВНАЯ ЧАСТЬ ПРОГРАММЫ
  149.     int main()
  150.     {
  151.         int i,j,k,n,m, todo;
  152.         printf ("\033[1;33mПРОГРАММА ДЛЯ ОБРАБОТКИ МАТРИЦЫ\033[0m\n");
  153.         printf ("(1) Введите количество строк: ");
  154.         scanf("%d", &n);
  155.         printf ("(2) Введите количество столбцов: ");
  156.         scanf("%d", &m);
  157.  
  158.         int **a = (int **) malloc(n * sizeof(int *));
  159.     for (i = 0; i < n; i++)
  160.     {
  161.     a[i] = (int *) malloc(m * sizeof(int));
  162.     }
  163.        
  164.     for(i=0; i<n; i++)
  165.     for(j=0; j<m; j++)
  166.     {
  167.  
  168.  
  169.     printf("Введите [%d][%d]= ", i+1,j+1);
  170.     scanf("%d",&a[i][j]);
  171.  
  172.  
  173.     }
  174. printmatrix(a, n, m, i , j, 0);
  175. printf("Доступные команды:\n");
  176. printf("[1] Найти сумму элементов в строках, где есть хотя бы 1 отриц. элемент\n");
  177. printf("[2] Найти номера всех сердловых точек матрицы\n");
  178. printf("[3] Найти число элементов кратных k и наибольших из них\n");
  179. printf("[4] Найти максимальные и минимальные элементы и поменять их местами\n");
  180.  
  181. printf("Выберите действие: ");
  182. scanf("%d", &todo);
  183.  
  184. switch (todo) {
  185. case 1:
  186. negativestroke(a, n, m, i , j);
  187. break;
  188. case 2:
  189. serdldot(a, n, m, i , j);
  190. break;
  191. case 3:
  192. kratno(a, n, m, i , j);
  193. break;
  194. case 4:
  195. maxelementchange(a, n, m, i , j);
  196. break;
  197. default:
  198. printf("Введенной команды не существует\n");
  199. break;
  200. }
  201.  
  202. ///ОЧИСТКА ПАМЯТИ МАССИВА
  203. for (i = 0; i < n; i++)
  204. {
  205.  free(a[i]);
  206. }
  207. free(a);
  208.  
  209.  
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement