> 1 <

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

Frantic

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 так и не понял =(((

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

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

joba

Members


Статус

157 сообщений

Где: ---
Род занятий:
Возраст:

#4801   2011-10-13 01:35 GMT+3 часа(ов)      

LinkFly

Members


Статус

152 сообщений

Где: Russia
Род занятий:
Возраст:

#4802   2011-10-13 08:16 GMT+3 часа(ов)      
Почитай про do в Мир Лиспа. том 1. Там всё очень понятно написано.

Frantic

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))

Frantic

Members


Статус

5 сообщений

Где: Russia
Род занятий:
Возраст:

#4805   2011-10-13 19:24 GMT+3 часа(ов)      
Цитата
LinkFly :
Почитай про do в Мир Лиспа. том 1. Там всё очень понятно написано.


Спасибо что подсказали книжечку. Там действительно все ясно и понятно написано и вроде я разобрался как эти циклы работают, но вопросов стало еще больше... Как мне теперь его прикрутит к своему заданию я не понял(((
> 1 <


Онлайн :

0 пользователь(ей), 37 гость(ей) :