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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2014, 20:25   #1
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию Метод пузырьковой сортировки,всегда один и тот же вывод

Здравствуйте,реализую программу по поиску элемента x методом"пузырьковой сортировки",но почему то мне говорит что элемента нет,а на самом деле он есть.Что я делаю не та ?
Код:
{
int i,n,a[100],poz,x;
bool el;
x=StrToInt(Edit2->Text);
for (i=0; i<n; i++)
{
if (a[i]==x)
{
el=true; poz=i; break;
}
}
if (el==true)
{
ShowMessage("Элемент x присутствует в массиве");
Edit3->Text=IntToStr(poz);
}
else
ShowMessage("Элемент x отсутствует в массиве");
}
spectrum988 вне форума Ответить с цитированием
Старый 02.03.2014, 20:28   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Я правильно понимаю, что массив "a" объявлен локально в, скорее всего, обработчике нажатия кнопки?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.03.2014, 20:46   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Да тут и el не инициализируется и n, которая кстати может к некорректному циклу привести.
Локальные переменные надо инициализировать перед чтением из них, запомните на всю жизнь, ну или пока компилятор не станет Вас заставлять это делать.
phomm вне форума Ответить с цитированием
Старый 03.03.2014, 00:07   #4
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

да массив а обьявлен локально,до этого я сортировал массив a"пузырьковым методом" а после чего я реализовал по нажатию кнопки поиск элемента x из массива a
spectrum988 вне форума Ответить с цитированием
Старый 03.03.2014, 00:31   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

То есть у Вас есть функция сортировки со своим локальным массивом и функция поиска элемента со своим?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.03.2014, 00:40   #6
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

да,я попробовал обьявить этот массив a как глобальную переменную,но результата не дало.
spectrum988 вне форума Ответить с цитированием
Старый 03.03.2014, 00:43   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Кхм, то есть Вы надеетесь, что два локальных массива чудесным образом станут одним и тем же? Выложите-ка лучше код полностью, как он сейчас есть.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.03.2014, 00:44   #8
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
n=StrToInt(Edit1->Text);
if(n<100)
{
ShowMessage("Íå ñîîòâåòñòâóåò óñëîâèþ,ìèíèìàëüíûé ìàññèâ 100");
n=100;
Edit1->Text = "100";
}
StringGrid1->ColCount=n;
for(int i=0; i<n;i++)
 StringGrid1->Cells[i][0]=IntToStr(random(20)-10);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 randomize();
 Edit1->Text=IntToStr(n);
 StringGrid1->ColCount=n;
 Label5->Hide();
Edit3->Hide();
 for(int i=0; i<n;i++)
  StringGrid1->Cells[i][0] = IntToStr(random(100));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i,j,r;
n=StrToInt(Edit1->Text);
StringGrid2->ColCount=n;
for(i=0; i<n;i++)
 a[i]=StrToInt(StringGrid1->Cells[i][0]);
for (i = 0; i < n-1; i++)
 for (j = i+1; j < n; j++)
  if (a[i] < a[j])
   {
   r = a[i];
   a[i] = a[j];
   a[j] = r;
   }
for (int i=0; i<n; i++)StringGrid2->Cells[i][0]=IntToStr(a[i]);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
int i,n,poz,x;
bool el;
x=StrToInt(Edit2->Text);
for (i=0; i<n; i++)
{
if (a[i]==x)
{
el=true; poz=i; break;
}
}
if (el==true)
{
ShowMessage("Ýëåìåíò x ïðèñóòñòâóåò â ìàññèâå");
Label5->Show();
Edit3->Show();
Edit3->Text=IntToStr(poz);
}
else
ShowMessage("Ýëåìåíò x îòñóòñòâóåò â ìàññèâå");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close();
}
spectrum988 вне форума Ответить с цитированием
Старый 03.03.2014, 01:10   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
void __fastcall TForm1::Button1Click(TObject *Sender) {
	int n = StrToInt(Edit1->Text);
	if (n < 5) {
		ShowMessage("message");
		n = 5;
		Edit1->Text = "5";
	}
	StringGrid1->ColCount = n;
	for (int i = 0; i < n; i++)
		StringGrid1->Cells[i][0] = IntToStr(random(20) - 10);
}
// ---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender) {
	randomize();
	Edit1->Text = "0";
	StringGrid1->RowCount = 2;
	StringGrid1->ColCount = 0;
	Label5->Hide();
	Edit3->Hide();
}
// ---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender) {
	int i, j, r;
	int *a;
	int n = StrToInt(Edit1->Text);
	a = new int[n];
	for (i = 0; i < n; i++)
		a[i] = StrToInt(StringGrid1->Cells[i][0]);
	for (i = 0; i < n - 1; i++)
		for (j = i + 1; j < n; j++)
			if (a[i] < a[j]) {
				r = a[i];
				a[i] = a[j];
				a[j] = r;
			}
	for (int i = 0; i < n; i++)
		StringGrid1->Cells[i][1] = IntToStr(a[i]);
	delete[]a;
}
// ---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender) {
	int i, n;
	String x;
	n = StrToInt(Edit1->Text);
	x = Edit2->Text;
	for (i = 0; i < n && StringGrid1->Cells[i][1] != x; i++);
	if (i < n) {
		ShowMessage("message1");
		Label5->Show();
		Edit3->Show();
		Edit3->Text = IntToStr(i);
	}
	else
		ShowMessage("message2");
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.03.2014, 12:36   #10
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Спасибо,большое,я уже разобрался со своим кодом,с тем который был,вы были правы,тут моя ошибка(в том что я думал что можно один и тот же массив использовать для двух кнопок)
Скажите,а можно ли чтобы массив,который у меня заполняется рандомом,чтобы его элементы,не повторялись,или это не реально ?

А могу ли я использовать еще такой метод?Правилен ли он?У меня выбивает ошибку возле a[m].
Код:
int m,i_key=0,j_key=n-1;;
x=StrToInt(Edit2->Text);

while(i_key< j_key)
{
m = (i_key+ j_key)/2;
if à[m] < x  i_key= m+1
else         j_key = m;
}
if (a[i_key]==x)
{Label5->Show();
Edit3->Show();
Edit3->Text=IntToStr(i_key);
}
else
ShowMessage("нету");
}

Последний раз редактировалось spectrum988; 03.03.2014 в 14:03.
spectrum988 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему один и тот же код не работает на разных IDE Dfence11 Общие вопросы C/C++ 3 14.04.2013 12:56
Один и тот же ответ Chapik C++ Builder 6 17.09.2012 02:16
Один и тот же код на С++ и С#, Шаблоны, отображение содержимого шаблонного класса pinkiller Общие вопросы .NET 2 01.06.2012 12:22
Блок-схема для метода пузырьковой сортировки Александра1000000 Помощь студентам 1 27.05.2010 19:15
Алгоритм и программа пузырьковой сортировки... Smagulov85 Фриланс 9 20.01.2010 23:37