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

Лабораторная работа №2 Вариант 21

.doc
Скачиваний:
13
Добавлен:
20.06.2014
Размер:
423.94 Кб
Скачать

2

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

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

по дисциплине

«Технология программирования»

на тему:

«Программирование алгоритмов поиска»

Студент

подпись, дата

фамилия, инициалы

Группа

Принял

Домашнев П.А.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2010

  1. Задание

№ п/п

  1. Формат ключа

Вид поиска:

1 - по совпадению

2 – по интервалу

3 – по выражению

Формат неключевых полей записи

Метод поиска

21

  1. int

1

char[], float

2.д, первый способ

  1. Листинг программы

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <locale.h>

#include <time.h>

struct dann{

int key;

float mas[5];

char str[20];

};

struct dann* vvod_dann(int *N)

{

int i;

struct dann *A;

printf("Введите количество элементов в информационном массиве: ");

scanf("%d",N);

A=(struct dann*)malloc(*N*sizeof(struct dann));

srand((unsigned)time(NULL));

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

{

for(int j=0;j<5;j++)

A[i].mas[j]=(float)rand()/100;

printf("Введите ключ %d: ",i);

scanf("%d", &A[i].key);

printf("Введите строку %d: ",i);

scanf("%s", &A[i].str);

}

return A;

}

int** hesh(struct dann *A,int N)

{

int **hesh_tabl,p;

hesh_tabl=(int**)malloc(1000*sizeof(int*));

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

{

hesh_tabl[i]=(int*)malloc(2*sizeof(int));

hesh_tabl[i][0]=0;

hesh_tabl[i][1]=0;

}

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

{

p=A[i].key%1000;

if(hesh_tabl[p][0]==0)

{

hesh_tabl[p][0]=A[i].key;

hesh_tabl[p][1]=i;

}

else

{

while((hesh_tabl[p][0])!=0)

p++;

hesh_tabl[p][0]=A[i].key;

hesh_tabl[p][1]=i;

}

}

return hesh_tabl;

}

void find(struct dann *A, int **tabl, int N)

{

int key,p=0,k;

printf("Введите искомое значение: ");

scanf("%d",&key);

k=key%1000;

if(tabl[k][0]==key)

p=1;

else

{

while(tabl[k][0]!=key)

k++;

p=1;

}

if(p==1)

{

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

printf("\nInf_mas[%d].mas[%d]=%f",tabl[k][1],i,A[tabl[k][1]].mas[i]);

printf("\n%s",A[tabl[k][1]].str);

}

}

void main()

{

setlocale(LC_ALL,"Rus");

int **hesh_tabl,N,i,j;

struct dann *Inf_mas;

Inf_mas=vvod_dann(&N);

hesh_tabl=hesh(Inf_mas,N);

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

{

for(j=0;j<5;j++)

printf("%f *|* ",Inf_mas[i].mas[j]);

printf("\nInf_mas[%d].key= %d\n\n",i,Inf_mas[i].key);

}

find(Inf_mas,hesh_tabl,N);

getch();

}

  1. Контрольный пример

  1. Блок-схема

5. Вывод

При выполнении данной лабораторной работы я получил навыки программирования методов поиска.

  1. Список использованной литературы

  1. Шилдт Г. Искусство программирования на C++. БХВ.2005

  2. Шилдт Г. C++ Руководство для начинающих. Вильямс.2005

  3. Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004