ВО время компиляции ошибок не выдает, но во время тестов я нашел баг во время ввода элементов массива
вот собственно код программы
Код:
#include<iostream>
#include "stdio.h"
#include<malloc.h>
#include <math.h>
struct Info
{
float f_chislo[3];
int i_chislo_1;
int i_chislo_2;
char c_znak;
};
struct Ctatia
{
struct Info inform;
float key;
};
int main()
{
setlocale(LC_ALL,"rus");
printf("Введите количество информационных полей ");
int inf_polei;
scanf("%d",&inf_polei);
struct Info *Information;
Information=(struct Info*)malloc(inf_polei*sizeof(struct Info));
for(int a=0;a<inf_polei;a++)
{
printf("Введите 3 элемента %d поля типа float:",a+1);
//for(int b=0;b<3;b++)
//{
scanf("%f",&Information[a].f_chislo[0]);
scanf("%f",&Information[a].f_chislo[1]);
scanf("%f",&Information[a].f_chislo[2]);
// printf("\n");
//}
printf("Введите 2 знака %d поля для int:",a+1);
scanf("%d",&Information[a].i_chislo_1);
scanf("%d",&Information[a].i_chislo_2);
printf("\n");
printf("Введите символ %d поля:",a+1);
scanf("%c",&Information[a].c_znak);
printf("\n");
}
for(int a=1;a<inf_polei;a++)
for(int b=inf_polei-1;b>=a;b--)
if(Information[b-1].f_chislo[2]>Information[b].f_chislo[2])
{
struct Info going_parametr=Information[b-1];
Information[b-1]=Information[b];
Information[b]=going_parametr;
}
int sqr=(int)sqrt((double)inf_polei);
struct Ctatia *statia;
statia=(struct Ctatia*)malloc(sqr*sizeof(struct Ctatia));
int b=0;
for(int a=0;a<inf_polei;a=a+sqr)
{
if(a+sqr<inf_polei)
{
statia[b].inform=Information[a];
statia[b++].key=Information[a+sqr-1].f_chislo[2];
}
else
{
statia[b].inform=Information[a];
statia[b++].key=Information[inf_polei-1].f_chislo[2];
}
}
printf("Введити число которое хотите найти:");
float search;
scanf("%f",&search);
printf("\n");
int searc=-1;
for(int a=0;a<inf_polei/sqr;a++)
if(statia[a].key>search)
{
searc=a;
break;
}
if(searc==-1)
return 0;
struct Info *find;
int a=0;
int s;
if(searc==b-1)
{
find=(struct Info*)malloc((inf_polei-sqr*searc)*sizeof(struct Info));
for(int c=sqr*searc;c<inf_polei;c++)
find[a++]=Information[c];
s=inf_polei-sqr*searc;
}
else
{
find=(struct Info*)malloc(sqr*sizeof(struct Info));
for(int c=sqr*searc;c<sqr*searc+sqr;c++)
find[a++]=Information[c];
s=sqr;
}
printf("Выберите способ поиска.\n1) По совпадения \n2)По интервалу\n");
int n;
scanf("%d",n);
switch(n)
{
case 1:
int g;
for(g=0;g<s;g++)
if(search==find[g].f_chislo[2])
{
printf("%f %f %f %d %d %c ",find[g].f_chislo[0],find[g].f_chislo[2],find[g].f_chislo[2],find[g].i_chislo_1,find[g].i_chislo_2,find[g].c_znak);
}
if(g==s)
printf("Такого элемента нет");
case 2:
int left;
int right;
for(int g=0;g<s;g++)
if(find[g].f_chislo[2]>search)
{
right=g;
break;
}
for(int g=s-1;g>-1;g++)
if(find[g].f_chislo[2]<search)
{
left=g;
break;
}
if(left==-1 || right==-1)
printf("Такого элемента нет");
else
for(int y=left+1;y<right;y++)
printf("%f %f %f %d %d %c ",find[y].f_chislo[0],find[y].f_chislo[2],find[y].f_chislo[2],find[y].i_chislo_1,find[y].i_chislo_2,find[y].c_znak);
}
return 0;
}
ошибка замечена вот в этом участке кода
Код:
for(int a=0;a<inf_polei;a++)
{
printf("Введите 3 элемента %d поля типа float:",a+1);
//for(int b=0;b<3;b++)
//{
scanf("%f",&Information[a].f_chislo[0]);
scanf("%f",&Information[a].f_chislo[1]);
scanf("%f",&Information[a].f_chislo[2]);
// printf("\n");
//}
printf("Введите 2 знака %d поля для int:",a+1);
scanf("%d",&Information[a].i_chislo_1);
scanf("%d",&Information[a].i_chislo_2);
printf("\n");
printf("Введите символ %d поля:",a+1);
scanf("%c",&Information[a].c_znak);
printf("\n");
}
Что делать сам не знаю, надеюсь на вашу помощь