Добавил:
Valeriya
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №2 Вариант №16 (только листинг)
.cpp#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
# include <math.h>
struct s
{
int ind;
char p[20];
char n[20];
}*mas, **mas1;
void vvod(int kolvo_el)
{
mas=(s*)malloc(kolvo_el*sizeof(s));
printf("Введите данные:\n ");
for(int i=0;i<kolvo_el;i++)
{
mas[i].ind=i;
printf("Введите mas[%d]:\n", i+1);
scanf("%s", mas[i].p);//1
scanf("%s", mas[i].n);//2
}
}
void sortirovka(int kolvo_el)
{
int p,i,j,k;
s vrem;
for(i=0;i<2;i++)
for(k=0,p=1;k<kolvo_el-1;k++,p++)
for(j=0;j<kolvo_el-p;j++)
{
if(i==0)
if(strcmp(mas1[i][j].p,mas1[i][j+1].p)==1)
{
vrem=mas1[i][j+1];
mas1[i][j+1]=mas1[i][j];
mas1[i][j]=vrem;
}
if(i==1)
if(strcmp(mas1[i][j].n,mas1[i][j+1].n)==1)
{
vrem=mas1[i][j+1];
mas1[i][j+1]=mas1[i][j];
mas1[i][j]=vrem;
}
}
}
int *poisk(int kolvo_el,int *itog)
{
int t=0, i, j, k, p, h, *u1, *u2;
s *bloki;
char str1[20], str2[20];
printf("Введите данные для поиска (1 ключ): ");
scanf("%s", str1);
printf("Введите данные для поиска (2 ключ): ");
scanf("%s", str2);
p=(int)sqrt((double)kolvo_el);
u1=(int*)malloc(kolvo_el*sizeof(int));
u2=(int*)calloc(kolvo_el,sizeof(int));
for(i=0;i<kolvo_el;i++)
u1[i]=u2[i]=-1;
bloki=(s*)malloc(p*sizeof(s));
for(j=kolvo_el-1,k=p-1;j>0;j-=p,k--)
bloki[k]=mas1[0][j];
for(j=p-1,k=0;k<p;j+=p,k++)
if(strcmp(bloki[k].p,str1)==1)
{
for(i=j,h=0;i>-1;i--)
{
if(strcmp(mas1[0][i].p,str1)==0)
{
u1[h]=mas1[0][i].ind;
h++;
}
if(strcmp(mas1[0][i].p,str1)==-1)
break;
}
break;
}
for(j=kolvo_el-1,k=p-1;j>0;j-=p,k--)
bloki[k]=mas1[1][j];
for(j=p-1,k=0;k<p;j+=p,k++)
if(strcmp(bloki[k].n,str2)==1)
{
for(i=j,h=0;i>-1;i--)
{
if(strcmp(mas1[1][i].n,str2)==0)
{
u2[h]=mas1[1][i].ind;
h++;
}
if(strcmp(mas1[1][i].n,str2)==-1)
break;
}
break;
}
for(i=0;i<kolvo_el;i++)
{
if(u1[i]==-1)
break;
for(j=0;j<kolvo_el;j++)
if(u1[i]==u2[j])
{
itog[t]=u1[i];
t++;
break;
}
}
free(u1);
free(u2);
free(bloki);
return itog;
}
void main()
{
setlocale(LC_ALL, "Rus");
int i, j, kolvo_el,*itog;
printf("Сколько элемнтов будет в информационном массиве? ");
scanf("%d", &kolvo_el);
vvod(kolvo_el);
mas1=(s**)malloc(2*sizeof(s*));
for(i=0;i<2;i++)
mas1[i]=(s*)malloc(kolvo_el*sizeof(s));
for(i=0;i<2;i++)
for(j=0;j<kolvo_el;j++)
mas1[i][j]=mas[j];
sortirovka(kolvo_el);
itog=(int*)calloc(kolvo_el,sizeof(int));
for(i=0;i<kolvo_el;i++)
itog[i]=-1;
itog=poisk(kolvo_el,itog);
printf("Результаты поиска:\n");
for(i=0;i<kolvo_el;i++)
{
if(itog[i]==-1)
break;
printf("%s %s\n",mas[itog[i]].p,mas[itog[i]].n);
}
if(i==0)
printf("Поиск не дал результатов.");
free(mas);
free(mas1);
free(itog);
getch();
}
Соседние файлы в предмете Технология программирования