Написать функцию для приведения подобных в данном многочлене - Lisp
Формулировка задачи:
Многочлен в «традиционной» инфиксной записи задан в виде списка из текстовых элементов (возведение в степень обозначается знаком ^). Написать функцию для приведения подобных в данном многочлене.
Помогите, пожалуйста!
Решение задачи: «Написать функцию для приведения подобных в данном многочлене»
textual
Листинг программы
;; Ввод полинома (defun input-poly (p &aux (x (explode p)) res i (f 0) (sign 1) (coef 0) (u 0)) (dolist (i x res) (cond ((EQ i '+) (when (and (= u 0) (= f 1)) (setq u 1)) (if (> f 0) (setq res (append res (list (list coef u)))) (setq res (append res (list (list u 0))))) (setq sign 1 u 0 f 0 coef 0)) ((EQ i '-) (when (and (= u 0) (= f 1)) (setq u 1)) (if (> f 0) (setq res (append res (list (list coef u)))) (setq res (append res (list (list u 0))))) (setq sign -1 u 0 f 0 coef 0)) ((fixedp i) (setq u (+ i (* u 10)))) ((EQ i 'x) (when (= u 0) (setq u 1)) (setq f 1 coef (* sign u) u 0)) ((EQ i '^) (setq f 2)))) (cond ((= f 0) (setq res (append res (list (list (* sign u) 0))))) (t (setq res (append res (list (list coef u)))))) (qsort-b (remove '(0 0) res) #'(lambda (x y) (> (cadr x) (cadr y))))) ;; Вывод полинома (defun output-poly (x &aux i c p res) (dolist (i x (implode res)) (setq c (car i)) (setq p (cadr i)) (when (and (> c 0) (not (null res))) (setq res (append res (list '+)))) (when (< c 0) (setq res (append res (list '-))) (setq c (abs c))) (when (and (= c 1) (null res)) (setq res (append res (list 1)))) (when (<> c 1) (setq res (append res (list c)))) (cond ((> p 1) (setq res (append res (list 'x '^ p)))) ((= p 1) (setq res (append res (list 'x))))))) ;; Приведение подобных (defun reduce-poly (x &aux i c p cc cp res lstp) (dolist (i x (qsort-b res #'(lambda (x y) (> (cadr x) (cadr y))))) (setq cc 0) (setq p (cadr i)) (dolist (j x t) (setq cp (cadr j)) (when (= cp p) (setq cc (+ cc (car j))))) (when (and (<> cc 0) (not (memb p lstp))) (setq res (append res (list (list cc p)))) (setq lstp (cons p lstp))))) (output-poly (reduce-poly (input-poly '2+x^3-6x^2+12x^4+11x-7x^3))) ==> 2+11X-6X^2-6X^3+12X^4
Объяснение кода листинга программы
- Ввод полинома:
- Функция
input-poly
принимает полином в качестве входного параметра и использует его для инициализации переменныхx
,res
,sign
,coef
,u
. - Переменная
x
содержит список коэффициентов полинома. - Переменная
res
содержит результат - список списков, представляющих полином в виде разности степеней переменнойx
. - Переменная
sign
содержит знак коэффициента при переменнойx
в текущем члене полинома. - Переменная
coef
содержит абсолютный значение коэффициента при переменнойx
в текущем члене полинома. - Переменная
u
используется для отслеживания неотрицательности коэффициента при переменнойx
в текущем члене полинома.
- Функция
- Вывод полинома:
- Функция
output-poly
принимает полином в качестве входного параметра и использует его для инициализации переменныхx
,res
,i
,c
,p
. - Переменная
x
содержит список переменныхi
, которые представляют коэффициенты полинома. - Переменная
res
содержит результат - список списков, представляющих полином в виде разности степеней переменнойx
. - Переменная
i
используется для итерации по коэффициентам полинома. - Переменная
c
содержит абсолютный значение коэффициента при переменнойx
в текущем члене полинома. - Переменная
p
содержит степень переменнойx
в текущем члене полинома.
- Функция
- Приведение подобных:
- Функция
reduce-poly
принимает полином в качестве входного параметра и использует его для инициализации переменныхx
,res
,i
,c
,p
,cc
,lstp
. - Переменная
x
содержит список переменныхi
, которые представляют коэффициенты полинома. - Переменная
res
содержит результат - список списков, представляющих полином в виде разности степеней переменнойx
. - Переменная
i
используется для итерации по коэффициентам полинома. - Переменная
c
содержит абсолютный значение коэффициента при переменнойx
в текущем члене полинома. - Переменная
p
содержит степень переменнойx
в текущем члене полинома. - Переменная
cc
используется для хранения суммы абсолютных значений коэффициентов при переменнойx
в текущем члене полинома. - Переменная
lstp
используется для хранения списка членов полинома, которые еще не были учтены.
- Функция
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д