Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 525
от 08.06.2004, 10:30

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1682
Отправлено ответов: 3345
Активность: 198.8 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

www
Статус: Доверительный
Общий рейтинг: 118.08
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 109.3
[Подробней >>]
bocha
Статус: Доверительный
Общий рейтинг: 149.33
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1676. Вопрос относится скорее в общем к программированию, но т.к. я знаю хорошо лишь С :)), то спрошу в да... (ответов: 3)

Вопросов: 1, ответов: 3


 Вопрос № 1676

Вопрос относится скорее в общем к программированию, но т.к. я знаю хорошо лишь С :)), то спрошу в данной теме.
У меня есть таблица:
Название|П1|П2|П3|П4|....В общем до фига П№, которые содержат значения типа int.
Существует ли алгоритм, благодаря которому я смогу упорядочить список с условием наиболее близкого соответствия по всем параметрам одной из записей.
Например, есть у меня
Вася 435 234 36 122
И надо мне, чтобы было приблизительно так:
Вася 435 234 36 122
Петя 435 233 38 120
Витя 430 238 30 128
и т.п.
Т.е. отсортировать массив по всем признакам сразу, а не только по одному.



Вопрос отправлен: 05.06.2004, 10:27
Отправитель: InZest

[Следующий вопрос >>] [Список вопросов]

Отвечает www

Здравствуйте, InZest!
Необходимо ввести на множестве записей отношение порядка.
Это зависит от задачи , т.е. с какой целью производится сортировка. Так что это решать автору. Можно, например, вычислять функцию от всех признаков и сравнивать ее значения. Только множество должно быть полностью упорядочено, т.е. не должно быть двух элементов, которые нельзя сравнить друг с другом. После того как отношение порядка введено можно использовать обычные алгоритмы сортировки, которые детально описаны в третьем томе "Исскуство пролграммирования" Д.Кнута.

Ответ отправлен: 05.06.2004, 22:26
Отправитель: www


Отвечает vitya

Здравствуйте, InZest!
C так С. Если меня не подводит память, то qsort принимает в виде параметра функцию сравнения. Пишешь ее цепочечным образом. если первый параметр меньше второго, или первые равны, но вторые меньше, или первые два равны, но третьи меньше, и т.д. Божно оптимизировать процедуру, делать большие вложения лог. выражений, пытаться сминимизировать и т.д.


Ответ отправлен: 05.06.2004, 12:46
Отправитель: vitya


Отвечает bocha

Здравствуйте, InZest!
43523436122
43523338120
43023830128
если это не сортировка (объединенных цепочек) по убыванию...?:(
Еще в С++ существует такое понятие как перегрузка операторов:
создаете класс в который записываете данные из таблицы,

struct table1{
string name;
int value[3];
int operator<(const table1& t)const;
};
для него перегружаются операторы <() >() ==() !=() <=() >=() , для вашего примера

table1::operator<(const table1& t)const{
if(value[0] < t.value[0])return true;
else if(val[1] < t.val[1])return true
else if(val[2] < t.val[2])return true;
return false;
}

а дальше используются алгоритмы сортировки из STL.
ЗЫ:давно несталкивался с этим но помоему для хранения value в вашем случае лучще всего использовать basic_string<int>, тогда внутри класса пишем
basic_string<int> value;, а в теле оператора одну строчку: return value < t.value;

Ответ отправлен: 05.06.2004, 12:13
Отправитель: bocha



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (23)
C / C++ (13)
Builder / Delphi (16)
Pascal (20)
Basic / VBA (3)
Java / JavaScript (4)
PHP (13)
Криптография (8)
WinAPI (10)
Радиоэлектроника (9)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (52)
"Железо" (31)
Поиск информации (16)
Администратору
Windows NT/2000/XP (24)
Linux / Unix (10)
Юристу
Гражданское право (11)
Семейное право (8)
Трудовое право (11)
КоАП (7)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное