Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
20.06.2014
Размер:
86.53 Кб
Скачать

7

Задание:

Написать программу, осуществляющую поиск элемента (элементов) в последовательности из входного файла. Имя входного файла вводится пользователем. На экране пользователю должны отображаться исходная последовательность и найденный элемент (элементы) с указанием их номера в последовательности. Формат входного файла – текстовый. Количество записей в файле неограниченно.

Если для алгоритма поиска необходима отсортированная последовательность, то использовать метод из первой лабораторной работы.

Алгоритм поиска:

  1. хеширование;

  2. целые числа;

  3. совпадение;

Алгоритм решения:

  • Считывать последовательность, сразу хешируя и занося в нужную ячейку памяти;

  • Ввести нужный элемент;

  • По хеш – коду найти ему соответствующий в последовательности.

  • Вывести найденный (если есть) элемент и его номер на экран;

Решение:

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

struct data

{

struct data *next;

int base;

int number;

} element, *variable, mas[11], *bridge, find, *following, *cur, *curs;

void main (void)

{

FILE *whence;

int N, i, hash;

char name[40];

puts ("Enter a name of a file, from which the data will be read out:");

scanf ("%s", name);

whence=fopen(name, "r");

puts ("Enter quantity of elements:");

scanf ("%d", & N);

puts ("Enter an element, which you want to find:");

scanf ("%d", & element.base);

puts ("\n");

bridge=(struct data*)malloc(sizeof(struct data));

for (i=0; i<N; i++)

{

fscanf (whence, "%d\n", & bridge->base);

printf ("%d\n", bridge->base);

variable=bridge;

hash=(bridge->base)%11;

if (mas[hash].number==0)

{

mas[hash].base=variable->base;

mas[hash].number=i+1;

mas[hash].next=NULL;

}

else

{

following=&mas[hash];

for (;;)

{

if (following->next==NULL)

{

variable=(struct data*)malloc(sizeof(struct data));

variable->base=bridge->base;

variable->next=NULL;

variable->number=i+1;

following->next=variable;

break;

}

else

following=following->next;

}

}

}

hash=(element.base)%11;

find=mas[hash];

for(;;)

{

if (element.base==find.base)

{

printf ("Required element: %d\n", find.base);

printf ("Number of an element: %d\n", find.number);

if (find.next==NULL)

break;

else

find=*find.next;

}

else

{

if (find.next!=NULL)

find=*find.next;

else

break;

}

}

for (i=0; i<11; i++)

{

if (mas[i].next==NULL)

continue;

else

{

curs=mas[i].next;

if (curs->next!=NULL)

{

for (;;)

{

cur=curs;

if (cur->next==NULL)

{

free (cur);

break;

}

else

{

curs=cur->next;

free (cur);

}

}

}

}

}

free (bridge);

fclose (whence);

getch();

}

Screen short: