Загрузка данных
Все практические задания переписаны на C++ (стандарт C++17). Код готов к компиляции и запуску в любой современной среде (g++, MSVC). Блок‑схемы и UML‑диаграммы даны в текстовом описании (графику здесь не приложить).
---
## БИЛЕТ 1 (и БИЛЕТ 4 – одинаковые)
Контекст: учёт склада.
Задание 1. Блок‑схема (текстовое описание)
1. Начало
2. Вывод меню: 1 – Добавить, 2 – Удалить, 3 – Показать все, 4 – Выход
3. Ввод выбора
4. Если 1 → запросить название, кол‑во, цену → добавить в словарь (std::map) → вернуться к меню
5. Если 2 → запросить название → удалить → вернуться к меню
6. Если 3 → вывести все записи → вернуться к меню
7. Если 4 → завершить
8. Конец
Задание 2. Программа на C++
#include <iostream>
#include <map>
#include <string>
#include <iomanip>
using namespace std;
struct Item {
int quantity;
double price;
};
map<string, Item> warehouse;
void showMenu() {
cout << "\n1. Добавить товар\n";
cout << "2. Удалить товар\n";
cout << "3. Показать все товары\n";
cout << "4. Выход\n";
cout << "Выберите действие: ";
}
void addItem() {
string name;
int qty;
double price;
cout << "Название: ";
cin >> name;
cout << "Количество: ";
cin >> qty;
cout << "Цена: ";
cin >> price;
warehouse[name] = {qty, price};
cout << "Товар '" << name << "' добавлен.\n";
}
void removeItem() {
string name;
cout << "Название для удаления: ";
cin >> name;
auto it = warehouse.find(name);
if (it != warehouse.end()) {
warehouse.erase(it);
cout << "'" << name << "' удалён.\n";
} else {
cout << "Товар не найден.\n";
}
}
void showItems() {
if (warehouse.empty()) {
cout << "Склад пуст.\n";
} else {
for (const auto& [name, data] : warehouse) {
cout << name << ": " << data.quantity << " шт., "
<< fixed << setprecision(2) << data.price << " руб.\n";
}
}
}
int main() {
int choice;
while (true) {
showMenu();
cin >> choice;
switch (choice) {
case 1: addItem(); break;
case 2: removeItem(); break;
case 3: showItems(); break;
case 4: cout << "До свидания!\n"; return 0;
default: cout << "Неверный ввод.\n";
}
}
}
---
## БИЛЕТ 2
Задание 1. Пузырьковая сортировка (C++)
#include <iostream>
#include <vector>
#include <chrono>
#include <random>
using namespace std;
void bubbleSort(vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n; ++i) {
bool swapped = false;
for (int j = 0; j < n - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
swapped = true;
}
}
if (!swapped) break;
}
}
Задание 2. Замер скорости и оценка сложности
int main() {
// Генерация случайного массива из 1000 элементов
vector<int> data(1000);
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(0, 1000);
for (auto& x : data) x = dis(gen);
auto start = chrono::high_resolution_clock::now();
bubbleSort(data);
auto end = chrono::high_resolution_clock::now();
chrono::duration<double> elapsed = end - start;
cout << "Время для 1000 элементов: " << elapsed.count() << " сек.\n";
cout << "Сложность: O(n²) в среднем и худшем, O(n) в лучшем (с флагом).\n";
return 0;
}
---
## БИЛЕТ 3
Контекст: зоопарк.
Задание 1. UML‑диаграмма классов (текстовое описание)
- Абстрактный класс Animal (name, age, виртуальные методы makeSound(), eat())
- Наследники: Lion, Elephant, Monkey – переопределяют makeSound()
- Класс Zoo содержит вектор указателей на Animal, методы addAnimal(), listAnimals()
Задание 2. Реализация на C++ (ООП)