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

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

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

2

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

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

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

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

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

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

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

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

на тему:

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

Студент

Понарьин С.Н.

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

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

Группа

АС-09

Принял

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

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

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

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

Липецк 2010

  1. 1. Задание:

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

№ п/п

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

Вид поиска:

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

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

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

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

Метод поиска

17

  1. char[]

1

float

2.г

    1. Поиск по двоичному дереву (2.г)

Осуществляется в соответствии с принципами, по которым построено дерево поиска (см. п. 1.1.1). Первое обращение производится в корень. Если текущий элемент (из узла дерева, в начале – из корня) меньше аргумента, следующим будет рассматриваться правое поддерево; если текущий элемент больше аргумента, следующим будет рассматриваться левое поддерево; если при попытке осуществить переход по левой или правой обнаруживается, что ссылка отсутствует, результат поиска является отрицательным. Наименьшее число сравнений, требующееся при поиске в двоичном сбалансированном дереве, log2N.

  1. 2. Блок-схема программы

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

#include <conio.h>

#include <stdio.h>

#include <locale.h>

#include <stdlib.h>

#include <string.h>

typedef struct baza

{

char word[15];

float value;

};

typedef struct tree

{

baza w;

struct tree *left;

struct tree *right;

};

tree *Addtree(tree *root, baza new_el)

{

if (root==NULL)

{

root=(tree*)malloc(sizeof(tree));

root->left=root->right=NULL;

root->w=new_el;

return root;

}

if(strcmp(root->w.word,new_el.word)<0)

root->right=Addtree(root->right,new_el);

if(strcmp(root->w.word,new_el.word)>0)

root->left=Addtree(root->left,new_el);

return root;

}

int Search(tree *root, char *key)

{

if(root==NULL)

{

printf("\n\n----------------------------------------");

printf("\nПоиск не дал результатов");

return 0;

}

if(strcmp(root->w.word,key)<0)

Search(root->right,key);

if(strcmp(root->w.word,key)>0)

Search(root->left,key);

if(strcmp(root->w.word,key)==0)

{

printf("\n\n----------------------------------------");

printf("\nРезультат поиска:\n\n%s ",root->w.word);

printf("%f",root->w.value);

}

}

void main()

{

setlocale(LC_ALL,"Rus");

int n,i;

printf("Введите количество данных: ");

scanf("%d",&n);

char key[15];

baza *masstruct;

tree *root;

root=NULL;

masstruct=(baza*)malloc(sizeof(baza)*n);

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

{

printf("\nВведите слово %d: ",i+1);

scanf("%s",masstruct[i].word);

printf("Число %d: ",i+1);

scanf("%f",&masstruct[i].value);

root=Addtree(root,masstruct[i]);

}

printf("\nВведите элемент поиска: ");

scanf("%s",key);

Search(root,key);

free(masstruct);

getch();

}

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