/**
* @file laba5_2.c
* @author Нездоймишпка А.О., гр. 515б
* @date 27 березня 2024
* @brief Лабораторна робота № 5
*
* Застосування вказівників. Завдання 2
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>
#include <locale.h>
// Функція для знаходження двох найменших непарних елементів масиву
void find_two_smallest_odds(int* array, int size, int* smallest1, int* smallest2) {
*smallest1 = INT_MAX;
*smallest2 = INT_MAX;
int* ptr = array;
for (int i = 0; i < size; i++) {
if (*ptr % 2 != 0) {
if (*ptr < *smallest1) {
*smallest2 = *smallest1;
*smallest1 = *ptr;
}
else if (*ptr < *smallest2) {
*smallest2 = *ptr;
}
}
ptr++;
}
// Якщо не знайшли достатньої кількості непарних чисел, встановлюємо значення в 0
if (*smallest1 == INT_MAX) *smallest1 = 0;
if (*smallest2 == INT_MAX) *smallest2 = 0;
}
// Функція для введення масиву користувачем
int input_array(int* array, int size) {
setlocale(LC_ALL, "ukr");
int* ptr = array;
printf("Введіть %d елементів: ", size);
for (int i = 0; i < size; i++) {
if (scanf("%d", ptr) != 1) {
printf("Невірний ввід. Будь ласка, введіть цілі числа.\n");
while (getchar() != '\n'); // Очищення буфера введення
exit(1); // Повертає 0 у разі помилки введення
}
ptr++;
}
while (getchar() != '\n'); // Очищення буфера введення після завершення циклу введення
return 1;
}
// Функція для генерації випадкового масиву
void generate_random_array(int* array, int size) {
srand(time(0)); // Seed для генерації випадкових чисел
int* ptr = array;
for (int i = 0; i < size; i++) {
*ptr = rand() % 100; // Випадкові числа від 0 до 99
ptr++;
}
}
int main() {
setlocale(LC_ALL, "ukr");
int size;
int choice;
printf("Введіть розмір масиву: ");
scanf("%d", &size);
int* array = (int*)malloc(size * sizeof(int)); // Виділення пам'яті для масиву
if (array == NULL) {
printf("Помилка виділення пам'яті\n");
return 1;
}
int smallest1, smallest2;
printf("Виберіть варіант:\n");
printf("1. Ввести масив вручну\n");
printf("2. Створити випадковий масив\n");
printf("Введіть свій вибір: ");
scanf("%d", &choice);
if (choice == 1) {
input_array(array, size);
}
else if (choice == 2) {
generate_random_array(array, size);
printf("Згенерований масив: ");
int* ptr = array;
for (int i = 0; i < size; i++) {
printf("%d ", *ptr);
ptr++;
}
printf("\n");
}
else {
printf("Невірне значення.\n");
free(array); // Звільнення виділеної пам'яті
return 1;
}
find_two_smallest_odds(array, size, &smallest1, &smallest2);
printf("Два найменших непарних числа: %d та %d\n", smallest1, smallest2);
free(array); // Звільнення виділеної пам'яті
return 0;
}