Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

30.11.2010, 00:52. Просмотров 1664. Ответов 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.

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

Работа с файлами (считать очередь, вывести на экран, дополнить ее элементами и перезаписать в фай) - C++
Есть очередь, записаная в файле. Нужно считать ее, вывести на екран, дополнить ее елементами и перезаписать в файл. Я так делаю, но файл не...

Работа с файлами последовательного доступа - C++
Один из пунктов меню программы позволяет текст, вводимый пользователем с клавиатуры, преобразовать в массив строк и записать в текстовый...

Нарушения прав доступа к чтению (работа с файлами) - C++
Пробую реализовать запись в файл: #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; ...

Таблицы прямого доступа в С++ - C++
Здравствуйте ! Нужно разобраться с таблицами прямого доступа . После прочтения теории я понял немногое: например , вот мы создаём массив...

Указатели в файлах прямого доступа - C++
Доброго времени суток имею следующее: FILE *fp; int m={1,2,3,4,5,6,7,8,9,10}; long int g; if((fp=fopen(&quot;test&quot;,...

Линейный список прямого доступа в связанной памяти - C++
Здравствуйте!Помогите пожалуйста. Не могу понять как сделать чтобы все заданные элементы не удалялись. Задание: Удалить последний по...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2010, 00:52
Привет! Вот еще темы с ответами:

Нечетные элементы массива отсортировать методом пузырька, а четные методом прямого доступа - C++
Дан одномерный массив, в нем нечетные элементы отсортировать методом пузырька, а четные методом прямого доступа(или прямого включения, могу...

Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->? - C++
#include &lt;iostream&gt; using namespace std; class random { public: void Set(int b){a=b;} int Get(){return a;} private: ...

работа с файлами прямого доступа - Visual Basic
Проблема с файлами прямого доступа. С самом файле должен быть бред в виде каких-то символов выделенных, которые определяют длину строки. И...

Работа с модулями и файлами прямого доступа - Pascal
Привет! Люди добрые, помогите пожалуйста нарисовать блок-схему для отдельной процедуры, входящей в главную программу. Текст процедуры...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.