diff --git a/sem2/ReznikovIA/hw4/main.cpp b/sem2/ReznikovIA/hw4/main.cpp new file mode 100644 index 00000000..f68fba45 --- /dev/null +++ b/sem2/ReznikovIA/hw4/main.cpp @@ -0,0 +1,108 @@ +#include +#include +#include +#include +#include +#include +#include + +std::vector generateVector(); +void workWithArray(std::vector& numbers); +void writeToFile(const std::vector& data, + const std::string& outputFileName); +void writeToFile(const std::string& data, const std::string& outputFileName); +void writeToFile(const double& data, const std::string& outputFileName); + +void clearFile(const std::string& fileName); + +int main() { + std::vector numbers = generateVector(); + workWithArray(numbers); + return 0; +} + +void workWithArray(std::vector& numbers) { + std::string fileName = "output.txt"; + clearFile(fileName); + + auto maxElemIt = std::max_element(numbers.cbegin(), numbers.cend()); + writeToFile("max: " + std::to_string((*maxElemIt)), fileName); + auto minElemIt = std::min_element(numbers.cbegin(), numbers.cend()); + writeToFile("min: " + std::to_string((*minElemIt)), fileName); + + std::sort(numbers.begin(), numbers.end()); + writeToFile("sorted", fileName); + writeToFile(numbers, fileName); + + int positiveCount = + std::count_if(numbers.cbegin(), numbers.cend(), + [](int number) -> bool { return number > 0; }); + writeToFile("+: " + std::to_string(positiveCount), fileName); + int negativeCount = + std::count_if(numbers.cbegin(), numbers.cend(), + [](int number) -> bool { return number < 0; }); + writeToFile("-: " + std::to_string(negativeCount), fileName); + + int zeroCount = std::count_if(numbers.cbegin(), numbers.cend(), + [](int number) -> bool { return number == 0; }); + writeToFile("0: " + std::to_string(zeroCount), fileName); + + double mean = std::accumulate(numbers.cbegin(), numbers.cend(), 0) / + static_cast(numbers.size()); + writeToFile("arithmetic mean: " + std::to_string(mean), fileName); + + auto newEnd = std::remove_if(numbers.begin(), numbers.end(), + [](int num) { return num % 2 == 0; }); + numbers.erase(newEnd, numbers.end()); + writeToFile("only odd", fileName); + writeToFile(numbers, fileName); + + std::sort(numbers.begin(), numbers.end()); + std::vector uniqueNumbers; + std::unique_copy(numbers.begin(), numbers.end(), + std::back_inserter(uniqueNumbers)); + writeToFile("sorted unique", fileName); + writeToFile(uniqueNumbers, fileName); +} + +std::vector generateVector() { + std::vector nums(20); + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution dist(-50, 100); + + std::generate(nums.begin(), nums.end(), + [&dist, &gen]() { return dist(gen); }); + return nums; +} + +void clearFile(const std::string& fileName) { + std::ofstream out(fileName); + if (out.is_open()) { + } + out.close(); +} + +void writeToFile(const std::string& data, const std::string& fileName) { + std::ofstream out(fileName, std::ios::app); + if (out.is_open()) { + out << data << std::endl; + } + out.close(); +} + +void writeToFile(const double& data, const std::string& fileName) { + std::ofstream out(fileName, std::ios::app); + if (out.is_open()) { + out << data << std::endl; + } + out.close(); +} + +void writeToFile(const std::vector& data, + const std::string& outputFileName) { + std::for_each(data.cbegin(), data.cend(), + [&data, &outputFileName](const int num) { + writeToFile(std::to_string(num), outputFileName); + }); +} diff --git a/sem2/ReznikovIA/hw4/output.txt b/sem2/ReznikovIA/hw4/output.txt new file mode 100644 index 00000000..ce5976eb --- /dev/null +++ b/sem2/ReznikovIA/hw4/output.txt @@ -0,0 +1,53 @@ +max: 85 +min: -49 +sorted +-49 +-47 +-46 +-38 +-23 +-19 +-15 +1 +18 +22 +29 +32 +37 +56 +57 +58 +63 +70 +77 +85 ++: 13 +-: 7 +0: 0 +arithmetic mean: 18.400000 +only odd +-49 +-47 +-23 +-19 +-15 +1 +29 +37 +57 +63 +77 +85 +sorted unique +-49 +-47 +-23 +-19 +-15 +1 +29 +37 +57 +63 +77 +85