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

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

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

2

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

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

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

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

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

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

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

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

Студент

Ельшаева Н.А.

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

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

Группа

АС-09

Принял

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

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

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

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

Липецк 2010

1. Задание

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

16

char[], char[]

1

-

2.е

Многоаспектный поиск с использованием инверсных массивов (2.е)

Данные хранятся во внешней памяти. Среди записей выделяют поля, по которым может быть осуществлен запрос на многоаспектный поиск. Пусть имеется m таких полей. Создается m копий информационного массива, каждая из которых сортируется по одному из m ключевых полей и называется инверсным массивом. Для осуществления поиска по аргументу, состоящему из m ключей, в каждой из копий информационного массива проводится поиск по соответствующему ключевому полю. Над полученными m множествами записей проводится операция теоретико-множественного пересечения.

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

i++

i++

да

нет

printf("Данные не найдены!");

setlocale(LC_ALL,"Rus");

i=0

min.s1[0]='Z';

i++

i=0

i++

printf("По какой строке вы хотите делать поиск? Первой(1) или второй(2): ");

нет

да

нет

да

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

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<locale.h>

#include<string.h>

struct Inf

{

char s1[20];

char s2[20];

};

struct Inf* Zap(struct Inf *str, int n)

{

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

{

printf("Введите первую строку %d элемента: ",i);

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

printf("Введите вторую строку %d элемента: ",i);

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

}

return str;

}

void find(struct Inf *str,int n, int nom)

{

char s[20];

int key=0;

printf("Введите искoмую строку:");

scanf("%s",&s);

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

if((nom==1)&&(strcmp(str[i].s1,s)==0))

{

key=1;

printf("\nСтрока найдена:\nПервая строка в элементе: %s\nВторая:%s",str[i].s1,str[i].s2);

}

else if((nom==2)&&(strcmp(str[i].s2,s)==0))

{

key=1;

printf("\nСтрока найдена:\nПервая строка в элементе: %s\nВторая:%s",str[i].s1,str[i].s2);

}

if(key!=1)

printf("Данные не найдены!");

}

void main()

{

setlocale(LC_ALL,"Rus");

Inf *str,*str1,*str2, min, dop;

int n,i,j,key,h=0,p;

printf("Введите кол-во элементов: ");

scanf("%d",&n);

str=(struct Inf*)malloc(n*sizeof(struct Inf));

str1=(struct Inf*)malloc(n*sizeof(struct Inf));

str2=(struct Inf*)malloc(n*sizeof(struct Inf));

str=Zap(str,n);

str1=str2=str;

for(i=0;i<n;i++)//сортировка первой таблицы по второй строке

{

min.s1[0]='Z';

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

{

key=0;

for(int l=0;l<20;l++)

if((key!=1)&&(str1[j].s1[l]<min.s1[l]))

{

min=str1[j];

h=j;

key=1;

}

else if((key!=1)&&(str1[j].s1[l]==min.s1[l]))

key=0;

else

key=1;

}

dop=str1[h];

str1[h]=str1[i];

str1[i]=dop;

}

for(i=0;i<n;i++)//сортировка второй таблицы по второй строке

{

min.s2[0]='Z';

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

{

key=0;

for(int l=0;l<20;l++)

if((key!=1)&&(str2[j].s2[l]<min.s2[l]))

{

min=str2[j];

h=j;

key=1;

}

else if((key!=1)&&(str2[j].s2[l]==min.s2[l]))

key=0;

else

key=1;

}

dop=str1[h];

str2[h]=str2[i];

str2[i]=dop;

}

printf("По какой строке вы хотите делать поиск? Первой(1) или второй(2): ");

scanf("%d",&p);

if(p==1)

find(str1,n,p);

else

find(str2,n,p);

getch();

}

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

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

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

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

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