Практика
На этой странице представлены задачи, предлагаемые для практики студентам первого года обучения.Вы можете предложить свою задачу или выбрать из этого списка, кроме того, Вы можете посмотреть, какие задачи предлагались в предыдущие годы, и выбрать одну из них.
Симулятор морских боев
Руководитель: Е. М. ЛинскийЕсть карта, состоящая из квадратов "море" и "суша". На ней сражаются два флота. Флот состоит из кораблей различных типов. Тип определяет скорость, дальность обзора, боеприпасы и живучесть корабля. Задача — потопить вражеский флот. Бой разворачивается в пошаговом режиме, т.е. сначала выделяется некоторое количество шагов первому флоту, затем — второму. Задача игрока запрограммировать стратегию поведения одного из флотов.
Приложение можно разбить на три части: симулятор, визуализатор и подключаемые плагины, описывающие стратегии флотов. Симулятор отвечает за перемещение кораблей по карте, выстрелы, потопление. Визуализатор отвечает за отображение игрового процесса, т.е. по карте в реальном времени перемещаются и стреляют друг в друга корабли. Симулятор по очереди опрашивает плагины стратегий, а затем производит изменение игрового поля. Во время своего хода плагин может запросить у симулятора текущее состояние игрового поля, а затем послать ему команды на изменение направления движения/скорости и применение оружия.
В процессе разработки должны быть реализованы симулятор, визуализатор и несколько плагинов стратегий.
Возможные расширения:
- увеличение числа игроков
- возможность автоматического проведения турниров между стратегиями
Каталог библиотеки статей
Руководитель: Е. М. ЛинскийЕсть большая библиотека документов в формате PDF. Требуется создать приложение для работы с каталогом библиотеки. Каталог хранит описание документа (авторы, название, год и т. д.) и путь до него на диске. Для удобства просмотра каждому документу может быть присвоена категория, характеризующая область знаний к которой он относится. Категории образуют иерархию в виде дерева. Одному документу может быть присвоено несколько категорий.
Приложение должно поддерживать следующую минимальную функциональность:
- Редактирование описаний документов из библиотеки.
- Редактирование дерева категорий.
- Редактирование привязки категорий к документам.
- Просмотр каталога по дереву категорий.
- Поиск по каталогу: по отдельным полям, по всем полям. Поддержка масок *,?.
- При просмотре элемента каталога все поля должны быть представлены как ссылки. Нажатие на ссылку приводит к поиску по значению поля, т.е. если нажать на имя автора, то должны быть выданы все статьи этого автора.
- Из некоторых PDF можно извлечь текст. Сделать полнотекстовой поиск по тексту. Автоматическое извлечение описания документа (имя автора, название) при добавлении документа в каталог.
- Добавление ключевых слов в дополнение к категориям. Ключевые слова не образуют иерархий.
- Синхронизация нескольких каталогов. Экспорт каталога в текстовый файл, импорт из файла. Поиск различий в двух файлах.
- Автоматическая проверка целостности ссылок на документы (т. е. действительно ли указан правильный путь к файлу).
- Экспорт элементов каталога в формате bibtex.
Определитель плагиата в рефератах
Руководитель: Е. М. ЛинскийЗадачу поиска плагиата в рефератах можно сформулировать следующим образом. Необходимо определить, имеет ли заданный текстовый документ общие куски с документами, уже имеющимися в базе.
В рамках этого проекта требуется спроектировать и разработать алгоритм поиска плагиата, собственную мини базу данных, а также графическое приложение клиент. Главный критерий при разработке — максимальное быстродействие. Имеющаяся база рефератов может быть достаточно большой. Заявки на определение плагиата приходят с большой интенсивностью.
В качестве базовой может быть использована следующая идея. Текст документа хэшируется с некоторым шагом. Текст разбивается на блоки с перекрытием. Например, пусть длина блока равна 20, а шаг равен 2. Тогда первый блок находится на позициях 1..20, второй блок — 3..22 и т.д. От каждого блока вычисляется хэш-функция. Из набора получившихся значений выбирается часть (например, 15 максимальных), эти значения вместе со ссылкой на документ сохраняются. При анализе на плагиат хэш-значения рассматриваемого документа последовательно сравниваются со всеми записями в базе. Если некоторое число хэшей анализируемого документа (например, 7 из 15) совпало с хэшами какого-то документа из базы, то выносится решение о плагиате.
Возможные расширения:
- в целях быстродействия база данных является распределенной, т.е. находится на нескольких компьютерах.
- веб-интерфейс вместо графического клиента (см. тему #2 для требований к разработчикам веб-интерфейсов).
Игры с искусственным интеллектом
Руководитель: Е. М. Линский- Хексагон
- Шашки
- Шахматы
- Нарды
- Го (игра в точки)
FBReader Translator
Руководитель: Н. М. ПульцинПрограмма FBReader включает в себя перевод всего своего интерфейса на разные языки. (семь языков на момент написания условия задачи.) Перевод интерфейса представляет из себя XML-файл (для тех, кто не знает, что это такое — специальным образом отформатированный текстовый файл), содержащий строки на соответствующем языке (и рядом — указания на места, где эта строка используется). Перевод на большинство языков сделан добровольцами, живущими в разных странах.
Новые версии программы содержат больше элементов интерфейса, а авторы программы умеют писать только по-русски и по-английски. Это приводит к тому, что в английской версии файла строк оказывается больше, чем в других. (Программа устроена так, что не найдя нужной строчки в файле перевода, она берет соответствующую строку из английской версии.)
Время от времени авторы переводов берутся добавить недостающие строки, и перед ними возникает проблема — найти, какие строки были добавлены в английском варианте, и в соответствующие места добавить строки на языке перевода.
Предлагается написать программу, позволяющую
- создавать новые переводы
- редактировать и дополнять существующие удобным способом. Это значит, что программа должна показывать рядом английские строки и соответствующие строки на языке, на который делается перевод, находить и указывать пробелы в переводе, и т. п.
Словарь
Руководитель: Н. М. ПульцинНаписать программу-словарь, позволяющую пользоваться словарями в формате Примерные возможности, которые хотелось бы увидеть в программе, можно посмотреть, например, у Lingvo ;).
Имеется в виду выбрать один из двух форматов, по крайней мере — для начала. Возможно, также, что два человека напишут две конкурирующие программы для разных форматов.
Интерфейс для архиватора
Руководитель: А. А. БреславНаписать программу-оболочку для работы с архивами, поддерживающую следующие функции:
- Просмотр содержимого архива (файлы и папки)
- Создание нового архива
- Добавление файлов в архив
- Удаление файлов из архива
Просмотр изображений в формате SVG
Руководитель: А. А. БреславSVG (Scalable Vector Graphics) — стандартный формат для хранения векторных изображений, основанный на XML.
Необходимо написать программу для просмотра SVG-документов, позволяющую
- Масштабировать изображение
- Прокручивать изображение
- Просматривать изображения с диска в режиме слайд-шоу
Японские кроссворды
Руководитель: А. А. БреславНаписать программу, позволяющую пользователю разгадывать японские кроссворды.
Кроссворд хранится на диске в виде
- текстового файла с картинкой в стиле ASCII-art
- файла, содержащего информацию о количестве закрашенных клеток в каждой строке и каждом столбце
Есть вариант этой задачи про цветные японские кроссворды.
Обыкновенные кроссворды
Руководитель: А. А. БреславНаписать программу, позволяющую пользователю разгадывать обычные кроссворды.
Кроссворд хранится на диске в вид файла с вопросами и? положениями слов. Программа отображает кроссворд на экране и позволяет пользователю вписывать буквы в клетки.
Есть варианты этой задачи про "сканворды" или "филворды".
Векторная анимация
Руководитель: А. А. БреславВекторное изображение состоит из геометрических объектов: точек, многоугольников, эллипсов, отрезков прямых и кривых и т.д.
Если задать начальное изображение и указать, каким образом оно изменяется со временем (объекты могут перемещаться, изменять цвет и размеры и т. д.), получится анимация.
С этим может быть связаны следующие задачи:
- Написать программу для воспроизведения анимации
- Написать редактор для создания анимации
Логические схемы
Руководитель: А. А. БреславЛогические (или булевы) схемы используются в математике и технике для формализации манипуляций с двоичными данными.
Схема состоит из логических элементов (например, НЕ, И, ИЛИ), соединенных проводами. У каждого элемента есть входы, на которые подаются данные) и выходы (с которых считывается результат).
Например, у элемента И два входа и один выход, причем значение на выходе истинно только если истинны значения на обоих входах. Соединяя выходы одних элементов с входами других, можно построить схему для вычисления любой функции.
Задача: написать программу, позволяющую создавать схемы, подавать на их входы данные и получать результат.
Блок-схемы
Руководитель: А. А. БреславБлок схемы используются для наглядного представления небольших программ и алгоритмов.
Задача: написать редактор и интерпретатор блок-схем.
Конечные автоматы
Руководитель: А. А. БреславКонечные автоматы широко используются в компиляторах и программах, управляющих различными автоматическими системами (от кофеварок до подводных лодок). Автомат можно представить в виде графа, вершинами которого являются состояния, а ребрами — переходы из одного состояния в другое. Подробнее см. статью в Википедии.
Задача: написать редактор и интерпретатор конечных автоматов.
Синтаксические диаграммы
Руководитель: А. А. БреславСинтаксические диаграммы используются для описания синтаксиса формальных языков (в частности, языков программирования), подробнее см. здесь.
Задача: написать редактор синтаксических диаграмм, позволяющий строить предложения языка, удовлетворяющие диаграмме.
Роботы
Руководитель: А. А. БреславСоздать маленький язык программирования для управления "роботом", двигающимся по экрану.
Возможные варианты сюжета:
- рисующий робот (как черепашка в LogoWriter)
- робот на поле с преградами и призами (лабиринт)
- робот-строитель
Зависимости в программах на Java
Руководитель: А. А. БреславРаботая с большим проектом, полезно представлять себе, какие части системы используют другие ее части.
В случае Java такими частями будут классы и пакеты: практически каждому классу для работы нужны классы стандартной библиотеки, но многим классам этого недостаточно: они обращаются к другим классам в том же проекте.
Нужно написать программу, позволяющую по скомпилированному коду построить граф, вершинами в котором будут классы и пакеты, а ребрами — зависимости.
Входными данными для программы будет корневой пакет (в виде папки на диске или jar-архива).
Надстройка над Google Calendar
Руководитель: А. А. БреславGoogle Calendar — это веб-приложение, позволяющее пользователю планировать свое время: назначать события на определенные часы и просматривать календарь в виде удобно скомпонованной таблицы.
Для планирования встреч со студентами преподавателю требуется следующая функция: определить фиксированные промежутки времени, в которые происходят встречи (например, первая встреча с 13.20 до 14.00, вторая — с 14.00 до 14.40, третья — с 15.00 до 16.40 и т.д.) так, чтобы можно было создать событие, не определяя время его начала и конца, а просто выбирая один из заранее определенных промежутков времени. Кроме того, данные студента (фамилию, имя и группу) тоже хотелось бы выбирать из заранее определенного списка.
Эту функциональность можно интегрировать с Google Calendar следующим образом: настольное Java приложение позволяет пользователю определять промежутки времени, список студентов и назначать встречи. Когда назначается встреча, данные отсылаются в Google Calendar через Google Data API. Также необходимо уметь считывать из календаря уже внесенные туда данные.
Инструмент для составления расписаний
Руководитель: А. А. БреславСоставление расписания занятий — очень сложная задача, которую не удается эффективно решать автоматически. Однако программа может помочь пользователю составлять расписание, проверяя за него отсутствие накладок, предлагая возможные варианты изменений и представляя данные в удобном виде.
Нужно написать программу, позволяющую редактировать расписание в одном из трех представлений
- Расписание студентов
- Расписание преподавателей
- Расписание аудиторий
- У студента не должно быть больше четырех пар в день, больше семнадцати пар, при чем из них пар по программированию должно быть ровно две
- У преподавателя не должно быть "окон" в расписании и занятий по пятницам
- В этой аудитории не должно быть больше одной группы одновременно
Редактор графов с поддержкой шаблонов
Руководитель: А. А. БреславРисовать в обыкновенном векторном редакторе (или даже в специальном редакторе диаграмм) регулярные графы (например, двоичные деревья, звездчатые графы и т.д.) довольно неудобно, поскольку каждую вершину приходится располагать вручную.
Предлагается написать редактор с поддержкой "шаблонов" для графов.
Например, шаблон "вершина двоичного дерева" позволяет создать не более трех вершин, связанных с данной, причем две из них будут располагаться ниже данной (на равном расстоянии от нее по горизонтали), а третья — выше.
Такой редактор должен упростить ручную укладку регулярных частей графов на плоскости.
Инструмент переводчика
Руководитель: А. А. БреславНеобходимо написать инструмент для CAT (Computer Assisted Translation), то есть программу, которая помогает переводчику в его работе.
Программа должна поддерживать следующие функции
- Одновременное отображение оригинального текста и перевода на экране
- Выделение части оригинального текста для сопоставления ей перевода
- Хранение истории замен: какие слова были заменены какими
- Поиск и замена с поддержкой специальных символов
- Автоматический поиск в тексте фрагментов, которые не нужно переводить
- Хранение базы данных переводов слов и выражений