From 99977e6492ad2939b0ac5d467b5d453a706f6a4a Mon Sep 17 00:00:00 2001 From: Maxim_Kovalko Date: Tue, 12 May 2026 20:05:36 +0300 Subject: [PATCH] Homework 4 is done! do you wanna know where I got these scars? --- .DS_Store | Bin 6148 -> 8196 bytes .../main.cpp | 120 ++++++++++++++++++ .../output.txt | 12 ++ 3 files changed, 132 insertions(+) create mode 100644 Kovalko Maxim - Homework 4 - Variant 1/main.cpp create mode 100644 Kovalko Maxim - Homework 4 - Variant 1/output.txt diff --git a/.DS_Store b/.DS_Store index 0cdd49688137ce3613f8dffb37975c654aacd80e..cdab90f5535f15c1a4361b2509d1dcdf4be374f6 100644 GIT binary patch literal 8196 zcmeHM&2Jk;6n~SLW=$yBCT<86&bp(3Cnpdz3m zpdz3m@Nb9!?%BL(L-u_kRjrDEiopLe0(^ZiuyU+O>-Nt0JHx za4-V=>^=rIg!n5Bp5K{;5uL5nel#IFf}N3X3ogHMCoVv$z5{cUq9A_F3d0 z##O>UunK%UL~q|6jPO^0!8^$Om8@(E-`}-k?4=d ziEYoq`{Tks)3rNtkmPnY$e;BS*)a1Djz4t#;R*f3=LAUYlNSMXpm1P1_Axjf8F|b@y%B)F=0;u2SdCJ=WUw5OoTBjMUvr z5v4)uZ+UYwrb%Of-gv{@Uh8|Gi0z1Z-U^G|#AU(8l^8Rzlu&;u*kssw2eYsoa#6fa zqZqNN@3U!am{DW~En2;P)iW*XEeBPWB+PHPHVeccCQ`R}xe`(CviRa}BF@Fi#f*4H z5IPhEf#>2vMoA>aZ|z@FdM#i9%@->xLXyXq*E6sH%h15b`5m|cpTQUK75o4{!msc< zIYtWP3384+N9M^Z_K=^TxTumA=S@$ryd0!3tGs_^fSeK zz)@i{!_WVV!@vLEgJ)%;BA_DhUx@(8)#^3=nm=q!;Tx@i^)0NtaJ`9j60@VJm_J6hi!=Js@hk^hA delta 147 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{MGpJ516gFi9GFTXj8B!T?8H`ejlXH^t^K(G5 zK)?i{7(i-(Sbza0zp-!{`@{yp#q1m$g3J&_0^C5_6^K +#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