Загрузка данных


Все практические задания переписаны на 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++ (ООП)