лабораторна 4 завдання 1

Run Settings
LanguageC
Language Version
Run Command
/** * @file main.c * @author Нездоймишапка А.О., гр. 515б * @date 13 березня 2024 * @brief Лабораторна робота № 4, варіант 15 * * Функції. Швидке сортування. Робота з відлагоджувачем. Завдання 1 */ #include <stdio.h> #include <stdlib.h> #include <time.h> #include <locale.h> #define N 10 // Функція швидкого сортування void quicksort(int a[], int low, int high); // Функція розділу масива int split(int a[], int low, int high); // Функція для заповнення масиву випадковими числами void fill_random(int arr[], int n) { srand((unsigned int)time(NULL)); // Приведення time_t до unsigned int for (int i = 0; i < n; i++) { arr[i] = rand() % 100; // обмеження чисел до 0-99 для простоти } } // Функція для введення масиву користувачем з перевіркою на коректність введення void fill_from_user(int arr[], int n) { char buffer[100]; // буфер для зчитування рядка int success; // змінна для перевірки успішності перетворення printf("Введіть %d чисел:\n", n); for (int i = 0; i < n; i++) { do { printf("Введіть число %d: ", i + 1); if (fgets(buffer, sizeof(buffer), stdin) == NULL) { printf("Помилка зчитування. Спробуйте ще раз.\n"); success = 0; // не вдалося зчитати рядок } else { success = sscanf(buffer, "%d", &arr[i]); // спроба перетворення рядка в число if (success != 1) { printf("Некоректне введення. Введіть ціле число.\n"); // Очищення буфера введення до нового рядка int c; while ((c = getchar()) != '\n' && c != EOF); } } } while (success != 1); } } int main() { int a[N], i, choice; printf("Оберіть метод заповнення масиву:\n"); printf("1. Випадковими числами\n"); printf("2. Введенням користувачем\n"); scanf("%d", &choice); // Очищення залишкового символу нового рядка після scanf int c; while ((c = getchar()) != '\n' && c != EOF); switch (choice) { case 1: fill_random(a, N); break; case 2: fill_from_user(a, N); break; default: printf("Некоректний вибір.\n"); return 1; } printf("Вхідний масив: "); for (i = 0; i < N; i++) printf("%d ", a[i]); printf("\n"); quicksort(a, 0, N - 1); printf("Відсортований масив за спаданням: "); for (i = 0; i < N; i++) printf("%d ", a[i]); printf("\n"); return 0; } // Функція швидкого сортування void quicksort(int a[], int low, int high) { int middle; if (low >= high) return; middle = split(a, low, high); quicksort(a, low, middle - 1); quicksort(a, middle + 1, high); } // Функція розділу масива int split(int a[], int low, int high) { int part_element = a[low]; for (;;) { while (low < high && part_element >= a[high]) high--; if (low >= high) break; a[low++] = a[high]; while (low < high && a[low] >= part_element) low++; if (low >= high) break; a[high--] = a[low]; } a[high] = part_element; return high; }
Editor Settings
Theme
Key bindings
Full width
Lines