Advertisement
Underhing

ЛАБ 10/VER1.0

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