Задачи для практики на весенний семестр 2006 года

  1. Программа для просмотра FB2-книг

    Написать программу для чтения электронных книг формата FB2.

    Подробное описание формата FB2.

    Книги в формате FB2.

  2. Полиномы от нескольких переменных

    Написать библиотеку для работы с полиномами от нескольких переменных. Библиотека должна включать возможности чтения/записи полиномов и стандартных арифметических операций с ними. Библиотека должна позволять работать с различными упорядочениями полиномов (их можно менять в процессе работы). Реализовать с помощью этой библиотеки алгоритм для поиска базиса Гребнера набора полиномов.

    Подробнее про упорядочения и базис Гребнера (а также о том, зачем это может быть нужно) можно прочесть в книгах

    • Прасолов. Полиномы.
    • Кокс, Литтл, О'Ши. Идеалы, многообразия и алгоритмы.
  3. Библиотека для работы с Postscript-файлами

    Написать библиотеку для чтения/записи Postscript-файлов. Библиотека должна позволять прочитать PS-файл, хранить его в некоем внутреннем представлении («аналог DOM» для Postscript), просматривать и редактировать это представление, записывать результат в файл.

    Описание формата PS-файла

  4. Обобщенная игра

    Есть большое количество игр на различных досках с различными наборами фишек. (Примеры -- крестики-нолики, реверси, разные вариации ataxx.) Написать программу, позволяющую легко создавать новую такую игру, то есть определять форму и размеры доски, набор фишек, правила игры. Предусмотреть интерфейс для создания «автоматического игрока» — алгоритм для игры в эту игру, который мог бы использоваться компьютером.

    Похожий проект не на Java.

  5. File Manager

    Написать File Manager (для начала — File Viewer), который

    • имел бы сменный интерфейс, т.е. в зависимости от желания пользователя мог бы выглядеть как Norton Commander или как Explorer;
    • определял бы тип файла не по расширению, а по содержимому.
  6. Детская задача

    Написать программу для ввода, сохранения и решения "числовых ребусов". Ребусы бывают существенно различными, нужно придумать способ, позволяющий задавать разные виды.

    1. SIX * TWO = TWELVE
    2. СОРОК * 5 = ДВЕСТИ
    3.  ОДИН
      +ОДИН
      -----
      МНОГО
    4. АБ + 8 = 3В
      -    -    -
      ГД + В = ГВ
      =    =    =
      ГБ + 3 = АД
    5. *****|**
      ***  |---
      ---  |*8*
       ***
        **
       ---
        ***
        ***
        ---
          0
    6.   1995
       x ***
       -----
       *****
      *ГОД
      ------
      СВИНЬИ
  7. Узлы и зацепления

    Узел — это замкнутая линия в пространстве без самопересечений. Зацепление — несколько таких линий. Написать программу для удобного ввода и красивого изображения узлов и зацеплений.

    Скриншоты подобной программы (не на Java).

  8. Индексирование XML – 1

    Написать реализацию индексной структуры IndexFabric, основанной на PATRICIA Trie. Эту структуру можно применять в СУБД, хранящих данные в XML формате для ускорения выполнения некоторых операций поиска.

    Сайт, на котором рассказано, зачем это нужно.

    Описание индексной структуры.

  9. Индексирование XML – 2

    Написать реализацию индексной структуры XISS, основанной на традиционных B-деревьях. Эту структуру можно применять в СУБД, хранящих данные в XML формате для ускорения выполнения некоторых операций поиска.

    Сайт, на котором рассказано, зачем это нужно.

    Описание индексной структуры.

  10. Индексирование XML – 3

    И еще раз та же задача с еще одной индексной структурой.

    Сайт, на котором рассказано, зачем это нужно. (Да-да, тот же самый.)

    Описание индексной структуры.

  11. Блок-схемы

    Написать программу для работы с блок-схемами. Программа должна позволять рисовать новую блок-схему, сохранять блок-схему в файле. Кроме этого, хочется иметь возможность выполнять заданный блок-схемой алгоритм при разных наборах начальных данных.