Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Marti
Сообщений: n/a
#1

Работа с файлами прямого доступа. Хешированные фай-лы - C++

30.11.2010, 00:52. Просмотров 1401. Ответов 0
Метки нет (Все метки)

Вот недавно перешли на С и препод такуб задачку подкинул , который день голову ломаю...
Необходимо разработать и отладить программу на Си, реализующую методы для работы с файлами прямого доступа.
Для распределения записей в файле используется хеширование на ос-нове функции середины квадрата. Размер таблицы изменяется: 16,32,64 и так далее записей.
Для преодоления коллизий записи в сегменте организуются в виде связанного списка: то есть запись в основной области является заголовком списка записей в области переполнения, куда попадают все записи, всту-пающие в коллизию.
Если число записей начинает превышать число сегментов в 2 раза, то создается новый файл вдвое большего размера, и в него переписываются записи из старого файла с использованием новой функции размещения (количество разрядов в "середине квадрата" увеличивается на 1).

C++
1
2
3
4
5
6
7
8
9
10
11
// Функция рассеивания для файла из 1024 записей и 16 разрядного ключа
int h(unsigned key) {
   unsigned long n, n1;
   int m;
   n = (unsigned long)key * key;
   // Подсчет количества значащих битов в n 
   for (m=0, n1 = n; n1 !=0; m++, n1 >>= 1);
   if (m < 10) return(n); 
   m = (m - 10) / 2; // m - количество битов по краям
   return((n >> m) & 0x3FF);
}
Листинг 1. Пример хеш-функции для целочисленных ключей

Программа должна содержать следующие функции:
• открытие файла file_t openfile(char *name);
• создание файла file_t createfile(char *name);
• закрытие файла int closefile(file_t f);
• поиск записи по ключу int searchrec(file_t f, key_t key);
• добавление новой записи int appendrec(file_t f, data_t data);
• изменение существующей записи updaterec(file_t f, key_t key, data_t newdata);
• удаление записи по ключу deleterec(file_t f, key_t key);
• и другие функции по вашему усмотрению.

Функции должны иметь возможность работы с несколькими файлами одновременно. В случае ошибочных ситуаций устанавливать и проверять глобальную переменную errcode.

Для проверки работоспособности разработанной функции создать тестирующую функцию, в которой необходимо предусмотреть ввод исходных данных с клавиатуры, вывод на печать результатов. Проверить все режимы работы функций и возможность работы с несколькими фай-лами.
Оценить быстродействие операций вставки, удаления записей с ис-пользованием СИНХРОНИЗИРОВАННОГО и обычного режимов работы с файлами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2010, 00:52     Работа с файлами прямого доступа. Хешированные фай-лы
Посмотрите здесь:

C++ Работа с файлами
C++ Указатели в файлах прямого доступа
Работа с файлами (считать очередь, вывести на экран, дополнить ее элементами и перезаписать в фай) C++
Таблицы прямого доступа в С++ C++
Работа с файлами C++
C++ Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->?
C++ Линейный список прямого доступа в связанной памяти
C++ Нечетные элементы массива отсортировать методом пузырька, а четные методом прямого доступа
Работа с файлами C++
Нарушения прав доступа к чтению (работа с файлами) C++
C++ Работа с файлами последовательного доступа

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 16:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru