#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Функція для генерації випадкового числа в діапазоні [min, max]
int random_int(int min, int max) {
return min + rand() % (max - min + 1);
}
// Функція для сортування рядка масиву за спаданням (індексація через покажчики)
void sort_row_descending(int *row, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (*(row + j) < *(row + j + 1)) {
int temp = *(row + j);
*(row + j) = *(row + j + 1);
*(row + j + 1) = temp;
}
}
}
}
// Функція для обміну елементів n-го рядка та n-го стовпця (арифметика покажчиків)
void swap_row_and_column(int **array, int n) {
for (int i = 0; i < n; i++) {
int *row_ptr = *(array + n - 1) + i; // Елемент n-го рядка
int *col_ptr = *(array + i) + n - 1; // Елемент n-го стовпця
int temp = *row_ptr;
*row_ptr = *col_ptr;
*col_ptr = temp;
}
}
// Функція для виведення масиву на екран (індексація через покажчики)
void print_array(int **array, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%3d ", *(*(array + i) + j));
}
printf("\n");
}
}
int main() {
int n;
srand(time(NULL)); // Ініціалізація генератора випадкових чисел
// Введення розмірності масиву
printf("Введіть розмірність масиву n: ");
scanf("%d", &n);
// Виділення пам'яті для масиву
int **array = (int **)malloc(n * sizeof(int *));
if (array == NULL) {
printf("Помилка виділення пам'яті!\n");
return 1;
}
for (int i = 0; i < n; i++) {
*(array + i) = (int *)malloc(n * sizeof(int));
if (*(array + i) == NULL) {
printf("Помилка виділення пам'яті!\n");
return 1;
}
}
// Генерація масиву випадкових чисел (індексація через покажчики)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
*(*(array + i) + j) = random_int(1, 20);
}
}
// Виведення початкового масиву
printf("\nПочатковий масив:\n");
print_array(array, n);
// Сортування кожного рядка за спаданням (індексація через покажчики)
for (int i = 0; i < n; i++) {
sort_row_descending(*(array + i), n);
}
// Виведення масиву після сортування
printf("\nМасив після сортування рядків за спаданням:\n");
print_array(array, n);
// Обмін елементів n-го рядка та n-го стовпця (арифметика покажчиків)
swap_row_and_column(array, n);
// Виведення масиву після обміну
printf("\nМасив після обміну n-го рядка та n-го стовпця:\n");
print_array(array, n);
// Звільнення пам'яті
for (int i = 0; i < n; i++) {
free(*(array + i));
}
free(array);
return 0;
}