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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 20:02   #1
Klausms
Пользователь
 
Аватар для Klausms
 
Регистрация: 24.10.2011
Сообщений: 38
Восклицание Сортировка

Выкладываю код из лабораторной!
Сортировка : Линейный выбор с обменом(для целочисленного и вещественного массивов)
Для целочисленного всё работает отлично , а вот для вещественного нет!
ОШИБКА УКАЗАНА Во второй функции
Код:
void task1(int*d){ //ЦЕЛОЧИСЛЕННЫЙ
	struct timeb start,finish;
 ftime(&start);

 int jj,min;

	for (i=0;i<n;i++){
 min=d[i];
 jj=i;
 for (j=i;j<n;j++){
 if(d[j]<min){
 min=d[j];
 jj=j;}
 }
 d[jj]=d[i];
 d[i]=min;}
 ftime(&finish);
 
}
void task1(float *d)//ВЕЩЕСТВЕННЫЙ
{
	struct timeb start,finish;
 ftime(&start);

  float jj,min;

	for (i=0;i<n;i++){
 min=d[i];
 jj=i;
 for (j=i;j<n;j++){
 if(d[j]<min){
 min=d[j];
 jj=j;
 }
 }
 d[jj]=d[i]; //ТУТ ОШИБКА : ВЫРАЖЕНИЕ ДОЛЖНО ИМЕТЬ ЦЕЛОЧИСЛЕННЫЙ ИЛИ ПЕРЕЧИСЛЯЕМЫЙ ТИП
 d[i]=min;
	}
 ftime(&finish);
}

Последний раз редактировалось Stilet; 31.03.2012 в 20:45.
Klausms вне форума Ответить с цитированием
Старый 31.03.2012, 20:55   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Вы же используете jj как индекс, поэтому попробуйте так:
Код:
void task1(float *d)//ВЕЩЕСТВЕННЫЙ
{
	struct timeb start,finish;
 ftime(&start);

  int jj;
  float min;

	for (i=0;i<n;i++){
 min=d[i];
 jj=i;
 for (j=i;j<n;j++){
 if(d[j]<min){
 min=d[j];
 jj=j;
 }
 }
 d[jj]=d[i];
 d[i]=min;
	}
 ftime(&finish);
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.03.2012, 21:33   #3
Klausms
Пользователь
 
Аватар для Klausms
 
Регистрация: 24.10.2011
Сообщений: 38
По умолчанию

тысячи благодарностей BDA

еще возникла проблема с выводом времени у отсортированного массива!
Вот например работоспособный код для линейного обмена с подсчетом времени :
Код:
void task1(int*d){
	struct timeb start,finish;
 ftime(&start);
 int jj,min;
	for (i=0;i<n;i++){
 min=d[i];
 jj=i;
 for (j=i;j<n;j++){
 if(d[j]<min){
 min=d[j];
 jj=j;}
 }
 d[jj]=d[i];
 d[i]=min;}
 ftime(&finish);
 for(i=0; i<n; i++)
			cout<<d[i]<<" ";
		cout<<"\n\n";
		 if(finish.millitm < start.millitm)
        t=finish.millitm+1000-start.millitm;
    else 
        t=finish.millitm-start.millitm;
    printf("\nTime: %5d.",finish.time-start.time);
	printf ("%d sec",t);
	cout<<"\n\n";
}
А ВОТ ДЛЯ БЫСТРОЙ СОРТИРОВКИ ЭТО ЖЕ САМОЕ НЕ РАБОТАЕТ ! ВЫВОДИТ ВРЕМЯ РЯДОМ С КАЖДЫМ ОТСОРТИРОВАННЫМ ЧИСЛОМ!
Код:
void task2(float *d, int l, int r){
	struct timeb start, finish;
     ftime(&start);
	float med, temp;
	i=l;
	j=r;
	med=d[(l+r)/2];
	do
	{
		while(d[i]<med) 
			i++;
		while(d[j]>med) 
			j--;
		if (i<=j)
		{
			temp=d[i]; 
			d[i++]=d[j]; 
			d[j--]=temp;
		}
	}
	while(i<=j);
	if(l<j){
		task2(d, l, j);}
	if(i<r){
		task2(d, i, r);
	}
	 ftime(&finish);
	 cout<<d[i]<<" ";
	 cout<<"\n\n";
		 if(finish.millitm < start.millitm)
        t=finish.millitm+1000-start.millitm;
    else 
        t=finish.millitm-start.millitm;
    printf("\nTime: %5d.",finish.time-start.time);
	printf ("%d sec",t);
	cout<<"\n\n";
}

Последний раз редактировалось Stilet; 01.04.2012 в 13:15.
Klausms вне форума Ответить с цитированием
Старый 01.04.2012, 12:40   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Так как вы используете рекурсию (вызов функции из самой функции), то такое поведение естественно для программы.
Сделайте функцию обертку:
функция-обертка (параметры)
{
начало замера времени;
функция сортировки таск2 (параметры);//без учета времени в ней
конец замера времени;
вывод времени на печать;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 01.04.2012, 13:26   #5
Klausms
Пользователь
 
Аватар для Klausms
 
Регистрация: 24.10.2011
Сообщений: 38
По умолчанию

да , спасибо! еще вчера догадался! сделал как ты посоветовал! теперь разобрался!
Klausms вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Быстрая сортировка(сортировка хаора) с++ LustHunter Помощь студентам 3 07.10.2011 19:37
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32