Помогите-не идет программа в C++Builder 6.
Очень надо как можно быстрее сделать, а я в ступоре-вроде должно быть все правильно( синтаксис ошибок не выдает точно). Понимаю, что многовато, но может кто-нибудь глянет..
Суть программы-2 метода сортиовки и 2 поиска в однострочном массиве. И по ходу дела надо высчитывать сколько перестановок и сравнений он делает.
Буду очень благодарна, если поможете. А то тут у нас универ с Горным сливается и всех с долгами отчисляют(((((
---
Очень надо как можно быстрее сделать, а я в ступоре-вроде должно быть все правильно( синтаксис ошибок не выдает точно). Понимаю, что многовато, но может кто-нибудь глянет..
Суть программы-2 метода сортиовки и 2 поиска в однострочном массиве. И по ходу дела надо высчитывать сколько перестановок и сравнений он делает.
Буду очень благодарна, если поможете. А то тут у нас универ с Горным сливается и всех с долгами отчисляют(((((
---
Код:
void OtbSort (int a[], int N, int *Srv, int *Per)
{ int min,index,temp;
for (int i = 0; i < N - 1; i++)
{
//задаем начальные значения
min = a[i];
index = i;
//цикл перебора элементов массива
for (int j = i; j < N+1; j++)
{
//находим минимальный элемент
if (min > a[j])
{
//запоминаем минимальный элемент и его индекс
min = a[j];
index = j;
}
}
//меняем элементы массива местами
temp = a[i];
a[i] = a[index];
a[index] = temp;
*Srv +=1;
*Per +=1;
}
}
// }
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//*****сортировка вставками*****
void VstSort(int a[], int size, int *Srv, int *Per)
{
int x, i, j;
for (i=0; i<size; i++)
{ // цикл проходов, i - номер прохода
x=a[i];
*Srv+=1; //количество сравнений
// поиск места элемента в готовой последовательности
for (j=i-1; j>=0 && a[j]>x; j--)
{
a[j+1]=a[j]; // сдвигаем элемент направо, пока не дошли
*Srv+=1;
*Per+=1; //количество перестановок
}
// место найдено, вставить элемент
a[j+1]=x;
}
}//**********
//*****заполнить(fill) массив из неотсортированного поля*****
void fillMas1 (int a[])
{
int i;
for (i=0; i<=9; i++)//присваиваем значения из Memo1 в массив
{
a[i]=StrToInt(Form1->Memo1->Lines->Strings[i]);
}
}//**********
//*****заполнить(fill) массив из отсортированного поля*****
void fillMas2 (int a[])
{
int i;
for (i=0; i<=9; i++)//присваиваем значения из Memo2 в массив
{
a[i]=StrToInt(Form1->Memo2->Lines->Strings[i]);
}
}//**********
//*****заполнить(fill) поле отсортированным массивом*****
void fillMas3 (int a[])
{
int i;
for (i=0; i<=9; i++)//присваиваем массив в Memo2
{
Form1->Memo2->Lines->Strings[i]= a[i];
}
}//**********
//*****Прямой поиск*****
int Wan (int a[], int x, int *kol)
{ //(массив, число которое ищем, количество операций)
int i;
for (i=0; i<10; i++)
{ //сравнивая с каждым элементом массива ищем искомое число
*kol+=1; //считаем количество операций
if (x==a[i]) return i; //если нашли х возвращаем его место
}
return -1; //если искомого числа в массиве нет - возвращаем -1
}//**********
//*****Бинарный поиск*****
int Bi(int a[], int x, int *kol)
{
int up=0, down=10, i;//i - номер проверяемой ячейки
while (up<=down){ //up и down - верхняя и нижняя граница массива
*kol+=1; //количество операций
i = up+(down-up)/2;
if (x==a[i]) return i;
if (x>a[i]) up=i+1;
else down=i-1;
}
return -1; //если искомый элемент не найден, возвращаем -1
}//**********
//---------------------------------------------------------------------------
void __fastcall TForm1::otbClick(TObject *Sender)
{ //сортировка Отбором
int Mas[10], N=10, Srv=0, Per=0;
fillMas1(Mas);//функция заполнит массив значениями из не отсортированного поля
OtbSort (Mas,N,&Srv,&Per);//функция сортировки Вставками
fillMas3 (Mas);//функция заполнит поле сортированным массивом
Edit1->Text= Srv;//вывод количества сравнений
Edit2->Text= Per;//вывод количества перестановок
Edit3->Text= Srv +10*Per;//вывод эффективности
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Poisk1Click(TObject *Sender)
{
//прямой поиск в неупорядоченном массиве
int Mas[10], x, kol=0, t=0;
x = StrToInt(zpr->Text);//присваиваем переменной число, которое собираемся найти
fillMas1(Mas);//функция заполнит массив значениями из не отсортированного поля
t = Wan(Mas,x,&kol);/* функция возвратит значение строки искомого элемента и присвоит переменной kol количество операций затраченных на поиск числа. Если возвращаемое значение равно -1, это значит что искомого числа нет в массиве, и его позиция в строке будет значиться как N */
Edit4->Text=kol; //выводим количество операций
if (t != -1) Edit5->Text=t+1; else Edit5->Text="N";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Poisk2Click(TObject *Sender)
{
//прямой поиск в упорядоченном массиве
int Mas[10], x, kol=0, t=0;
if (Form1->Memo2->Lines->Strings[0] == "")//перед поиском проверим отсортированность массива
{//если массив не отсортирован - выведем на экран сообщение
ShowMessage("ОТСОРТИРУЙТЕ массив");
return;
}
x=StrToInt(zpr->Text);//присваиваем переменной число, которое собираемся найти
fillMas2(Mas);//функция заполнит массив значениями из отсортированного поля
t=Wan(Mas,x,&kol);/* функция возвратит значение строки искомого элемента и присвоит переменной kol количество операций затраченных на поиск числа. Если возвращаемое значение равно -1, это значит что искомого числа нет в массиве, и его позиция в строке будет значиться как N */
Edit9->Text=kol; //выводим количество операций
if (t != -1) Edit11->Text=t+1; else Edit11->Text="N";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Poisk3Click(TObject *Sender)
{
//бинарный поиск в упорядоченном массиве
int Mas[10], x, kol=0, t=0;
if (Form1->Memo2->Lines->Strings[0] == "")//перед поиском проверим отсортированность массива
{//если массив не отсортирован - выведем на экран сообщение
ShowMessage("ОТСОРТИРУЙТЕ массив");
return;
}
x = StrToInt(zpr->Text);//присваиваем переменной число, которое собираемся найти
fillMas2(Mas);//функция заполнит массив значениями из отсортированного поля
t = Bi(Mas,x,&kol);/* функция возвратит значение строки искомого элемента и присвоит переменной kol количество операций затраченных на поиск числа. Если возвращаемое значение равно -1, это значит что искомого числа нет в массиве, и его позиция в строке будет значиться как N */
Edit12->Text=kol; //выводим количество операций
if (t != -1) Edit12->Text=t+1; else Edit12->Text="N";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::vstClick(TObject *Sender)
{
//сортировка Вставками
int Mas[10], N=10, Srv=0, Per=0;
fillMas1 (Mas);//функция заполнит массив значениями из не отсортированного поля
VstSort (Mas,N,&Srv,&Per);//функция сортировки Вставками
fillMas3 (Mas);//функция заполнит поле сортированным массивом
Edit1->Text= Srv;//вывод количества сравнений
Edit2->Text= Per;//вывод количества перестановок
Edit3->Text= Srv +10*Per;//вывод эффективности
}
//---------------------------------------------------------------------------
void __fastcall TForm1::vihClick(TObject *Sender)
{
Close();//закрытие программы
}
//-----------------------------------