Лабораторная работа №2 Вариант 16
.doc
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №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. Контрольный пример
Список использованной литературы
-
Шилдт Г. Искусство программирования на C++. БХВ.2005
-
Шилдт Г. C++ Руководство для начинающих. Вильямс.2005
-
Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004