Автор |
Сообщение |
Members


5 сообщений
Где: Russia
Род занятий:
Возраст:
|
#4799
2011-10-12 19:46 GMT+3 часа(ов)
|
Плиз.. помогите с циклом do.
У мну есть 4 списка
x1(y1 y2 y3 y4)
x2(y1 y2 y3 y4)
x3(y1 y2 y3 y4)
x4(y1 y2 y3 y4)
Мне нужно вывести те элементы списка которые удовлетворяют условию
-
| y1(xk)+y2(xk)+y3(xk)>y4(xk)
< y1(xk)+y2(xk)+y4(xk)>y3(xk)
| y1(xk)+y3(xk)+y4(xk)>y2(xk)
| y2(xk)+y3(xk)+y4(xk)>y1(xk)
-
Я это сделал вот так:
(defun sum ()
(and (> (+ (car xi) (cadr xi) (caddr xi)) (cadddr xi))
(> (+ (car xi) (cadr xi) (cadddr xi)) (caddr xi))
(> (+ (cadr xi) (caddr xi) (cadddr xi)) (car xi))
(> (+ (car xi) (caddr xi) (cadddr xi)) (cadr xi))))
(defun srav1 ()
(setq xi x1)
(if (sum)
x1))
(defun srav2 ()
(setq xi x2)
(if (sum)
x2))
(defun srav3 ()
(setq xi x3)
(if (sum)
x3))
(defun srav4 ()
(setq xi x4)
(if (sum)
x4))
но в условии задачи стоит обязательно использовать цикл do.
Уповаю на вашу помощь.
Если можно разъясните на пальцах как он работает потому что сколько я ни не перечитывал эту главу в PCL так и не понял =(((
|
|
Members


307 сообщений
Где: Russia
Род занятий:
Возраст:
|
#4800
2011-10-13 00:25 GMT+3 часа(ов)
|
Напиши алгоритм на псевдокоде, или на каком-нибудь имп. языке, а то ваще не понятно, что нужно сделать.
|
I wish I'd made you angry earlier
|
Members


157 сообщений
Где: ---
Род занятий:
Возраст:
|
#4801
2011-10-13 01:35 GMT+3 часа(ов)
|
|
|
Members


152 сообщений
Где: Russia
Род занятий:
Возраст:
|
#4802
2011-10-13 08:16 GMT+3 часа(ов)
|
Почитай про do в Мир Лиспа. том 1. Там всё очень понятно написано.
|
|
Members


5 сообщений
Где: Russia
Род занятий:
Возраст:
|
#4803
2011-10-13 14:20 GMT+3 часа(ов)
|
Цитата megamanx :
Напиши алгоритм на псевдокоде, или на каком-нибудь имп. языке, а то ваще не понятно, что нужно сделать.
Вывести тот список, у которого сумма любых трех элементов больше четвертого.
т.е. одновременно выполняются условия:
x1+x2+x3>x4
x1+x2+x4>x3
x1+x3+x4>x2
x2+x3+x4>x1
Вот вся программа (если нужно):
(format t "VVedite komandu (make x1 x2 x3 x4)")
(defun make (x1 x2 x3 x4)
(setq sp (list x1 x2 x3 x4)))
(defun prompt-x () (progn
(setq y1 (cond ((>= x 2) (- (EXPT x (sin(+ 4 (log(- x 1)))))))
((and (<= 0 x) (> 1 x)) (/ (EXPT (cos (- x 3)) 2) (sin(- (sqrt x) (* 1.5 pi)))))
(t (- x))))
(setq y2 (cond ((<= 0 x 0.5) (tan(- x 2 (sin x))))
((and (< -3 x) (>= -1 x)) (+ (- (EXPT x 2) (* 3 x)) 1 (tanh(- (EXPT x 2) 3))))
(t 2)))
(setq y3 (cond ((< -5 x -1) (sqrt(+ (- (EXPT x 4) (* 3 (EXPT x 2))) 5)))
((>= x 2) (EXPT 2 (- (cos(+ (* 2 x) 1)) 0.5)))
(t (+ x 5))))
(setq y4 (cond ((> x 4) (cos(+ (EXPT x 0.3) (EXPT 1.5 (+ x 1)))))
((and (< 0 x) (>= 2 x)) (- (EXPT (+ (* x 3) 2) (/ 1 5)) (sin(+ (EXPT x 3) (EXPT 3 (* 0.2 x))))))
(t (+ (- 2) x (EXPT x 2)))))
(setq xi (list y1 y2 y3 y4))))
(defun prompt-x1 ()
(setq x (car sp)) (prompt-x)
(setq x1 xi))
(defun prompt-x2 ()
(setq x (cadr sp)) (prompt-x)
(setq x2 xi))
(defun prompt-x3 ()
(setq x (caddr sp)) (prompt-x)
(setq x3 xi))
(defun prompt-x4 ()
(setq x (cadddr sp)) (prompt-x)
(setq x4 xi))
(defun sum ()
(and (> (+ (car xi) (cadr xi) (caddr xi)) (cadddr xi))
(> (+ (car xi) (cadr xi) (cadddr xi)) (caddr xi))
(> (+ (cadr xi) (caddr xi) (cadddr xi)) (car xi))
(> (+ (car xi) (caddr xi) (cadddr xi)) (cadr xi))))
(defun srav1 ()
(setq xi x1)
(if (sum)
x1))
(defun srav2 ()
(setq xi x2)
(if (sum)
x2))
(defun srav3 ()
(setq xi x3)
(if (sum)
x3))
(defun srav4 ()
(setq xi x4)
(if (sum)
x4))
(defun F1 ()
(prin1 (prompt-x1))(princ " ")
(prin1 (prompt-x2))(princ " ")
(prin1 (prompt-x3))(princ " ")
(prin1 (prompt-x4))(terpri))
(defun F2 ()
(prin1 (srav1))(princ " ")
(prin1 (srav2))(princ " ")
(prin1 (srav3))(princ " ")
(prin1 (srav4))(terpri))
|
|
Members


5 сообщений
Где: Russia
Род занятий:
Возраст:
|
#4805
2011-10-13 19:24 GMT+3 часа(ов)
|
Цитата LinkFly :
Почитай про do в Мир Лиспа. том 1. Там всё очень понятно написано.
Спасибо что подсказали книжечку. Там действительно все ясно и понятно написано и вроде я разобрался как эти циклы работают, но вопросов стало еще больше... Как мне теперь его прикрутит к своему заданию я не понял(((
|
|