diff --git a/.DS_Store b/.DS_Store index 0cdd4968..cdab90f5 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Kovalko Maxim - Homework 4 - Variant 1/main.cpp b/Kovalko Maxim - Homework 4 - Variant 1/main.cpp new file mode 100644 index 00000000..0b0a9277 --- /dev/null +++ b/Kovalko Maxim - Homework 4 - Variant 1/main.cpp @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +// Вывод вектора в файл +void print_vector(const string& title, const vector& vec, ofstream& output_file) { + output_file << "\n--- " << title << " ---\n"; + if (vec.empty()) { + output_file << "(Вектор пуст)\n"; + return; + } + // Используем std::copy и ostream_iterator, чтобы избежать циклов for/while + ostream_iterator out(output_file, " "); + cout << "Элементы: "; // Для консольного вывода + std::copy(vec.begin(), vec.end(), out); + output_file << "\n"; +} + +// Вывод значения в файл +template +void write_result(ofstream& output_file, const string& label, T value) { + output_file << "Результат " << label << ": " << value << endl; +} + +int main() { + const string OUTPUT_FILE = "output.txt"; + ofstream output_file(OUTPUT_FILE); + + if (!output_file.is_open()) { + cerr << "Ошибка: Не удалось создать файл " << OUTPUT_FILE << "." << endl; + return 1; + } + + // Генерация случайного вектора + const int VECTOR_SIZE = 20; + vector data(VECTOR_SIZE); + + // Генератор случайных чисел + std::random_device rd; + std::mt19937 generator(rd()); + // Диапазон: [-50, 100] + std::uniform_int_distribution<> distribution(-50, 100); + + // Заполнение вектора (без циклов) + std::generate(data.begin(), data.end(), [&]() { + return distribution(generator); + }); + + int min_val, max_val; + + // Итератор на минимальный элемент + auto min_it = std::min_element(data.begin(), data.end()); + min_val = *min_it; + write_result(output_file, "Минимальный элемент", min_val); + + // Итератор на максимальный элемент + auto max_it = std::max_element(data.begin(), data.end()); + max_val = *max_it; + write_result(output_file, "Максимальный элемент", max_val); + + std::sort(data.begin(), data.end()); + print_vector("Вектор после сортировки", data, output_file); + + // Подсчет по условию (без циклов) + + long long positive_count = std::count_if(data.begin(), data.end(), + [](int x){ return x > 0; }); // Захват по значению [=] + + long long negative_count = std::count_if(data.begin(), data.end(), + [](int x){ return x < 0; }); + + long long zero_count = std::count_if(data.begin(), data.end(), + [](int x){ return x == 0; }); + + write_result(output_file, "Количество положительных элементов", positive_count); + write_result(output_file, "Количество отрицательных элементов", negative_count); + write_result(output_file, "Количество нулевых элементов", zero_count); + + // Сумма (long long для избежания переполнения) + long long sum = std::accumulate(data.begin(), data.end(), 0LL, [](long long acc, int x) { + return acc + x; + }); + + double average = static_cast(sum) / VECTOR_SIZE; + write_result(output_file, "Среднее арифметическое", round(average * 100.0) / 100.0); // Округление + + vector odd_numbers; + + // Фильтрация в новый вектор (проверка на нечетность) + std::copy_if(data.begin(), data.end(), std::back_inserter(odd_numbers), + [](int x) { return x % 2 != 0; }); + + // Результат (только нечетные) + vector& result_v1 = odd_numbers; + + // Копия нечетных чисел + vector unique_odd_numbers = result_v1; + + // Сортировка для уникальности + std::sort(unique_odd_numbers.begin(), unique_odd_numbers.end()); + + // Удаление дубликатов + auto last = std::unique(unique_odd_numbers.begin(), unique_odd_numbers.end()); + unique_odd_numbers.erase(last, unique_odd_numbers.end()); + + print_vector("Уникальные значения после фильтрации и сортировки", unique_odd_numbers, output_file); + + output_file.close(); + cout << "Обработка завершена успешно!\n"; + cout << "Все результаты записаны в файл: " << OUTPUT_FILE << endl; + + return 0; +} diff --git a/Kovalko Maxim - Homework 4 - Variant 1/output.txt b/Kovalko Maxim - Homework 4 - Variant 1/output.txt new file mode 100644 index 00000000..a6ab1d73 --- /dev/null +++ b/Kovalko Maxim - Homework 4 - Variant 1/output.txt @@ -0,0 +1,12 @@ +Результат Минимальный элемент: -47 +Результат Максимальный элемент: 89 + +--- Вектор после сортировки --- +-47 -13 2 17 17 18 28 28 33 37 44 44 50 53 54 82 83 83 84 89 +Результат Количество положительных элементов: 18 +Результат Количество отрицательных элементов: 2 +Результат Количество нулевых элементов: 0 +Результат Среднее арифметическое: 39.3 + +--- Уникальные значения после фильтрации и сортировки --- +-47 -13 17 33 37 53 83 89