/**
* @file Main.cpp
* @autor Коваленко І. В. 515б
* @date 21.03.2023
* @brief Лабораторна робота №3, варіант 11
*
* Використання масивів. Завдання 1
*/
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#include "Module.h"
int main(void) {
//підключення ключів
setlocale(LC_ALL, "Ukr");
srand(time(NULL));
//створення змінних
int size = 0;
char fill = ' ';
int arr[MAX_SIZE] = {0};
//введення розміру масиву
printf("Введіть розмір масиву (2-100): ");
int j = 0;
do {
j++;
if (j > 1)
printf("Помилка. Введіть розмір масиву (2-100): ");
scanf("%ld", &size);
} while (size <2 || size > 100);
//введення типу заповнення
printf("Введіть тип заповнення масиву:\n\t\tf - заповнення користувачем\n\t\tr - псевдорандомне заповнненя\n\n");
int i = 0;
do {
i++;
if (i > 1)
printf("Помилка. Введіть:\n\t\tf - заповнення користувачем\n\t\tr - псевдорандомне заповнненя\n\n");
fill = getsymb();
} while (fill != 'f' && fill != 'r');
//заповнення масиву
if (fill == 'f') {
for (int i = 0; i < size; i++) {
scanf("%i", &arr[i]);
}
}
else {
for (int i = 0; i < size; i++) {
arr[i] = rand() % 10;
}
}
printf("Ваш масив:");
for (int i = 0; i < size; i++) {
printf(" %i", arr[i]);
}
printf("\n\n");
nesquik(arr, size, 0, size - 1);
printf("Ваш відсортований масив:");
for (int i = 0; i < size; i++) {
printf(" %i", arr[i]);
}
printf("\n\n");
//завершення програми
printf("\n\nЗавершення програми.");
}
#define PRIVATE static
#define PUBLIC
#define END_PROGRAM 1
#define ERROR 0
#define MAX_SIZE 100
//прототипы функций
char getsymb();
void nesquik(int Array[], unsigned int N, int L, int R);
#include <stdio.h>
#include "Module.h"
//в мене getchar(), працював не так як я хотів, я написав свій...
PUBLIC char getsymb() {
char Csymb = ' ';
do {
scanf("%c", &Csymb);
} while (Csymb == '\n');
return Csymb;
}
//сортування
PUBLIC void nesquik(int Array[], unsigned int N, int L, int R) {
//створення змынних
int iter = L, jter = R;
//знаходження середнього числа
int middle = (R + L) / 2;
//утворення середньої та допоміжної змінної
int x = Array[middle];
int w;
//цикл сортування
do {
//знаходження в лівій границі число більше, ніж середнє число
while (Array[iter] > x) {
iter++;
}
//знаходження в правій границі число меньше, ніж середнє число
while (x > Array[jter]) {
jter--;
}
//сортування
if (iter <= jter) {
w = Array[iter];
Array[iter] = Array[jter];
Array[jter] = w;
iter++;
jter--;
}
}while (iter < jter);
//рекурсія лівого єлемента
if (L < jter) {
nesquik(Array, N, L, jter);
}
//рекурсія правого єлемента
if (iter < R) {
nesquik(Array, N, iter, R);
}
}