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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2013, 18:07   #11
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Потому что функция is_less неправильная.
Код:
bool is_less(UCHENIK u1, UCHENIK u2){
  //Если класс первого ученика меньше класса второго - вернуть true
  //Если класс первого ученика больше класса второго - вернуть false
  //Если фамилия первого ученика меньше фамилии второго - вернуть true
  //Вернуть false
}
Abstraction вне форума Ответить с цитированием
Старый 23.04.2013, 18:32   #12
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Да такая запись функции преподаватилю не нравиться(( я уже так делал
Код:
bool is_less(const UCHENIK, const UCHENIK){
	for(int j=0; j<n; j++)
  {
   for(int k=0; k<n; k++)
    {
     if((Uchen[j].klass)<(Uchen[k].klass))
		return true;
	 else 
		 return false;	 
 {int j,k;
 for(j=0; j<n; j++)
  {
   for(k=0; k<n; k++)

 {if(strcmp(Uchen[j].SURNAME,Uchen[k].SURNAME)<0)
      return true;
 else 
	 return false;
   }
 }
 }
   }
	}
 }
majuw вне форума Ответить с цитированием
Старый 23.04.2013, 18:53   #13
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Подсказка: эта функция вообще-то пишется в четыре строчки, по одной на каждый комментарий.
Кто такие Ваши j и k - я не понимаю в упор. Как Ваша функция работает - тоже (по идее, она должна всегда возвращать false), а комментариев Вы не предусмотрели.
Abstraction вне форума Ответить с цитированием
Старый 23.04.2013, 19:19   #14
Vasya94
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 55
По умолчанию

Как то так ?
Код:
bool is_less(UCHENIK u1, UCHENIK u2)
 { if((u1.klass)<(u2.klass))
		return true;
	 else 
		 return false;	 
 {if(strcmp(u1.SURNAME,u2.SURNAME)<0)
      return true;
 else 
	 return false;
 }
 }

Последний раз редактировалось Vasya94; 23.04.2013 в 19:22.
Vasya94 вне форума Ответить с цитированием
Старый 23.04.2013, 19:23   #15
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

А нельзя как-то по-меньше?

Всеравно не работает етот код
Код:
bool is_less(UCHENIK u1, UCHENIK u2)
 { if((u1.klass)<(u2.klass))
		return true;
	 else 
		 return false;	 
 {if(strcmp(u1.SURNAME,u2.SURNAME)<0)
      return true;
 else 
	 return false;
 }
 }
Помогите пожалуйста!!

Вот сделал чуть-чуть по другому и всеравно не работает((
Код:
bool is_less(UCHENIK u1, UCHENIK u2)
 { if((u1.klass)<(u2.klass)&&(strcmpi(u1.SURNAME,u2.SURNAME)<0))
		return true;
	 else 
		 return false;	 
 
 }
Может что-то нужно изменить сдесь?
Код:
void surnameklass()
{int j,k,i;
 UCHENIK p;
 for(j=0; j<n; j++)
  {
   for(k=0; k<n; k++)
    {
     if( is_less(Uchen[j], Uchen[k]))
      {
       p=Uchen[j];
       Uchen[j]=Uchen[k];
       Uchen[k]=p;
	 }
   }
 }
}
Что никто не может помочь?

Последний раз редактировалось Stilet; 23.04.2013 в 21:45.
majuw вне форума Ответить с цитированием
Старый 23.04.2013, 22:20   #16
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Так что поможет кто-то с сортировкой по фамилии и по классу? Мой вариант криво работает(
Код:
bool is_less(UCHENIK u1, UCHENIK u2)
 { if((u1.klass)<(u2.klass)&&(strcmpi(u1.SURNAME,u2.SURNAME)<0))
		return true;
	 else 
		 return false;	 
 
 }
majuw вне форума Ответить с цитированием
Старый 24.04.2013, 09:36   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Так что поможет кто-то с сортировкой по фамилии и по классу? Мой вариант криво работает(
С не знаю.
Но, чисто умозрительно, когда идёт сортировка по двум (и более значениям), то она происходит так, сравниваем значения по первому параметру (по классу)
если они не равны, то устанавливаем признак "больше"/"меньше" в зависимости от u1.klass < u2.klass. Значение второго (и других) параметров нас в данном случае НЕ ИНТЕРЕСУЮТ.
И только в том случае, когда параметры СОВПАДАЮТ, тогда сравниваем между собой вторые параметры.

т.е. Вам нужно записать так:
Код:
bool is_less(UCHENIK u1, UCHENIK u2)
 { if((u1.klass<u2.klass) || ( (u1.klass==u2.klass) &&(strcmpi(u1.SURNAME,u2.SURNAME)<0)))
		return true;
	 else 
		 return false;	 
 
 }
или даже так:
Код:
bool is_less(UCHENIK u1, UCHENIK u2)
{
  return (u1.klass<u2.klass) || ( (u1.klass==u2.klass) &&(strcmpi(u1.SURNAME,u2.SURNAME)<0));
}

p.s. с синтаксисом/скобками я мог напортачить...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.04.2013, 10:41   #18
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Как то так ?
Код:
bool is_less(UCHENIK u1, UCHENIK u2)
 { if((u1.klass)<(u2.klass))
		return true;
	 else 
		 return false;	 
 {if(strcmp(u1.SURNAME,u2.SURNAME)<0)
      return true;
 else 
	 return false;
 }
 }
Нет. Как Вы должны бы знать, выполняется либо if, либо else. То есть, в Вашем коде дальше первого if-else дело не пойдёт.

Блин, ну что, так сложно тупо написать строки кода по комментариям?!
Код:
bool is_less(UCHENIK u1, UCHENIK u2){
  //Если класс первого ученика меньше класса второго - вернуть true
  if(u1.klass < u2.klass) return true;
  //Если класс первого ученика больше класса второго - вернуть false
  if(u1.klass > u2.klass) return false;
  //Если фамилия первого ученика меньше фамилии второго - вернуть true
  if(strcmpi(u1.SURNAME, u2.SURNAME) < 0) return true;
  //Вернуть false
  return false;
}
Кто хочет (и может!) оптимизировать - может оптимизировать. Предварительное задание: понять, почему предыдущие варианты, за вычетом написанных Serge_Bliznykov, логически не эквивалентны приведённому мной коду.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить записи из таблицы, если дата в записи старше 30 дней Aleksandr БД в Delphi 10 28.03.2013 21:33
Оцените математической формулой, насколько больше цифр в двоичной записи большого числа, чем в его десятичной записи. Анюта.Хом Помощь студентам 1 02.12.2011 23:13
Записи Т@нзиля Помощь студентам 1 29.04.2011 13:52
записи Серый777 Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2010 20:33
записи angel# Паскаль, Turbo Pascal, PascalABC.NET 0 29.04.2010 01:23