Темы для специальностей, не связанных с программированием.
````hide 1. Разработка класса "Матрица"
Определить класс Матрица и операции для работы с ней (+, -, *, ввод и вывод,
транспонирование). Для доступа к элементам матрицы перегрузить операцию "()".
При определении можно использовать vector.
```C++
Matrix A(3,4); // Создать нулевую матрицу 3x4
Matrix E(3,3); // Создать нулевую матрицу 3x3
for(int i=0;i<3;++i)
E(i,i)=1;
// E - теперь единичная матрица
E=E+E; // сложение матриц
cin>>A; // ввод матрицы 3x4
Matrix B=A.transp()*E;
cout<<B; // вывод матрицы
cout<<B(1,2)<<”\n”; // вывод элемента с индексом (1,2)
```
````
````hide 2. Разработка класса "Список"
Определить класс Список и операции для работы с ним (сцепление списков +, ввод
и вывод в форме [1,2,3], подсписок c `i`-го элемента длиной `k`, добавление в начало и
в конец списка). Для доступа к элементам списка перегрузить операцию "[]". При определении можно использовать vector.
````hide 3. Разработка класса "Полином"
Определить класс Полином от одной переменной `x` и операции для работы с ним (+, -, *, ввод и вывод,
красивый вывод). Для доступа к коэффициентам перегрузить операцию "[]" (индекс указывает на коэффициент при соответствующей степени). При
определении можно использовать vector. В элементе с индексом 0 хранится коэффициент для свободного члена полинома. Ввод и вывод коэффициентов выполняется начиная со старшей степени.
```c++
Polynom A(3); // Создать полином 3 степени с нулевыми коэффициентами
A[3]=1; // задаем коэффициент для степени 3
A[0]=-1;
cout<<A<<”\n”; // Выводится 1 0 0 -1
A.print(); // выводится x^3-1
Polynom B(2); // Создать полином 2 степени с нулевыми коэффициентами
cin>>B; // Вводим 3 0 0 что соответствует 3x^2
cout<<A+B<<”\n”; // Выводится 1 3 0 -1
```
````
````hide 4. Моделирование механических часов
Выполнить визуализацию работы механических часов, используя текущее время
компьютера. В качестве объектов программы должны быть три стрелки (часовая,
минутная, секундная) и числа от 1 до 12 на циферблате. Создание этих объектов и работа с ними должна выполняться в main. При создании можно указать цвет, длину и толщину стрелок, для чисел положение на циферблате и выводимый текст ("IX" или "9"). Там же выполняется рисование основной части циферблата.
````
```hide 5. Моделирование планетарной системы
Выполнить визуализацию движения планет вокруг Солнца и движения спутников.
Характеристики объектов: радиус `P` и цвет `C` объекта, вокруг какого объекта `B`
вращается, радиус R и угловая скорость `U` вращения, начальный угол `A`, список
спутников. Операции: вычислить координаты объекта в момент времени `T`,
нарисовать объект и его спутники, добавить спутник.
Пусть `B_x, B_y` координаты объекта `B` в момент `T`, тогда для вычисления координат
объекта используются формулы:\
`X=B_x+R*cos(A+U*T)`\
`Y=B_y+R*sin(A+U*T)`
```
````hide 6. Моделирование движения автотранспорта
Выполнить моделирование движения автотранспорта по однополосной дороге (без
обгона). Машины представляются объектами, имеющими следующие
характеристики:
* желаемая скорость `W` (60-80 км/ч=16-22 м/c)
* текущая координата `X`
* текущая скорость `V` (от 0 км/ч, может изменяться на 5 км/ч за единицу моделирования = `1/5` секунды)
Движение машин подчиняется правилу: если текущая скорость не позволяет
остановиться вовремя при внезапной остановке впереди идущей машины, то
снизить скорость на 5 км/ч=1.4 м/c.
Если можно скорость увеличить, то скорость увеличивается на 5 км/ч, но не более
желаемой.
Если `V^2/5>D`, то скорость уменьшается `V=V-1.4`\
если `(V+5)^2/5<D`, то скорость увеличивается `V=min(V+1.4,W)`,\
где `D` -- расстояние до предыдущей машины в метрах, `V` -- скорость в метрах в секунду.
Промоделировать движение транспорта на участке дороги несколько километров в
ситуации без происшествий и с остановкой одной машины на несколько секунд.
````
````hide 7. Разработка набора классов "Дерево"
Определить набор классов для представления иерархических деревьев (например,
папки и файлы или разделы и ключи в реестре). Набор классов должен включать
базовый класс Элемент и производные классы Раздел, Лист.
*Операции и свойства:*
Элемент: название, печать с отступом (виртуальный метод), родительский элемент
Раздел: добавить элемент, количество элементов, `i`-й элемент
Лист: значение (строка)
*Пример печати:*
```text
Software
Windows
version=10.0
Console
Font=Consolas
Charset=866
Google
Chrome
update_url=http://clients.google.com/update
```
````
````hide 8. Векторная графическая библиотека
Определить набор классов для рисования графических объектов Прямоугольник,
Круг, Линия. Эти классы должны быть производными от базового класса
"Графический объект" (GrObject).
Операции и свойства: цвет, координаты, размеры, видимость, рисовать
(виртуальный метод). При изменении положения, размеров и видимости в отличие
от лабораторной работы должны перерисовываться все видимые объекты с
вызывая функцию redraw (см. ниже). Для хранения списка объектов использовать
глобальный vector указателей на GrObject:
````hide 9. Использование классов STL-1
Система обработки заказов работает следующим образом: полученный заказ
выдается наименее загруженному работнику (с наименьшим суммарным временем
выполнения заказов). Если таких работников несколько, то выбирается работник с
наименьшим номером среди них.
Дана последовательность заказов в порядке поступления. Для каждого заказа
указано время, необходимое для его выполнения.
Для каждого работника вывести количество распределенных ему заказов,
суммарное время и номера заказов.
При решении использовать set (для пары загрузка+номер работника) и vector.
````hide 10. Использование классов STL-2
Определить, является ли правильной последовательность из `N` круглых,
квадратных и фигурных скобок, т.е. соответствует ли каждой открывающей скобке
закрывающая и правильно ли они вложены.
При решении использовать string и stack.
````
````hide 11. Использование классов STL-3
Для текста на английском языке определить количество различных слов и самое
часто используемое слово. Слова word и words считаются различными.
При решении использовать map и string.
````
````hide 12. Использование классов STL-4
Задан словарь. Найти все наборы слов в словаре, являющихся анаграммами.
При решении использовать map, vector и string, алгоритм sort.
````