
СПО / Заготовка1
.doc
/*
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Лабораторная работа № 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;
}