Помогите пожайлуста с сортировкой
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите пожайлуста с сортировкой

Помогите пожайлуста с сортировкой

Ответ
Поиск в этой теме
Непрочитано 11.08.2011, 15:37 #1
Помогите пожайлуста с сортировкой
doki
 
Регистрация: 17.01.2008
Сообщений: 28

Подскажите что не правильно... не корректно сортирует

Вот список ( (a1 b1 (c1 d1)) (a3 b3 (c3 d3)) (a2 b2 (c2 d2)) ...)

вот лисп

(setq param_list
(vl-sort param_list
(function (lambda (e1 e2)
(> (- (car e1) (cadr e1)) (- (car e2) (cadr e2)))
) ) ) )


необходим результат от максимальных а и b до минимальных
Просмотров: 2746
 
Непрочитано 11.08.2011, 15:48
#2
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


doki, не понятно, что нужно. Твой лисп сортирует список по убыванию разницы ai - bi, а Ты пишешь
Цитата:
необходим результат от максимальных а и b до минимальных
Если нужно чтобы список убывал по ai, а при их равенстве по bi, то тогда так
Код:
[Выделить все]
 
(setq param_list (list (list 5 4 (list 3 4)) (list 5 2 (list 3 4)) (list 10 2 (list 3 4))))
(vl-sort param_list (function (lambda (e1 e2) (if (= (car e1) (car e2)) (> (cadr e1) (cadr e2)) (> (car e1) (car e2))))))
; ((10 2 (3 4)) (5 4 (3 4)) (5 2 (3 4)))
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 11.08.2011, 16:16
#3
doki


 
Регистрация: 17.01.2008
Сообщений: 28


вот список

((1825.0 1150.0 (175193.0 -254701.0 0)) (1825.0 1150.0 (171918.0 -254701.0 0))
(1825.0 1150.0 (170043.0 -254701.0 0)) (1825.0 1150.0 (166768.0 -254701.0 0))
(2525.0 2350.0 (174843.0 -256501.0 0)) (2525.0 2350.0 (167118.0 -256501.0 0))
(2525.0 2350.0 (169693.0 -256501.0 0)) (2525.0 2350.0 (172268.0 -256501.0 0))
(2525.0 2350.0 (136118.0 -256501.0 0)) (2525.0 2350.0 (143843.0 -256501.0 0))
(1825.0 800.0 (141618.0 -255376.0 0)) (2525.0 1150.0 (174843.0 -259501.0 0))
(2525.0 1150.0 (174843.0 -260701.0 0)) (1237.5 300.0 (136762.0 -255126.0 0))
(1237.5 300.0 (144487.0 -255126.0 0)) (2525.0 1150.0 (167118.0 -259501.0 0))
(2525.0 1150.0 (167118.0 -260701.0 0)) (2525.0 1150.0 (169693.0 -260701.0 0))
(2525.0 1150.0 (169693.0 -259501.0 0)) (2525.0 1150.0 (172268.0 -259501.0 0))
(2525.0 1150.0 (172268.0 -260701.0 0)) (2525.0 1150.0 (136118.0 -259501.0 0))
(2525.0 1150.0 (136118.0 -260701.0 0)) (1825.0 1150.0 (138343.0 -260701.0 0))
(2525.0 1150.0 (138693.0 -259501.0 0)) (2525.0 1150.0 (141268.0 -259501.0 0))
(1825.0 1150.0 (141618.0 -260701.0 0)) (2525.0 1150.0 (143843.0 -260701.0 0))
(2525.0 1150.0 (143843.0 -259501.0 0)) (2525.0 1850.0 (138693.0 -256751.0 0))
(2525.0 1850.0 (141268.0 -256751.0 0)) (1825.0 800.0 (138343.0 -255376.0 0))
(1237.5 300.0 (135475.0 -255126.0 0)) (1237.5 300.0 (143200.0 -255126.0 0)))



вот как сортирует

((2525.0 1850.0 (138693.0 -256751.0 0)) (2525.0 1850.0 (141268.0 -256751.0 0))
(2525.0 2350.0 (174843.0 -256501.0 0)) (2525.0 2350.0 (167118.0 -256501.0 0))
(2525.0 2350.0 (169693.0 -256501.0 0)) (2525.0 2350.0 (172268.0 -256501.0 0))
(2525.0 2350.0 (136118.0 -256501.0 0)) (2525.0 2350.0 (143843.0 -256501.0 0))
(2525.0 1150.0 (174843.0 -259501.0 0)) (2525.0 1150.0 (174843.0 -260701.0 0))
(2525.0 1150.0 (167118.0 -259501.0 0)) (2525.0 1150.0 (167118.0 -260701.0 0))
(2525.0 1150.0 (169693.0 -260701.0 0)) (2525.0 1150.0 (169693.0 -259501.0 0))
(2525.0 1150.0 (172268.0 -259501.0 0)) (2525.0 1150.0 (172268.0 -260701.0 0))
(2525.0 1150.0 (136118.0 -259501.0 0)) (2525.0 1150.0 (136118.0 -260701.0 0))
(2525.0 1150.0 (138693.0 -259501.0 0)) (2525.0 1150.0 (141268.0 -259501.0 0))
(2525.0 1150.0 (143843.0 -260701.0 0)) (2525.0 1150.0 (143843.0 -259501.0 0))
(1825.0 800.0 (141618.0 -255376.0 0)) (1825.0 800.0 (138343.0 -255376.0 0))
(1825.0 1150.0 (175193.0 -254701.0 0)) (1825.0 1150.0 (171918.0 -254701.0 0))
(1825.0 1150.0 (170043.0 -254701.0 0)) (1825.0 1150.0 (166768.0 -254701.0 0))
(1825.0 1150.0 (138343.0 -260701.0 0)) (1825.0 1150.0 (141618.0 -260701.0 0))
(1237.5 300.0 (136762.0 -255126.0 0)) (1237.5 300.0 (144487.0 -255126.0 0))
(1237.5 300.0 (135475.0 -255126.0 0)) (1237.5 300.0 (143200.0 -255126.0 0)))


