Группа 1201. II семестр. Терминальное задание №4 (архивация, разбор выражений)

Для сдачи задания необходимо выполнить 2 задачи. Все задачи из этого раздела должны решаться за приемлемое время для тестов, что прилагаются к заданию. Тесты можно найти на странице http://ccfit. *****/~den Дополнительную информацию можно найти на странице http://iclub. *****/~andy/

4-1.  Калькулятор

Необходимо написать калькулятор, позволяющий производить следующие арифметические действия:

    +,-,/,* () sin, cos, exp ^ (возведение в степень)

Программа должна получать на вход файл input. txt, содержащий набор арифметических выражений (каждое выражение на новой строке). На выходе программы выдает результат вычисления заданного арифметического выражения (вещественные числа - с точностью до 2-й цифры) и выражение, записанное в польской записи (через 3 пробела). Токены польской записи выводятся через пробел, все числа выводятся в вещественном формате (до 2-го знака).

Пример:

input. txt

2-3*3

4*(2-9)

sin(2)+2

output. txt

-7 2* -

00 - *

2sin 2.00 +

Если не задан входной файл, то программа переходи в консольный режим и позволяет вводить выражения из консоли. После ввода выражения и нажатия «Enter» программа показывает результат и выражение в формате обратной польской записи.

4-2.  Телефонная база данных

Реализовать телефонную базу данных с операциями:

Вставки в БД. int Insert(Card _person); Удаления из БД. int Delete(char * _name) или int Delete(char * _phone) в зависимости от индекса. Поиск. Поиск осуществлять по ключу для конкретного значения (одно выходное значение), а также для значений в промежутке (несколько значений с возможностью последовательного выбора записей.

Card Search(char * _name) или Card Search(char * _phone)

НЕ нашли? Не то? Что вы ищете?

CardArray Search(char * _StartName, char * _StopName).

Здесь возможна реализация такой абстракции как курсоры:

Cursor Search(char * _name)

Cursor Search(char * _startName, char * _stopName);

с дополнительными функциями:

Cursor Next(Cursor _cursor)

Card GetValue(Cursor _cursor).

В данном задании необходимо учитывать, что добавление и поиск данных осуществляется прямо в файле, т. к. база должна сохранять большое кол-во записей (сотни тысяч). Нельзя вытаскивать всю базу в оперативную память и производить поиск внутри нее.

Для быстрого поиска необходимо корректно создавать и поддерживать файл (файлы) индексов, нельзя организовывать последовательный поиск данных в файле. Индексы создаются на основе B-tree или расширяемого хэширования (что давалось на лекции). Все записи имеют уникальные ключи (нельзя завести 2 человек с одинаковым именем или одинаковым номером телофона).

Реализация курсоров остается на усмотрение выполняющего задание.

Замечания:

Реализация страниц базы данных, очевидно через сегментированный файл, т. е. файл условно разделённый на странички. Желательна реализация операций чтения-записи-добавления страниц с возможностью кеширования. Желательна поддержка нескольких индексов (по именам и телефонам).

4-3.  Архивация по методу Хаффмана

Необходимо реализовать возможность архивации бинарных/текстовых данных по методу Хаффмана. Набор команд, обрабатываемых программой, перечислен в таблице:

Команда

Действие

myarchiver. exe с myfile. txt

Заархивировать файл myfile. txt в файл myfile. txt. haf, созданный в текущей (рабочей) директории. Файл myfile. txt не удалять.

myarchiver. exe с myfile1.txt myfile2.txt myfile3.txt

Заархивировать файлы myfile1.txt, myfile2.txt, myfile3.txt в файл myfile. txt. haf, созданный в текущей (рабочей) директории. Файл myfile. txt не удалять. Т. е. архиватор должен поддерживать возможность архивирования нескольких файлов.

myarchiver. exe x myfile. txt. haf

Разархивировать файл myfile. txt. haf. Разархивированные файлы (файл) создавать в текущей (рабочей) директории. Файл myfile. txt. haf удалить.

Необходимо добиться максимальной скорости сжатия, чтобы файлы в 2-5 мегабайт могли архивироваться/разархивироваться без задержек.

Дополнительную информацию о методе Хаффмана можно найти на странице: http://ccfit. *****/~den/help/other/Haffman. htm