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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2019, 21:37   #1
reetta_ester
Пользователь
 
Регистрация: 31.03.2019
Сообщений: 10
По умолчанию Бинарный поиск в C++Builder

Бинарный поиск в отсортированном по убыванию массиве. Выдает ошибку "is not a valid integer value."
Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int n, c, begin=0, end=n, x, i, a[5000];
x=StrToInt(Edit2->Text);
StringGrid2->ColCount=n;
for(int i=0; i<n; i++)
	{a[i]=StrToInt(StringGrid2->Cells[i][0]);}
		while (begin<end)
		{
		c=begin+(end-begin)/2;
		if (x>a[c]) end=c;
		else if (x<a[c]) begin=c+1;
		else {break; Label6->Caption=c;}
		}
}
reetta_ester вне форума Ответить с цитированием
Старый 04.04.2019, 22:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ошибку выдаёт здесь
Цитата:
Сообщение от reetta_ester Посмотреть сообщение
Код:
a[i]=StrToInt(StringGrid2->Cells[i][0]);
и ошибку выдаёт, потому что у Вас в нулевой строчке грида в каком-то из столбцов занесено не числовое значение.

Возможно, что грид у Вас с заголовками строк/столбцов.
Тогда Вы пытаетесь перевести название строки/столбца в число и, разумеется, выдаётся ошибка.

и исправьте строчку
Цитата:
Код:
StringGrid2->ColCount=n;
раз у Вас данные в гриде, тогда надо наоборот
Код:
n = StringGrid2->ColCount;

Последний раз редактировалось Serge_Bliznykov; 04.04.2019 в 22:38.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.04.2019, 22:51   #3
reetta_ester
Пользователь
 
Регистрация: 31.03.2019
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
и ошибку выдаёт, потому что у Вас в нулевой строчке грида в каком-то из столбцов занесено не числовое значение.
Грид заполнен случайными числами, там не может быть не числовое значение.

Код:
StringGrid2->ColCount=n;
for(int i=0; i<n; i++)
StringGrid2->Cells[i][0]=StringGrid1->Cells[i][0];
reetta_ester вне форума Ответить с цитированием
Старый 05.04.2019, 00:17   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вы меня совсем не поняли.
для начала, исправьте ошибочную строчку
Цитата:
Сообщение от reetta_ester Посмотреть сообщение
Код:
StringGrid2->ColCount=n;
на
Код:
n=StringGrid2->ColCount;
а во-вторых, Вам виднее что в гриде.
но ошибка как раз о том, что Вы пытаетесь не числовое значение преобразовать в число.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2019, 00:30   #5
reetta_ester
Пользователь
 
Регистрация: 31.03.2019
Сообщений: 10
По умолчанию

Строчку исправлю, спасибо, только проблема тут не в ней. И я понимаю, в чем суть ошибки, но я хоть убей не вижу, что именно в коде не так.
reetta_ester вне форума Ответить с цитированием
Старый 05.04.2019, 09:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от reetta_ester Посмотреть сообщение
Строчку исправлю, спасибо, только проблема тут не в ней.
для начала исправьте. запустите код. потом поговорим.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2019, 09:44   #7
reetta_ester
Пользователь
 
Регистрация: 31.03.2019
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
для начала исправьте. запустите код. потом поговорим.
Со строчкой все оказалось правильно. У меня в другом месте прописано, что
Код:
int n=StrToInt(Edit1->Text);
А тут
Код:
StringGrid2->ColCount=n;
уже приравнивается именно количество столбцов к n, а не наоборот.
reetta_ester вне форума Ответить с цитированием
Старый 05.04.2019, 11:04   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от reetta_ester Посмотреть сообщение
уже приравнивается именно количество столбцов к n, а не наоборот.
Ну так это нужно сделать там, где Вы делаете
Код:
int n=StrToInt(Edit1->Text);
вот там и нужно задать количество столбцов в гриде.
ДО ТОГО, как там будут вносится числа.
Кстати, а кто вносит числа?
Докажите (хотя бы для начала скриншотом), что в гриде внесены целые числа в количестве N столбцов в момент нажатия кнопки "Button2Click"
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2019, 15:56   #9
reetta_ester
Пользователь
 
Регистрация: 31.03.2019
Сообщений: 10
По умолчанию

Числа вносит компьютер.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n;
		n=StrToInt(Edit1->Text);
		StringGrid1->ColCount=n;
		for(int i=0; i<n; i++)
		StringGrid1->Cells[i][0]=IntToStr(random(2001)-1000);
			StringGrid2->ColCount=n;
			for(int i=0; i<n; i++)
			StringGrid2->Cells[i][0]=StringGrid1->Cells[i][0];
}
Кроме того, к моменту нажатия Button2 числа уже отсортированы по убыванию.
Изображения
Тип файла: png 1.png (2.5 Кб, 25 просмотров)
reetta_ester вне форума Ответить с цитированием
Старый 05.04.2019, 16:05   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

сделайте так, как я сказал (n=StringGrid2->ColCount; ) и проверьте кнопку Button2
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь в доработке программы на языке паскаль (бинарный поиск, поиск перебором) DimzNOVIchok45 Помощь студентам 0 13.10.2014 20:11
Реализовать два метода поиска строк в массиве: поиск перебором, бинарный поиск на языке Pascal DimzNOVIchok45 Помощь студентам 7 19.09.2014 21:40
бинарный поиск. алексей2011 Помощь студентам 0 01.07.2011 04:32
Бинарный поиск 0IceCube0 Паскаль, Turbo Pascal, PascalABC.NET 1 13.04.2010 15:52