почему 1850 больше 2350?
doki вне форума  
 
Непрочитано 11.08.2011, 16:48
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


doki, у меня вот так отсортировал
( (2525.0 2350.0 (174843.0 -256501.0 0))
(2525.0 2350.0 (167118.0 -256501.0 0))
(2525.0 2350.0 (169693.0 -256501.0 0))
(2525.0 2350.0 (172268.0 -256501.0 0))
(2525.0 2350.0 (136118.0 -256501.0 0))
(2525.0 2350.0 (143843.0 -256501.0 0))
(2525.0 1850.0 (138693.0 -256751.0 0))
(2525.0 1850.0 (141268.0 -256751.0 0))
(2525.0 1150.0 (174843.0 -259501.0 0))
(2525.0 1150.0 (174843.0 -260701.0 0))
(2525.0 1150.0 (167118.0 -259501.0 0))
(2525.0 1150.0 (167118.0 -260701.0 0))
(2525.0 1150.0 (169693.0 -260701.0 0))
(2525.0 1150.0 (169693.0 -259501.0 0))
(2525.0 1150.0 (172268.0 -259501.0 0))
(2525.0 1150.0 (172268.0 -260701.0 0))
(2525.0 1150.0 (136118.0 -259501.0 0))
(2525.0 1150.0 (136118.0 -260701.0 0))
(2525.0 1150.0 (138693.0 -259501.0 0))
(2525.0 1150.0 (141268.0 -259501.0 0))
(2525.0 1150.0 (143843.0 -260701.0 0))
(2525.0 1150.0 (143843.0 -259501.0 0))
(1825.0 1150.0 (175193.0 -254701.0 0))
(1825.0 1150.0 (171918.0 -254701.0 0))
(1825.0 1150.0 (170043.0 -254701.0 0))
(1825.0 1150.0 (166768.0 -254701.0 0))
(1825.0 1150.0 (138343.0 -260701.0 0))
(1825.0 1150.0 (141618.0 -260701.0 0))
(1825.0 800.0 (141618.0 -255376.0 0))
(1825.0 800.0 (138343.0 -255376.0 0))
(1237.5 300.0 (136762.0 -255126.0 0))
(1237.5 300.0 (144487.0 -255126.0 0))
(1237.5 300.0 (135475.0 -255126.0 0))
(1237.5 300.0 (143200.0 -255126.0 0))
)
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 11.08.2011, 16:56
#5
doki


 
Регистрация: 17.01.2008
Сообщений: 28


тю.... интересно.... даже кад перегружал
doki вне форума  
 
Непрочитано 12.08.2011, 09:14
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от doki Посмотреть сообщение
тю.... интересно.... даже кад перегружал
Могу лишь предположить, что в Твоем случае код считает 2525.0 > чем 2525.0 в соответсвующих строках
((2525.0 1850.0 (138693.0 -256751.0 0)) (2525.0 1850.0 (141268.0 -256751.0 0))
(2525.0 2350.0 (174843.0 -256501.0 0)) (2525.0 2350.0 (167118.0 -256501.0 0))
и поэтому уже не сравнивает между собой 1850.0 2350.0.
Это может происходить из-за точности отображения, в AutoCAD (в ком. строке или консоли VisualLisp) вещественные числа отображаются не более шести значащих цифр, но при расчетах внутри программы оперирует числами с точность до 15 знаков, см. пример:
Код:
[Выделить все]
_$ (setq a1 2525.000001)
2525.0
_$ (setq a2 2525.0)
2525.0
_$ a1 a2
2525.0
2525.0 ; отображаются a1 и a2 с одинаковыми значениями
_$ (> a1 a2)
T ; но при сравнении a1 оказывается больше чем a2, так оно и есть на самом деле, так как a1=2525.000001 a2=2525.0, 2525.000001 > 2525.0
Поэтому вопрос, как Ты формируешь исходный список для сортировки, если он получается в результате расчетов, то вполне возможно что получается описанный мной выше вариант. Я же скоприовал список из Твоего поста и у меня получается жестко прописаные значения всех чисел с точность до одного знака после разделителя десятичной части, поэтому сортировка происходит корректно.
__________________
cadtools
TararykovDG вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите пожайлуста с сортировкой



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пожалуйста помогите сделать спецификацию, есть чертеж с позициями но я не знаю всех обозначений, а после завтра защита диплома, если можете помогите! саняяя Машиностроение 19 22.06.2011 19:22
Помогите усовершенствовать отвод Zaghim AutoCAD 2 10.03.2011 22:11
Помогите с расчетной длиной колонны Chuvak_3 Конструкции зданий и сооружений 54 23.02.2011 18:09
ANSYS 10 Помогите разобраться. Aндрeй ANSYS 6 12.12.2007 00:03
помогите срочно пощитать теплопроводность стены Sanyok Конструкции зданий и сооружений 5 23.12.2005 11:15