fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. // Функція для генерації випадкового числа в діапазоні [min, max]
  6. int random_int(int min, int max) {
  7. return min + rand() % (max - min + 1);
  8. }
  9.  
  10. // Сортування рядка за спаданням (через індекси)
  11. void sort_row_descending_index(int *row, int n) {
  12. for (int i = 0; i < n - 1; i++) {
  13. for (int j = 0; j < n - i - 1; j++) {
  14. if (row[j] < row[j + 1]) {
  15. int temp = row[j];
  16. row[j] = row[j + 1];
  17. row[j + 1] = temp;
  18. }
  19. }
  20. }
  21. }
  22.  
  23. // Сортування рядка за спаданням (через арифметику покажчиків)
  24. void sort_row_descending_pointer(int *row, int n) {
  25. for (int i = 0; i < n - 1; i++) {
  26. for (int j = 0; j < n - i - 1; j++) {
  27. if (*(row + j) < *(row + j + 1)) {
  28. int temp = *(row + j);
  29. *(row + j) = *(row + j + 1);
  30. *(row + j + 1) = temp;
  31. }
  32. }
  33. }
  34. }
  35.  
  36. // Обмін елементів n-го рядка та n-го стовпця (через індекси)
  37. void swap_row_and_column_index(int **array, int n) {
  38. for (int i = 0; i < n; i++) {
  39. int temp = array[n - 1][i]; // Елемент n-го рядка
  40. array[n - 1][i] = array[i][n - 1]; // Елемент n-го стовпця
  41. array[i][n - 1] = temp;
  42. }
  43. }
  44.  
  45. // Обмін елементів n-го рядка та n-го стовпця (через арифметику покажчиків)
  46. void swap_row_and_column_pointer(int **array, int n) {
  47. for (int i = 0; i < n; i++) {
  48. int *row_ptr = *(array + n - 1) + i; // Елемент n-го рядка
  49. int *col_ptr = *(array + i) + n - 1; // Елемент n-го стовпця
  50. int temp = *row_ptr;
  51. *row_ptr = *col_ptr;
  52. *col_ptr = temp;
  53. }
  54. }
  55.  
  56. // Виведення масиву на екран (через індекси)
  57. void print_array_index(int **array, int n) {
  58. for (int i = 0; i < n; i++) {
  59. for (int j = 0; j < n; j++) {
  60. printf("%3d ", array[i][j]);
  61. }
  62. printf("\n");
  63. }
  64. }
  65.  
  66. // Виведення масиву на екран (через арифметику покажчиків)
  67. void print_array_pointer(int **array, int n) {
  68. for (int i = 0; i < n; i++) {
  69. for (int j = 0; j < n; j++) {
  70. printf("%3d ", *(*(array + i) + j));
  71. }
  72. printf("\n");
  73. }
  74. }
  75.  
  76. int main() {
  77. int n;
  78. srand(time(NULL)); // Ініціалізація генератора випадкових чисел
  79.  
  80. // Введення розмірності масиву
  81. printf("Введіть розмірність масиву n: ");
  82. scanf("%d", &n);
  83.  
  84. // Виділення пам'яті для масиву
  85. int **array = (int **)malloc(n * sizeof(int *));
  86. if (array == NULL) {
  87. printf("Помилка виділення пам'яті!\n");
  88. return 1;
  89. }
  90. for (int i = 0; i < n; i++) {
  91. array[i] = (int *)malloc(n * sizeof(int));
  92. if (array[i] == NULL) {
  93. printf("Помилка виділення пам'яті!\n");
  94. return 1;
  95. }
  96. }
  97.  
  98. // Генерація масиву випадкових чисел (через індекси)
  99. for (int i = 0; i < n; i++) {
  100. for (int j = 0; j < n; j++) {
  101. array[i][j] = random_int(1, 20);
  102. }
  103. }
  104.  
  105. // Виведення початкового масиву (через індекси)
  106. printf("\nПочатковий масив (індекси):\n");
  107. print_array_index(array, n);
  108.  
  109. // Сортування кожного рядка за спаданням (через індекси)
  110. for (int i = 0; i < n; i++) {
  111. sort_row_descending_index(array[i], n);
  112. }
  113.  
  114. // Виведення масиву після сортування (через індекси)
  115. printf("\nМасив після сортування рядків за спаданням (індекси):\n");
  116. print_array_index(array, n);
  117.  
  118. // Обмін елементів n-го рядка та n-го стовпця (через індекси)
  119. swap_row_and_column_index(array, n);
  120.  
  121. // Виведення масиву після обміну (через індекси)
  122. printf("\nМасив після обміну n-го рядка та n-го стовпця (індекси):\n");
  123. print_array_index(array, n);
  124.  
  125. // Генерація масиву випадкових чисел (через арифметику покажчиків)
  126. for (int i = 0; i < n; i++) {
  127. for (int j = 0; j < n; j++) {
  128. *(*(array + i) + j) = random_int(1, 20);
  129. }
  130. }
  131.  
  132. // Виведення початкового масиву (через арифметику покажчиків)
  133. printf("\nПочатковий масив (арифметика покажчиків):\n");
  134. print_array_pointer(array, n);
  135.  
  136. // Сортування кожного рядка за спаданням (через арифметику покажчиків)
  137. for (int i = 0; i < n; i++) {
  138. sort_row_descending_pointer(*(array + i), n);
  139. }
  140.  
  141. // Виведення масиву після сортування (через арифметику покажчиків)
  142. printf("\nМасив після сортування рядків за спаданням (арифметика покажчиків):\n");
  143. print_array_pointer(array, n);
  144.  
  145. // Обмін елементів n-го рядка та n-го стовпця (через арифметику покажчиків)
  146. swap_row_and_column_pointer(array, n);
  147.  
  148. // Виведення масиву після обміну (через арифметику покажчиків)
  149. printf("\nМасив після обміну n-го рядка та n-го стовпця (арифметика покажчиків):\n");
  150. print_array_pointer(array, n);
  151.  
  152. // Звільнення пам'яті
  153. for (int i = 0; i < n; i++) {
  154. free(array[i]);
  155. }
  156. free(array);
  157.  
  158. return 0;
  159. }
Success #stdin #stdout 0s 5280KB
stdin
3
stdout
Введіть розмірність масиву n: 
Початковий масив (індекси):
 11   3  16 
 20  11   5 
  3   6   7 

Масив після сортування рядків за спаданням (індекси):
 16  11   3 
 20  11   5 
  7   6   3 

Масив після обміну n-го рядка та n-го стовпця (індекси):
 16  11   7 
 20  11   6 
  3   5   3 

Початковий масив (арифметика покажчиків):
 16  15  13 
  4  12   6 
  3   4   8 

Масив після сортування рядків за спаданням (арифметика покажчиків):
 16  15  13 
 12   6   4 
  8   4   3 

Масив після обміну n-го рядка та n-го стовпця (арифметика покажчиків):
 16  15   8 
 12   6   4 
 13   4   3