Последнее обновление:

Экзамен 2006 года, предлагаемые задачи

  1. Реализовать программу для форматирования текстовых файлов. Базовая функциональность: Дополнительная функциональность:
  2. Реализовать программу для перекодировки между различными кириллическими кодовыми таблицами (CP866, CP1251, KOI8-R). Программа должна иметь опцию автоматического распознавания исходной кодировки файла (например, на основании частотной таблицы символов) и уметь отличать двоичные файлы от текстовых, не перекодируя первые (но иметь опцию форсированной перекодировки).
  3. Реализовать программу для форматирования исходных текстов программ на языке C. В качестве усложнённого варианта можно предусмотреть вывод отформатированного текста в формате RTF или HTML с выделением синтаксических элементов языка.
  4. Морозов
    Написать программу для упрощения символьных арифметических выражений и вычисления их значений. Например выражение «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)».
  5. Журавлев (А)
    Написать программу под Windows, которая рисует графики функций. Функция задаётся в обычном виде, например 2*x + sin((1+x)/(1-x)) + 2^x. Программа должна уметь масштабировать график произвольным образом, задавать цвета фона, осей и графика, иметь функцию автомасштабирования по оси Y, уметь прогкручивать график по вертикали и горизонтали. Будет хорошо, если для неограниченных функций (например ctg(x) при x=0) программа рисовала в точке обращения в бесконечность вертикальную пунктирную линию.
  6. Шуров
    Не пользуясь никакими стандартными библиотеками для работы с трёхмерной графикой, реализовать программу визуализации трёхмерной сцены методом обратной трассировки лучей. Минимальные требования: наличие текстур и хотя бы одного источника цвета. Варианты расширения программы: добавление зеркал, преломляющих объектов, тумана и т.д.
  7. Реализовать программу для игры в «точки» с человеком.
  8. Дубов
    Написать программу, визуализирующую движение грузика, к которому прикреплены три пружинки различных жесткостей, закреплённые в вершинах произвольного треугольника. Исходными данными для программы являются начальное отклонение и скорость грузика. Вся система трёхмерна, т.е. начальное отклонение грузика может не лежать в плоскости треугольника, поэтому можно предусмотреть изменение точки и угла взгляда на систему.
  9. Парфёнов
    Визуализировать движение в системе трёх тел Солнце - Земля - Луна. Все тела взаимодействуют по закону тяготения, исходными данными являются начальные положения и скорости планет. Все тела имеют конечные массы.
  10. Муратов
    Задача от А. В. Кондратьева. Разработка программы для демонстрации сложения цилиндрических волн от двух источников и влияние когерентности источников на результат.
  11. Петухов
    Моделирование биологической системы хищник-жертва в модели Лотка-Вольтерра. Уравнения модели:
    x'=a1x - c1xz - b1x2,
    z'=-a2z + c2xz - b2z2,
    где x(t) — численность жертв, z(t) — численность хищников, a1(a2) — относительная скорость размножения жертв (гибели хищников), b1 и b2 — естественные скорости вымирания популяций жертв и хищников, c1(c2) — коэффициент гибели (прироста) популяции жертв (хищников) при взаимодействии хищников и жертв.
    Требуется написать программу для решения уравнений модели и визуализации поведения системы во времени и, варьируя коэффициенты при различных членах и начальные условия, установить возможные сценарии развития системы хищников и жертв.
  12. Написать HTTP/FTP/POP3-сервер. Конкретная спецификация сервера оговаривается при личной беседе.
  13. Написать программу для составления японского кроссворда по задаваемой пользователем картинке.
  14. Не привлекая никаких стандартных средств написать простой (или не очень простой) текстовой редактор.
  15. Ольшанский
    Реализовать архиватор или виртуальную файловую систему.
  16. Ляпин
    Смоделировать движение заряженной частицы в скрещенных постоянных электрическом и магнитном полях.
  17. Рапопорт
    Реализовать программу, составляющую расписание занятий в школе. Заданы: список кабинетов и предметов, занятия по которым могут быть проведены в каждом из них, список учителей, у каждого из которых есть список дней и часов на неделе, в которые они могут проводить занятия и список классов, у каждого из которых есть фиксированный набор уроков. Требуется найти все варианты расписания на неделю.
  18. Реализовать препроцессор для языка «Small C», способный обрабатывать директивы #include, #define, #undef и конструкцию #if — #else — #endif.
  19. Реализовать программу поиска сочетания символов в строке. В сочетании символов могут входить метасимволы (wildcards) «?» и «*», означающее соответственно, один любой символ и любую последовательность символов.
  20. Кузнецов
    Написать программу, расставляющую заданную комбинацию пятнашек в нормальном порядке. Обратите внимание, что некоторые входные последовательности не являются разрешимыми.
  21. Реализовать программу, рассчитывающую сопротивление между двумя точками электрической схемы сопротивлений. Программа должны уметь визуализировать схему, и было бы хорошо, если бы она умела её строить и редактировать.
  22. Ищук
    Программа-календарь, рисующая календарь на любой месяц любого года. Месяц задаётся либо в виде месяц/год, либо день года/год, либо количеством дней, прошедших с определённой даты.
  23. Хасанова
    Программа, визуализирующая движение в системе двух маятников, грузы которых связаны пружиной. Задаются: ускорение свободного падения, массы грузов, длина подвеса маятников, жесткость пружины, начальные положения и скорости грузов. Требуется визуализировать саму систему и нарисовать графики зависимости координат грузов от времени и зависимости энергий грузиков и полной энергии системы от времени.
  24. Киселев
    Реализовать игру в крестики-нолики на бесконечном поле. Для выигрыша необходимо зачеркнуть заданное количество символов по диагонали, вертикали или горизонтали. Программа должна играть против человека и желательно, чтобы она как минимум не проигрывала.
  25. Янушевич
    Написать программу визуализации фрактального множества Ньютона (множества притяжения корней схемы Ньютона) для любого заданного полинома. Сам полином задается с клавиатуры.
  26. Смирнов
    Написать простой (или не очень) пискельный графический редактор. Минимальные требования:
  27. Коробченко
    Написать простой (или не очень) векторный графический редактор. Минимальные требования:
  28. Трефилов
    Написать программу, визуализирующую процесс сортировки массива чисел с помощью бинарного дерева. Должны быть предусмотрены режимы пошаговой сортировки и выполнение шагов сортировки через заданный интервал времени.
  29. Журавлёв (Л)
    Программа для игры в шашки с человеком.
  30. Программа-ежедневник: планирование собственного времени. Программа должна уметь:
  31. Написать HTML-чат — сервис, позволяющий людям общаться на Web-сервере в реальном времени. Точные условия задачи обговариваются лично.
  32. Написать программу для сжатия/распаковки звуковых файлов в (почти) реальном времени. Формат файла и алгоритм сжатия придумывается и реализуется автором. Возможно использовать уже существующие алгоритмы сжатия, но их реализация должна быть собственной. (Привет Тимуру Исходжанову!)
  33. Реализовать программу для визуализации падения точечных предметов заданной массы на поверхность воды. Считается, что предмет, соприкоснувшись с поверхностью воды, «исчезает», то есть исключается из рассмотрения. Коэффициент поверхностного натяжения должен задаваться пользователем. Для визуализации поверхности воды допустимо использовать стандартные библиотеки для работы с трехмерной графикой. (Привет Павлу Логинову!)
  34. Написать UN*X-интерпретатор (shell). Минимальные требования: Дополнительные возможности: Для уяснения всего вышесказанного можно почитать man-страницу для команды sh. (Привет Владимиру Шашкину!)
  35. Грамматикати
    Программа для решения классической задачи о ранце: есть ранец заданного объёма и набор предметов, у каждого из которых задан объём и ценность. Количество предметов одного типа неограничено. Требуется заполнить ранец предметами так, чтобы суммарная ценность находящихся предметов была максимальной. Рекурсивный алгоритм решения задачи не приветствуется.

    Программа должна визуализировать заполненный ранец, например как последовательность параллелепипедов, высота которых отражает ценность предмета, а длина — объём предмета.

  36. Написать программу, реализующую сервер передачи сообщений: есть много клиентов, которые хотят передавать друг другу сообщения через выделенный сервер, который предоставляет такую возможность. Клиенты общаются только с сервером, но не друг с другом напрямую. Общение клиента с сервером происходит с помощью протокола TCP/IP.
  37. Галкин
    Написать программу, подсчитывающую размерность Хаусдорфа-Безиковича для следующих фракталов: снежинка Коха, салфетка Серпинского, множество Жюлиа, множество Мандельброта.
  38. Арифметические операции в системе чисел Фибоначчи. Утверждение: любое неотрицательное число может быть представлено в виде суммы членов вида akCk, где ak может принимать значения 0 или 1, а Ck — k-е число Фибоначчи. Если наложить для всех k условие ak*ak+1=0, то разложение будет единственным.

    Задание: написать программу, которая преобразует пару введённых десятичных чисел в систему Фибоначчи и производит над ними 4 арифметических действия используя только коэффициенты разложения этих чисел. То есть нельзя произвести 4 действия над исходными числами, а после этого преобразовать их в систему Фибоначчи.

  39. Себедаш
    Программа для вычисления площади и визуализации произвольного замкнутого многоугольника на плоскости. Вершины многоугольника задаются щелчком мыши, после добавления новой вершины многоугольник перерисовывается и его площадь пересчитывается. Вершины, находящиеся внутри многоугольника, должны отбрасываться.
  40. Программа для просмотра текстовых файлов. Программа должна уметь «листать» файл в прямом и обратном направлении. Должны быть реализованы функции прокрутки содержимого вверх и вниз на одну строку и на один экран. Эти функции могут быть назначены произвольным клавишам, что регламентируется файлом конфигурации следующего вида:
    bind q	quit
    bind f  line-forward
    bind b	line-backward
    bind n	screen-forward
    bind p	screen-backward
    
    Если какая-то строка в файле слишком длинна для отображения в одной строке экрана, то эта строка должна быть размещена на нескольких экранных строках. Команды прокрутки на экран вверх/вниз оперируют с экранными строками.
  41. Ртищев
    Реализовать базу данных ваших любимых фильмов/компакт-дисков/игр. У базы данных должна быть определённая структура, задающаяся в виде
    field "name"		type "char[20]"	default ""
    field "quantity"	type "int"	default "0"
    field "mark"		type "int"	default "3"
    
    База данных должна реализовывать операции добавления новой записи («insert name="doom ]I[" type="junk" quantity=1»), удаления записей с данными характеристиками (например, «delete where name="warcraft" and mark="4"»), выбора записей (например, «select», выбирающую все записи, или «select where name="puzzle" or name="quest"»).

    База должна проверять типы полей: если, например, полю «quantity» попытаться присвоить строку «test» или полю «name» попытаться присвоить значение «a very long string that will not fit to the 20 characters», то программа должна выдать сообщение об ошибке. Не указанные поля заполняются значениями по-умолчанию, заданными директивой «default» при определении структуры базы.

  42. Сотсков
    Игра «Тетрис». Фигуры трёхмерны, но падают в плоскости. Необходимо предусмотреть статическое вращение игровой плоскости в пространстве.
  43. Горобцов
    Космическая стратегия «Наш ответ Цивилизации Ориона».
  44. Свешников
    Средневековая стратегия «Герои не нашего времени».
  45. Тарасова
    Калейдоскоп.