"HelloWorld" проект на C++ с использованием виджетов Qt.
Основные функции:
- отображение приветственной строки на форме и стандартной консоли вывода
- ввод имени пользователя для кастомизации приветственной строки
- очистка виджета приветственной строки
Вычисление факториала 5 в типах int и float в зависимости от директивы препроцессора.
Получение информации об ОС и компиляторе.
Проверены ОС:
- Microsoft Windows 10
- Linux Ubuntu 20.04
- Linux OpenSUSE 15.5
- FreeBSD 14.1
- Haiku R1
Проверены компиляторы:
- GNU GCC
- Clang
- MSVC
- Borland
- NVCC
Вывод в консоль таблицы умножения задаваемой размерности с помощью циклов for, while, do-while.
Консольная итерационная игра.
Правила
На каждой итерации игроки (функции) поочередно выдают числа, чередуя положительные из диапазона [1..5] и отрицательные из диапазона [-5..-1], которые добавляются к общему счёту игры.
Условия победы:
- Выигрывает игрок, после хода которого счёт превысил максимальный счёт игры (например
50). - Если за определённый лимит итераций (например
100) нет победителя, то объявляется ничья и игра завершается.
Вывод целого числа, к которому применён сдвиг на 2 позиции:
- влево если число чётное и положительное
- вправо в противном случае
Обработчик фигур типа Shape. Сопоставление типа фигуры с названием и наоборот.
Переворачивание С-style строки.
Динамическое выделение/удаление 2D матрицы, заполнение значениями по правилу i*j.
Сортировка по возрастанию вектора случайных значений.
Работа с массивом через smart-pointer - поиск min и max значений.
Работа с массивом через unique_ptr:
- заполнение
- вывод в консоль
Работа с массивом через shared_ptr/weak_ptr:
- заполнение
- вывод в консоль
- вычисление суммы всех элементов
- поиск min и max значений
Перегрузка ф-ции print() для типов:
intfloatstd::stringchar*(массив)int*(массив)std::vector<int>std::shared_ptr<int>std::unique_ptr<double>
Класс, описывающий книгу.
Модель леса и деревьев. Основные особенности:
- Тип дерева задается перечислением
- Лес может выращивать деревья, получать их во владение и вырубать
- Хранение списка деревьев реализовано в хэш-таблице для оптимального поиска по id дерева для вырубки
- Леса могут объединяться в один, деревья при этом перемещаются в объединённый
Расширенная модель леса и деревьев. Основные особенности:
- Типы лесов и деревьев образуют иерархии
- Леса каждого типа проверяют возможность добавления дерева данного типа
- Для сохранения логики перемещения
unique_ptrдерева в лес использованы сигнатуры сl-valueиr-valueссылками
Модель СТО, основанная на шаблонах. Основные особенности:
- Типы СТО задаются типами шаблона
- Типы машин образуют иерархию
- Машины можно добавлять в СТО соответствующего типа
- Очередь СТО лимитирована
- Гараж с готовыми машинами инкапсулирован в СТО
Выполнение вычислений с помощью лямбд. Поддержка исключений*.
| Операция | Пояснение | Исключения |
|---|---|---|
div |
деление a/b |
std::invalid_argument |
sqrt |
квадратный корень sqrt(a) |
std::domain_error |
log |
логарифм log(a) |
exc::InvalidLogArgument |
sqrCirc |
площадь круга радиуса r |
exc::InvalidRadusArgument |
*Компилятор MSVC поддерживает нестандартный конструктор std::exception(message).
Конвертер валют на основе фреймфорка Qt. Основные особенности:
- Суммы для конвертации задаются в виджетах ввода-вывода
- При вводе входная сумма конвертируется в выходную и наоборот
- В виджетах ввода-вывода предусмотрен валидатор ввода
- Типы валют задаются в выпадающих списках рядом с виджетами ввода-вывода
- Курсы валют задаются в настройках (кнопка
Настройки) - Настройки курсов валют сохраняются в ini-файле
Модель интернет-магазина с move-семантикой. Move-операции выводятся в консоль.
Параллельная обработка массива случайных чисел следующими операциями:
- Сумма всех элементов
- Поиск максимального элемента
- Поиск минимального элемента
Получение результирующего значения реализовано 3 способами:
- Внешняя переменная (синхронизация механизмами
std::mutex,std::unique_lock,std::lock_guard) - Запуск через
std::async - Получение результата в
std::futureчерезstd::promise - Получение результата в
std::futureчерезstd::promise
Обработка директории, задаваемой пользователем:
- Проверка на существование
- Подсчёт всех файлов в директории
- Поиск exe-файлов в директории
Расчёт стоимости доставки по разным стратегиям расчёта:
GroundDelivery, стоимость зависит от расстоянияAirDelivery, стоимость зависит от расстояния и весаExpressDelivery, стоимость зависит от расстояния, веса и коэффициента за срочность