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(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. // Функція для обміну елементів n-го рядка та n-го стовпця (арифметика покажчиків)
  24. void swap_row_and_column(int **array, int n) {
  25. for (int i = 0; i < n; i++) {
  26. int *row_ptr = *(array + n - 1) + i; // Елемент n-го рядка
  27. int *col_ptr = *(array + i) + n - 1; // Елемент n-го стовпця
  28. int temp = *row_ptr;
  29. *row_ptr = *col_ptr;
  30. *col_ptr = temp;
  31. }
  32. }
  33.  
  34. // Функція для виведення масиву на екран (індексація через покажчики)
  35. void print_array(int **array, int n) {
  36. for (int i = 0; i < n; i++) {
  37. for (int j = 0; j < n; j++) {
  38. printf("%3d ", *(*(array + i) + j));
  39. }
  40. printf("\n");
  41. }
  42. }
  43.  
  44. int main() {
  45. int n;
  46. srand(time(NULL)); // Ініціалізація генератора випадкових чисел
  47.  
  48. // Введення розмірності масиву
  49. printf("Введіть розмірність масиву n: ");
  50. scanf("%d", &n);
  51.  
  52. // Виділення пам'яті для масиву
  53. int **array = (int **)malloc(n * sizeof(int *));
  54. if (array == NULL) {
  55. printf("Помилка виділення пам'яті!\n");
  56. return 1;
  57. }
  58. for (int i = 0; i < n; i++) {
  59. *(array + i) = (int *)malloc(n * sizeof(int));
  60. if (*(array + i) == NULL) {
  61. printf("Помилка виділення пам'яті!\n");
  62. return 1;
  63. }
  64. }
  65.  
  66. // Генерація масиву випадкових чисел (індексація через покажчики)
  67. for (int i = 0; i < n; i++) {
  68. for (int j = 0; j < n; j++) {
  69. *(*(array + i) + j) = random_int(1, 20);
  70. }
  71. }
  72.  
  73. // Виведення початкового масиву
  74. printf("\nПочатковий масив:\n");
  75. print_array(array, n);
  76.  
  77. // Сортування кожного рядка за спаданням (індексація через покажчики)
  78. for (int i = 0; i < n; i++) {
  79. sort_row_descending(*(array + i), n);
  80. }
  81.  
  82. // Виведення масиву після сортування
  83. printf("\nМасив після сортування рядків за спаданням:\n");
  84. print_array(array, n);
  85.  
  86. // Обмін елементів n-го рядка та n-го стовпця (арифметика покажчиків)
  87. swap_row_and_column(array, n);
  88.  
  89. // Виведення масиву після обміну
  90. printf("\nМасив після обміну n-го рядка та n-го стовпця:\n");
  91. print_array(array, n);
  92.  
  93. // Звільнення пам'яті
  94. for (int i = 0; i < n; i++) {
  95. free(*(array + i));
  96. }
  97. free(array);
  98.  
  99. return 0;
  100. }
Success #stdin #stdout 0s 5292KB
stdin
Standard input is empty
stdout
Введіть розмірність масиву n: 
Початковий масив:

Масив після сортування рядків за спаданням:

Масив після обміну n-го рядка та n-го стовпця: