Работа со строками

advertisement
САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АРХИТЕКТУРНО-СТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ
Практикум на языке
ЛИСП
Прохорова О.В.
01.01.2015
В учебном пособии дается решение практических задач на языке Лисп с
комментариями основных действий
Оглавление
1.
Работа с комплексными числами ....................................................................... 3
2.
Вычисление факториала ..................................................................................... 5
3.
Вывод ряда чисел Фибоначчи ............................................................................ 6
4.
Вычисление_1 логарифма числа loga (x) ........................................................ 7
5.
Вычисление_2 логарифма числа loga (x) ........................................................ 8
6.
Сортировка чисел методом пузырька ................................................................ 9
7.
Работа со строками ........................................................................................... 10
8.
Вычисление 1 корней квадратного уравнения a*x^2+b*x+c=0 ...................... 11
9.
Вычисление 2 корней квадратного уравнения a*x^2+b*x+c=0 ...................... 13
10.
Вычисление 3 корней квадратного уравнения a*x^2+b*x+c=0 ................... 15
11.
Вычисление квадрата числа .......................................................................... 17
12.
Вставка элемента в конец списка ................................................................. 18
13.
Вставка элемента в начало списка ............................................................... 19
2
1. Работа с комплексными числами
#| Работа с комплексными числами |#
(defun Plus(a b c d)
(defvar n)
(defvar m)
(setf n (+ a c))
(setf m (+ b d))
(format t "(~A + ~Ai) + (~A + ~Ai) = (~A + ~Ai) ~%" a b c d n m)
)
(defun Minus(a b c d)
(defvar n)
(defvar m)
(setf n (- a c))
(setf m (- b d))
(format t "(~A + ~Ai) - (~A + ~Ai) = (~A + ~Ai) ~%" a b c d n m)
)
(defun Multiple(a b c d)
(defvar n)
(defvar m)
(setf n (- (* a c) (* b d)))
(setf m (+ (* b c) (* a d)))
(format t "(~A + ~Ai) * (~A + ~Ai) = (~A + ~Ai) ~%" a b c d n m)
)
(defun Div(a b c d)
(defvar n)
(defvar m)
(setf n (/ (+ (* a c) (* b d)) (+ (* c c) (* d d))))
(setf m (/ (- (* b c) (* a d)) (+ (* c c) (* d d))))
(format t "(~A + ~Ai) / (~A + ~Ai) = (~0,1F + ~Fi) ~%" a b c d n m)
)
(Plus 1 2 3 4)
3
(Minus 5 7 3 4)
(Multiple 5 7 3 4)
(Div 5 7 3 4)
4
2. Вычисление факториала
#| Вычисление факториала рекурсивным
и итеративным способами |#
(defun Factorial (n)
(if (= 0 n)
1
(* n (Factorial ( - n 1)))))
(format t "Factorial of n is: ~A~%" (Factorial 4))
(defun fact (n)
(loop for i from 1 to n
for fact = 1 then (* fact i)
finally (return fact)))
(format t "Factorial of n is: ~A~%" (fact 6))
5
3. Вывод ряда чисел Фибоначчи
#| Вывод ряда чисел Фиббоначи |#
(defun Fibonachi (n fib1 fib2)
(print fib1)
(print fib2)
(loop for i from 1 to (- n 2) by 2 do
(setf fib1 (+ fib1 fib2))
(print fib1)
(setf fib2 (+ fib1 fib2))
(print fib2)
)
)
(Fibonachi 12 1 1)
6
4. Вычисление_1 логарифма числа loga (x)
(defun logg (a x b) #|b - граница цикла поиска |#
(if (= a x) ((format t "log(x)a = ~A~%" i)(setf b 1))
)
(loop for i from 2 to b do
(setf a (* a a))
(if (= a x) (format t "log(x)a = ~A~%" i))
)
)
)
(logg 2 4 5)
7
5. Вычисление_2 логарифма числа loga (x)
#| функция логарифмирования, а - основание логарифма, х - число
под логарифмом, с- значение логарифма (искомое) х=a^c |#
(defun logg (a x b)
#|b - граница цикла поиска |#
(if (= a x) ((format t "log(x)a = ~A~%" i)(setf b 1))
)
(loop for i from 2 to b do
(setf a (* a a))
(if (= a x) (format t "log(x)a = ~A~%" i))
)
)
)
(logg 2 4 5)
8
6. Сортировка чисел методом пузырька
#|сортировка по возрастанию элементов |#
(defun bubble-sort (w)
(setf n (length w))
(print w)
(loop for i from 1 to n do #| цикл по числу прогонов |#
(loop for j from 0 to (- n 2) do #| цикл по числам внутри прогона |#
(setf k (+ 1 j))
(setf d (nth j w))
(setf dd (nth k w))
( when (> d dd )
(setf tmp (nth j w) )
(setf (nth j w) dd)
(setf (nth k w ) tmp)
)
)
)
(print w)
)
(bubble-sort '(3 2 1))
9
7. Работа со строками
#| Работа со строками |#
(defvar str1 "Heello") ;Объявление
(defvar str2 "world")
(defvar result)
(setf result (concatenate 'string str1 str2)) ; Присвоение
(print result) ; вывод на экран
(print (string-upcase str1)) ; все символы — заглавные
(print (string-downcase str1)) ; все символы — строчные
(print (string-capitalize str1)) ; с большой буквы
(print (subseq "0123456" 1 5)) ; извлечь из строки
последовательность символов
(print(remove #\/ "/tam/tam/bam")) ; удалить определенный символ
из строки
(format t "15 is ~A~%" 15) ; форматированный вывод
10
8. Вычисление 1 корней квадратного уравнения a*x^2+b*x+c=0
(defun square (a b c)
(defvar d)
(defvar x1)
(defvar x2)
(defvar x3)
(defvar x4)
(setf d (- (* b b) (* 4 a c)))
(format t "d is ~F ~%" d)
(if (> d 0) #| корни действительные |#
(block
(setf x2 (/ (+ (- b) (sqrt d)) (* 2 a)))
(setf x1 (/ (+ (- b) (- (sqrt d))) (* 2 a)))
(format t "X1 is ~F ~%" x1)
(format t "X2 is ~F ~%" x2)
)
)
(if (= d 0) #| корни равны |#
(block
11
(setf x1 (/ (- b) (* 2 a)))
(setf x2 x1)
(format t "X1 is ~A~%" x1)
(format t "X2 is ~A~%" x2))
)
)
(if (< d 0) #| корни комплексные |#
#|(print "Complex answer") |#
(block
(setf x1 (/ (- b) (* 2 a)))
(setf x4 ( sqrt(* d d)))
(setf x2 (/ (sqrt(x4)) (* 2 a)))
(setf x3 (- x2))
(format t "(~A + ~Ai)~%" x1 x2)
(format t "(~A + ~Ai)~%" x1 x3)
)
)
)
(square 1 2 4)
12
9. Вычисление 2 корней квадратного уравнения a*x^2+b*x+c=0
(defun square (a b c)
(defvar d)
(setf d (- (* b b) (* 4 a c) ) )
(format t "d is ~A~%" d)
(cond
((> d 0) #| корни действительные |#
(block
(defvar x2)
(setf x2 (/ ( + (- b) (sqrt d) ) (* 2 a) ) )
(defvar x1)
(setf x1 (/ ( - (- b) (sqrt d) ) (* 2 a) ) )
(format t "X1 is ~F ~%" x1)
(format t "X2 is ~F ~%" x2)
)
)
( (= d 0)
(block
(defvar x1)
(setf x1 (/ (- b) (* 2 a) ))
(format t "X1 is ~A~%" x1)
(format t "X2 is ~A~%" x1)
)
)
( (< d 0)
#| корни комплексные |#
(block
(defvar x1)
13
(setf x1 (/ (- b) (* 2 a) ) )
(format t "X1 is ~A~%" x1)
(defvar x2)
(setf x2 (/ (sqrt ( - d)) (* 2 a) ) )
(format t "X2 is ~A~%" x2)
(format t "X1 is ~A + ~Ai ~%" x1 x2)
(format t "X2 is ~A - ~Ai ~%" x1 x2)
)
)
)
)
(square 1 1 1 )
14
10. Вычисление 3 корней квадратного уравнения a*x^2+b*x+c=0
(defun square (a b c)
(defvar d)
(defvar x1)
(defvar x2)
(defvar x3)
(setf d (- (* b b) (* 4 a c)))
(if (> d 0)
(block
(setf x1 (/ (+ (- b) (sqrt d)) (* 2 a)))
(setf x2 (/ (- (- b) (sqrt d)) (* 2 a)))
(format t "X1 is ~F ~%" x1)
(format t "X2 is ~F ~%" x2)
)
)
(if (= d 0)
(block
(setf x1 (/ (- b) (* 2 a)))
(setf x2 x1)
(format t "X1 is ~A~%" x1)
(format t "X2 is ~A~%" x2)
)
)
(if (< d 0)
(print "Complex answer")
(setf d (*d d))
(setf x1 (/ (+ (- b) (* 2 a))
15
(setf x2 (/ (- (sqrt d)) (*2 a)))
(setf x3 (/ (+ (sqrt d)) (*2 a)))
(format t "(~A + ~Ai)~%" x1 x2)
(format t "(~A + ~Ai)~%" x1 x3)
)
)
(square 1 -3 2)
16
11. Вычисление квадрата числа
(defun square (num)
(defvar x)
(setf x ( * num num))
(format t "x is ~A~%" x)
)
(square 7)
17
12. Вставка элемента в конец списка
#| вставка элемента item в конец списка oldlist |#
(defun ins(oldlist item)
(defvar x)
(setf x (cons oldlist item))
(format t "x is ~A~%" x)
)
( ins '(a b c) '(z))
18
13. Вставка элемента в начало списка
#| вставка элемента item в начало списка oldlist |#
( defun ins(item oldlist)
(defvar x)
(setf x (cons item oldlist ))
(format t "x is ~A~%" x)
)
( ins 'z '(a b c) )
19
Download