Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СПО / Заготовка1

.doc
Скачиваний:
21
Добавлен:
27.12.2015
Размер:
34.82 Кб
Скачать

2

/*

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Лабораторная работа № 1

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Группа:

Студент(-ка):

Дата:

*/

#include <string.h>

#include <malloc.h>

// Структура для хранения объекта в хеш-таблице.

// Содержит целое значение и имя объекта.

struct Var

{

int Value;

char Name[25];

};

#define TAB_SIZE 101 /* Размер таблицы - простое число*/

Var *VarTable = (Var*)malloc(sizeof(Var)*TAB_SIZE);

// Хеш-код с циклическим сдвигом ==============================================

int Hash1(char *str)

{

int h = 0;

for(int i = 0; i < strlen(str); i++)

{

h = (h << 5) | (h >> 27);

h += (int)str[i];

}

return h;

}

//=============================================================================

// Полиномиальный хеш-код (основанный на правиле Горнера) =====================

int Hash2(char *str)

{

const int a = 33 /* 37, 39, 41 */;

int h = 0;

if (strlen(str) >= 1)

{

h = a * (int)str[0];

if (strlen(str) >= 2)

{

h += (int)str[1];

if (strlen(str) >= 3)

{

for(int i = 2; i < strlen(str); i++)

{

h += (int)str[i] + a * h;

}

}

}

}

return h;

}

//=============================================================================

// Сжатое отображение (метод деления)

inline int ModN(int x, int N)

{

int r = x % (N+1);

return r;

}

//=============================================================================

/*

Здесь должен находится Ваш код...

Требуемые функции:

==================

1) Вставка элемента в таблицу

2) Нахождение элемента в таблице по его имени

3) Удаление элемента из таблицы

4) Реализовать механизм разрешения противоречий,

т.е. случай, когда несколько объектов имеют идентичные хеш-коды

4.1) Метод открытой адресации:

а) Линейное зондирование

б) Квадратичное зондирование

4.2) Отдельное связывние (метод цепочек).

5) Реализовать собственную функцию хеширования (или улучшить существующую)

6)

*/

// Алгоритм поиска простых чисел "Решето Эратосфена"

void PrintPrimes(unsigned int n)

{

unsigned int *a = (unsigned int*)malloc(sizeof(int)*n);

for(int i=0; i < n; i++){

a[i] = i;

}

a[1] = 0;

for(int s = 2; s < n; s++){

if(a[s] != 0){

for(int j = s*2; j < n; j += s)

{

a[j] = 0;

}

}

}

for(int i = 0; i < n; i++)

{

if(a[i] != 0)

{

printf("%d\n", a[i]);

}

}

}

int main(int argc, char * argv[])

{

PrintPrimes(10000);

return 0;

}

Соседние файлы в папке СПО