Последнее обновление:
Экзамен 2004 года, предлагаемые задачи
- Реализовать программу для форматирования текстовых файлов. В простейшем
варианте она должна из входного файла, состоящего из строк-параграфов (т.е.
одна длинная строка — один параграф, как получается при экспорте из
M$ Word в текстовой файл), делать файл, в котором длина каждой строки не
превышает заданого числа (если это возможно), а каждый абзац начинается с
символа табуляции. Возможные усложнения: реализовать отсечение неправильных
символов (список таких символов задаётся), сделать проверку орфографии по
словарю, реализовать расстановку переносов, реализовать переформатирование
конечного текста под другую длину строки.
- Реализовать программу для перекодировки между различными кириллическими
кодовыми таблицами (CP866, CP1251, KOI8-R). Программа должна иметь опцию
автоматического распознавания исходной кодировки файла (например, на основании
частотной таблицы символов) и уметь отличать двоичные файлы от текстовых, не
перекодируя первые (но иметь опцию форсированной перекодировки).
- Реализовать программу для форматирования исходных текстов программ на
языке C. В качестве усложнённого варианта можно предусмотреть вывод
отформатированного текста в формате RTF с подсветкой синтаксических элементов
языка.
- Написать программу для упрощения символьных арифметических выражений и
вычисления их значений. Например выражение 2 + b - 5 / 2 - 3 * d
можно упростить до b - 3 * d - 0.5, выражение
a + 0 + 2 * a — до 3 * a, а
1 / (1 + x) + 1 / (1 - x) — до 2 / (1 - x^2).
- Написать программу под Windows, которая рисует графики функций. Функция
задаётся в обычном виде, например 2*x + sin((1+x)/(1-x)) + 2^x.
Программа должна уметь масштабировать график произвольным образом, задавать
цвета фона, осей и графика, иметь функцию автомасштабирования по оси Y, уметь
прогкручивать график по вертикали и горизонтали. Будет хорошо, если для
неограниченных функций (например ctg(x) при x=0) программа
рисовала в точке обращения в бесконечность вертикальную пунктирную линию.
- Не пользуясь никакими стандартными библиотеками для работы с трёхмерной
графикой, реализовать программу визуализации трёхмерной сцены методом обратной
трассировки лучей. Минимальные требования: наличие текстур и хотя бы одного
источника цвета. Варианты расширения программы: добавление зеркал, преломляющих
объектов, тумана и т.д.
- Реализовать программу для игры в «точки» с человеком.
- Написать программу, визуализирующую движение грузика, к которому
прикреплены три пружинки различных жесткостей, закреплённые в вершинах
произвольного треугольника. Исходными данными для программы являются
начальное отклонение и скорость грузика. Вся система трёхмерна, т.е. начальное
отклонение грузика может не лежать в плоскости треугольника, поэтому можно
предусмотреть изменение точки и угла взгляда на систему.
- Визуализировать движение в системе трёх тел Солнце - Земля -
Луна. Все тела взаимодействуют по закону тяготения, исходными данными являются
начальные положения и скорости планет. Все тела имеют конечные массы.
- Задача от А. В. Кондратьева.
Разработка программы для демонстрации
сложения цилиндрических волн от двух источников и влияние когерентности
источников на результат.
- Моделирование биологической системы хищник-жертва в модели Лотка-Вольтерра.
Уравнения модели:
x'=a1x - c1xz - b1x2, |
z'=-a2z + c2xz - b2z2, |
где x(t) — численность жертв, y(t) — численность хищников,
a1(a2) — относительная скорость размножения
жертв (гибели хищников), b1 и b2 — естественные
скорости вымирания популяций жертв и хищников,
c1(c2) — коэффициент гибели (прироста) популяции
жертв (хищников) при взаимодействии хищников и жертв.
Требуется написать программу для решения уравнений модели и визуализации
поведения системы во времени и, варьируя коэффициенты при различных членах и
начальные условия, установить возможные сценарии развития системы хищников и
жертв.
- Написать HTTP/FTP/POP3-сервер. Конкретная спецификация сервера
оговаривается при личной беседе.
- Написать программу для составления японского кроссворда по задаваемой
пользователем картинке.
- Не привлекая никаких стандартных средств написать простой (или не очень
простой) текстовой редактор.
- Реализовать архиватор или виртуальную файловую систему.
- Смоделировать движение заряженной частицы в скрещенных постоянных
электрическом и магнитном полях.
- Реализовать программу, составляющую расписание занятий в школе. Заданы:
список кабинетов и предметов, занятия по которым могут
быть проведены в каждом из них, список учителей, у каждого из которых есть
список дней и часов на неделе, в которые они могут проводить занятия
и список классов, у
каждого из которых есть фиксированный набор уроков. Требуется найти все
варианты расписания на неделю.
- Реализовать препроцессор для языка «Small C», способный
обрабатывать директивы #include, #define, #undef и
конструкцию #if — #else — #endif.
- Реализовать программу поиска сочетания символов в строке. В сочетании
символов могут входить метасимволы (wildcards) «?» и
«*»,
означающее соответственно, один любой символ и любую последовательность
символов.
- Написать программу, расставляющую заданную комбинацию пятнашек в
нормальном порядке. Обратите внимание, что некоторые входные последовательности
не являются разрешимыми.
- Реализовать программу, рассчитывающую сопротивление между двумя точками
электрической схемы сопротивлений. Программа должны уметь визуализировать
схему, и было бы хорошо, если бы она умела её строить и редактировать.
- Программа-календарь, рисующая календарь на любой месяц любого года.
Месяц задаётся либо в виде месяц/год, либо день года/год, либо количеством
дней, прошедших с определённой даты.
- Программа, визуализирующая движение в системе двух маятников, грузы
которых связаны пружиной. Задаются: ускорение свободного падения, массы грузов,
длина подвеса маятников, жесткость пружины, начальные положения и скорости
грузов. Требуется визуализировать саму систему и нарисовать графики зависимости
координат грузов от времени и зависимости энергий грузиков и полной энергии
системы от времени.
- Реализовать игру в крестики-нолики на бесконечном поле. Для выигрыша
необходимо зачеркнуть заданное количество символов по диагонали, вертикали или
горизонтали. Программа должна играть против человека и желательно, чтобы она
как минимум не проигрывала.
- Написать программу визуализации фрактального множества Ньютона (множества
притяжения корней схемы Ньютона) для любого заданного полинома. Сам полином
задается с клавиатуры.