#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_index(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;
}
}
}
}
// Сортування рядка за спаданням (через арифметику покажчиків)
void sort_row_descending_pointer(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_index(int **array, int n) {
for (int i = 0; i < n; i++) {
int temp = array[n - 1][i]; // Елемент n-го рядка
array[n - 1][i] = array[i][n - 1]; // Елемент n-го стовпця
array[i][n - 1] = temp;
}
}
// Обмін елементів n-го рядка та n-го стовпця (через арифметику покажчиків)
void swap_row_and_column_pointer(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_index(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");
}
}
// Виведення масиву на екран (через арифметику покажчиків)
void print_array_pointer(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_index(array, n);
// Сортування кожного рядка за спаданням (через індекси)
for (int i = 0; i < n; i++) {
sort_row_descending_index(array[i], n);
}
// Виведення масиву після сортування (через індекси)
printf("\nМасив після сортування рядків за спаданням (індекси):\n");
print_array_index(array, n);
// Обмін елементів n-го рядка та n-го стовпця (через індекси)
swap_row_and_column_index(array, n);
// Виведення масиву після обміну (через індекси)
printf("\nМасив після обміну n-го рядка та n-го стовпця (індекси):\n");
print_array_index(array, n);
// Генерація масиву випадкових чисел (через арифметику покажчиків)
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_pointer(array, n);
// Сортування кожного рядка за спаданням (через арифметику покажчиків)
for (int i = 0; i < n; i++) {
sort_row_descending_pointer(*(array + i), n);
}
// Виведення масиву після сортування (через арифметику покажчиків)
printf("\nМасив після сортування рядків за спаданням (арифметика покажчиків):\n");
print_array_pointer(array, n);
// Обмін елементів n-го рядка та n-го стовпця (через арифметику покажчиків)
swap_row_and_column_pointer(array, n);
// Виведення масиву після обміну (через арифметику покажчиків)
printf("\nМасив після обміну n-го рядка та n-го стовпця (арифметика покажчиків):\n");
print_array_pointer(array, n);
// Звільнення пам'яті
for (int i = 0; i < n; i++) {
free(array[i]);
}
free(array);
return 0;
}