Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2012, 22:52   #1
Trampompy
Новичок
Джуниор
 
Регистрация: 27.05.2012
Сообщений: 1
По умолчанию Базовый алгоритм поиска (С++)

ВО время компиляции ошибок не выдает, но во время тестов я нашел баг во время ввода элементов массива
вот собственно код программы
Код:
#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");
	}
Что делать сам не знаю, надеюсь на вашу помощь
Trampompy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод "Гусеница": базовый алгоритм Linore Помощь студентам 1 03.04.2012 17:06
Алгоритм поиска Sylar9 Общие вопросы C/C++ 0 03.04.2012 12:38
A* алгоритм поиска Nicko_mt Помощь студентам 2 04.10.2011 02:24
алгоритм поиска незнайка_на_земле Помощь студентам 4 08.03.2011 10:46
Алгоритм поиска... Johnson Общие вопросы Delphi 1 26.10.2008 08:35