25.09.2011, 18:37 | #1 (permalink) |
Новичок
Регистрация: 25.09.2011
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите-не идет программа в C++Builder 6.
Суть программы-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();//закрытие программы } //----------------------------------- |
25.09.2011, 18:37 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Возможно, что решение вашего вопроса обсуждалось в похожих темах Не идет напряжение к IDE устройствам Игра как-то быстро идет Программирование в среде C++Builder не могу понять где ошибка Помогите пожалуйста решить задачки на C++Builder 6. Заранее благодарю Модульное программирование в Borland Builder С++ Нарисуем звезду в builder 6 C++ |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|