Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sp_table2012 (1).doc
Скачиваний:
12
Добавлен:
17.09.2019
Размер:
339.97 Кб
Скачать

Вариант 35***

Написать программу для работы с перемешанными таблицами, использующими перемешивание сцеплением, по запросам оператора.

Перемешанные таблицы представлены массивами указателей на элементы таблицы. Элементы первой (родительской) таблицы имеют следующую структуру:

struct Parent{

int key; /* ключ элемента */

char *info; /* указатель на информацию */

Parent *next; /* указатель на следующий элемент */

};

Элементы второй (дочерней) таблицы имеют следующую структуру:

struct Child{

int key; /* ключ элемента */

int pkey; /*ключ элемента из родительской таблицы */

char *info; /* указатель на информацию */

Child *next; /* указатель на следующий элемент */

};

Максимальные размеры массивов ограничены (для задания максимального размера использовать константы – например, const int SIZEP = ..., SIZEC = ...;).

Предусмотреть следующие операции:

  • включение нового элемента в родительскую таблицу при условии, что в таблице не может быть двух элементов с одинаковыми ключами;

  • включение нового элемента в дочернюю таблицу при условии, что в таблице также не может быть двух элементов с одинаковыми ключами; кроме того, значение pkey должно совпадать с каким-либо значением key родительской таблицы.

  • удаление элемента из родительской таблицы по заданному ключу. При этом в дочерней таблице не должно быть ни одного элемента, имеющего в поле pkey значение ключа удаляемого элемента;

  • вывод содержимого таблиц на экран.

Если при выполнении операций с таблицами возникает ошибочная ситуация, на экран должно быть выведено соответствующее сообщение об ошибке.

Разработать два варианта программы:

  1. и сами таблицы, и информация, относящаяся к элементам таблиц, хранятся в основной памяти;

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

Примечания:

  1. Программа должна содержать несколько функций; функция main должна выполнять: вывод меню, ввод и анализ ответа, вызов на исполнение требуемой функции;

  2. В программе нужно предусмотреть проверку правильности ввода данных;

  3. Для варианта b) следует модифицировать структуру, определяющую элемент таблицы, включив в нее длину информации и ее смещение в файле;

  4. В варианте b) для работы с файлом использовать функции пакета stdio.h; чтение и запись выполнять с помощью fread() и fwrite(), в которых должна быть указана реальная длина информации.

Вариант 36***

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

Перемешанные таблицы представлены векторами. Элементы первой (родительской) таблицы имеют следующую структуру:

struct Parent{

int key; /* ключ элемента */

char *info; /* указатель на информацию */

Parent *next; /* указатель на следующий элемент */

};

Элементы второй (дочерней) таблицы имеют следующую структуру:

struct Child{

int key; /* ключ элемента */

int pkey; /*ключ элемента из родительской таблицы */

char *info; /* указатель на информацию */

Child *next; /* указатель на следующий элемент */

};

Максимальные размеры векторов ограничены (для задания максимального размера использовать константы – например, const int SIZEP = ..., SIZEC = ...;).

Предусмотреть следующие операции:

  • включение нового элемента в родительскую таблицу при условии, что в таблице не может быть двух элементов с одинаковыми ключами;

  • включение нового элемента в дочернюю таблицу при условии, что в таблице также не может быть двух элементов с одинаковыми ключами; кроме того, значение pkey должно совпадать с каким-либо значением key родительской таблицы.

  • удаление элемента из родительской таблицы по заданному ключу. При этом в дочерней таблице не должно быть ни одного элемента, имеющего в поле pkey значение ключа удаляемого элемента;

  • вывод содержимого таблиц на экран.

Если при выполнении операций с таблицами возникает ошибочная ситуация, на экран должно быть выведено соответствующее сообщение об ошибке.

Разработать два варианта программы:

  1. и сами таблицы, и информация, относящаяся к элементам таблиц, хранятся в основной памяти;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]