/
haseew
/
Lab_7
Обзор
Документация
Войти
/
haseew
/
Lab_7
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.cpp
172 строки
7 KB
Egorchik
Lab_7
12 май 2026, 17:22
12 май 2026, 17:22
d36efc2
Код
Авторство
О чём код?
/* * кто выполнил: Буров Егор * что делает программа: демонстрирует работу с последовательными и ассоциативными контейнерами stl, * исправление ошибок повреждения итераторов и применение базовых алгоритмов stl для фильтрации и расчетов. * что на входе: текстовый файл input.txt с набором целых чисел, ввод искомого числа n с клавиатуры * что на выходе: результаты унификации, поиска пересечений, расчета сумм и перестановок в консоль */ #include <iostream> #include <fstream> #include <vector> #include <string> #include <algorithm> #include <numeric> #include "Containers.h" #include "Algorithms.h" using namespace std; int main() { // ========================================== // 1-4 контейнеры cout << "=== zadanie 1-4: associativnye kontejnery ===" << endl; // задание 1: универсальный вывод print std::vector<std::string> print_test = {"apple", "banana", "cherry"}; cout << "ishodnyj vector dlya print: "; Print(print_test, ", "); // задание 2: поиск дубликатов чисел через std::set cout << "\ntestirovanie dublicatov (solve_associative_1):" << endl; std::vector<int> dup_test = {1, 2, 3, 2, 1, 4}; solve_associative_1(dup_test); // задание 3: поиск пересечений букв в словах cout << "\ntestirovanie obshchih bukv (solve_associative_2):" << endl; std::vector<std::string> words_test = {"bella", "label", "roller"}; cout << "obshchie bukvy: "; solve_associative_2(words_test); // задание 4: порядковый номер встречи слова через std::map cout << "\ntestirovanie schetchika slov (solve_associative_3):" << endl; std::vector<std::string> text_test = {"one", "two", "one", "three", "two", "one"}; cout << "rezultat vstrech: "; solve_associative_3(text_test); // ========================================== // 5-7 алгоритмы и ошибки cout << "\n=== zadanie 5-7: ispravlenie oshibok i svoy algoritm ===" << endl; // задание 5: исправление кода васи fix_vasya_iterator_error(); // задание 6: исправление кода андрея fix_andrey_inserter_error(); // задание 7: кастомный линейный алгоритм unique std::vector<int> unique_test = {1, 1, 2, 2, 2, 3, 1, 1, 4, 4}; cout << "\nishodnyj massiv dlya kastomnogo unique: "; for (int x : unique_test) cout << x << " "; cout << endl; auto new_last = Unique(unique_test.begin(), unique_test.end()); cout << "rezultat raboty kastomnogo unique: "; for (auto it = unique_test.begin(); it != new_last; ++it) { cout << *it << " "; } cout << endl; // ========================================== //алгоритмы и вектор cout << "\n=== zadanie 8: rabota s fajlom i algoritmami vector ===" << endl; // создание входного файла для тестов std::ofstream tmp_out("input.txt"); if (tmp_out.is_open()) { tmp_out << "5 12 3 5 8 12 7 5 14 2 3"; tmp_out.close(); } // чтение набора целых чисел из файла по заданию std::ifstream in_file("input.txt"); if (!in_file.is_open()) { cout << "oshibka: ne udalos otkryt fajl input.txt" << endl; return 1; } std::vector<int> data; int number; while (in_file >> number) { data.push_back(number); } in_file.close(); // сохраняем копию исходного набора для вывода в конце std::vector<int> original_data = data; // 1. поиск вхождений числа n и определение его позиций int n; cout << "vvedite chislo n dlya poiska v massive: "; cin >> n; int n_count = std::count(data.begin(), data.end(), n); cout << "chislo n vstrechaetsya stolko raz: " << n_count << endl; if (n_count > 0) { cout << "pozicii (indexy) vhozhdeniya chisla n: "; auto it = data.begin(); while ((it = std::find(it, data.end(), n)) != data.end()) { cout << std::distance(data.begin(), it) << " "; ++it; } cout << endl; } else { cout << "chislo n ne najdeno в massive!" << endl; } // 2. подсчет количества четных элементов и вывод их номеров int even_count = std::count_if(data.begin(), data.end(), [](int x) { return x % 2 == 0; }); int odd_count = data.size() - even_count; cout << "\nkolichestvo chetnyh elementov: " << even_count << endl; cout << "nomera (indexy) chetnyh elementov: "; auto it_even = data.begin(); while ((it_even = std::find_if(it_even, data.end(), [](int x) { return x % 2 == 0; })) != data.end()) { cout << std::distance(data.begin(), it_even) << " "; ++it_even; } cout << endl; // расчет суммы в зависимости от преобладания четных или нечетных элементов int total_sum = 0; if (even_count > odd_count) { // если четных больше, считаем сумму только четных for (int x : data) { if (x % 2 == 0) total_sum += x; } cout << "summa chetnyh elementov (tak kak chetnyh > nechetnyh): " << total_sum << endl; } else { // в противном случае считаем сумму абсолютно всех элементов total_sum = std::accumulate(data.begin(), data.end(), 0); cout << "summa vseh elementov (tak kak chetnyh <= nechetnyh): " << total_sum << endl; } // 3. сортировка данных и вывод на экран исходного и измененного наборов cout << "\nishodnyj nabor dannyh (pered sortirovkoj): "; for (int x : original_data) cout << x << " "; cout << endl; std::sort(data.begin(), data.end()); cout << "otsortirovannyj nabor dannyh: "; for (int x : data) cout << x << " "; cout << endl; // 4. перестановка местами первого и последнего элементов через std::swap if (data.size() >= 2) { std::swap(data.front(), data.back()); } cout << "\nvector posle perestanovki pervogo i poslednego elementa: "; for (int x : data) cout << x << " "; cout << endl; cout << "\n=== programma uspeshno zavershena ===" << endl; return 0; }