- •3 Лабораторная работа №2 (программирование разветвлённых алгоритмов) 12
- •4 Лабораторная работа №3 (программирование простых циклических алгоритмов) 16
- •7 Решение индивидуального задания 28
- •Постановка задачи
- •Лабораторная работа №1 (программирование линейных алгоритмов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Лабораторная работа №2 (программирование разветвлённых алгоритмов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Лабораторная работа №3 (программирование простых циклических алгоритмов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Лабораторная работа №4 (программирование с использованием одномерных массивов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Лабораторная работа №5 (программирование с использованием многомерных массивов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Решение индивидуального задания
- •Реализация на языке lisp
- •Функция podspvsp
- •Функция evropa
- •Функция opa
- •7.1.5 Функция v1spisok
- •7.1.6 Функция get1
- •7.1.7 Функция get22
- •7.1.8 Функция getpolug
- •7.1.9 Функция 1polniz
- •7.1.10 Функция 2polniz
- •7.1.11 Функция 2polverh
- •7.1.12 Функция 1polverh
- •7.1.13 Функция getdiag
- •7.1.14 Функция getdown
- •7.1.15 Функция getup
- •Функция 1hlpod
- •Функция 2hlpod
- •7.1.18 Функция revpod
- •7.1.19 Функция deletefirst
- •7.1.20 Функция get1half
- •7.1.21 Функция get2half
- •7.1.22 Функция neto
- •7.1.23 Функция dl
- •7.1.24 Функция revers
- •7.1.25 Функция gl
- •7.1.26 Полный текст программы
- •Реализация на языке Prolog
- •Функция ygolki
- •Функция app
- •Функция main
- •7.2.4 Функция opp
- •7.2.5 Функция verhyg
- •7.2.6 Функция nizyg
- •7.2.7 Функция diag
- •Функция fpolpodsp
- •Функция npolpodsp
- •7.2.10 Функция reveverspodsp
- •7.2.11 Функция delall
- •7.2.12 Функция fpol
- •7.2.13 Функция npoll
- •7.2.14 Функция npol
- •7.2.15 Функция dl
- •7.2.16 Функция revers
- •7.2.17 Функция getlalst
- •7.2.18 Полный текст программы
-
Лабораторная работа №4 (программирование с использованием одномерных массивов)
-
Реализация на языке lisp
-
Спецификация
-
-
Дан массив из 10 вещественных чисел. Максимальный элемент массива увеличить в 2 раза, а минимальный элемент уменьшить в 2 раза. Вывести преобразованный массив.
-
Структура входных данных
Структурой входных данных в данной функции является массив вещественных чисел. Примеры записи на языке LISP приведены на рисунке 5.1.
|
(1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0) (1.6 0.2 3.0 4.1 0.5 6.8 7.9 8.0 9.2 1.1) (1.05 0.9 3.8 1.0 0.5 6.2 2.0 1.4 9.02 1.01) |
Рисунок 5.1
-
Структура выходных данных
Структурой выходных данных в данной функции является преобразованный массив вещественных чисел. Примеры записи на языке LISP приведены на рисунке 5.2.
|
(0.5 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 20.0) (1.6 0.1 3.0 4.1 0.5 6.8 7.9 8.0 18.4 1.1) (1.05 0.9 3.8 1.0 0.25 6.2 2.0 1.4 18.04 1.01) |
Рисунок 5.2
-
Функциональные тесты
Функциональные тесты для функции chmass приведены в таблице 5.1.
Таблица 5.1
|
Проверяемая ситуация |
Вызов функции со входным значением |
Предполагаемый результат |
|
Пустой список |
(chmass ‘()) |
nil |
|
Список из целых чисел |
(chmass ‘(1 2 3 4 5 6 7 8 9 10)) |
nil |
|
Список из вещественных чисел |
(chmass ‘(1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0) |
(0.5 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 20.0) |
-
Графическое решение
Графическое решение представлено на рисунке 5.3.
|
|
Рисунок 5.3
-
Словесное описание результата применения функции
Преобразованный массив вещественных чисел.
-
Текст программы
Текст программы представлен на рисунке 5.4.
|
(DEFUN chmass(lst) (umnrazd lst (getmin lst) (getmax lst)))
(DEFUN getmin(lst) (COND ((NULL (CDR lst)) (CAR lst)) ((< (CAR lst) (getmin (CDR lst))) (CAR lst)) (T (getmin (CDR lst)))))
(DEFUN getmax(lst) (COND ((NULL (CDR lst)) (CAR lst)) ((> (CAR lst) (getmax (CDR lst))) (CAR lst)) (T (getmax (CDR lst)))))
(DEFUN umnrazd(lst min max) (COND ((NULL lst) nil) ((= (CAR lst) min) (CONS (/ (CAR lst) 2) (umnrazd (CDR lst) min max))) ((= (CAR lst) max) (CONS (* (CAR lst) 2) (umnrazd (CDR lst) min max))) (T (CONS (CAR lst) (umnrazd (CDR lst) min max)))))
|
Рисунок 5.4
-
Реализация на языке Prolog
-
Спецификация
-
Дан массив из 10 вещественных чисел. Максимальный элемент массива увеличить в 2 раза, а минимальный элемент уменьшить в 2 раза. Вывести преобразованный массив.
-
Структура входных данных
Структурой входных данных в данной функции является массив вещественных чисел. Примеры записи на языке Prolog приведены на рисунке 5.5.
|
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0] [1.6, 0.2, 3.0, 4.1, 0.5. 6.8, 7.9, 8.0, 9.2, 1.1] [1.05, 0.9, 3.8, 1.0, 0.5, 6.2, 2.0, 1.4, 9.02, 1.01] |
Рисунок 5.5
-
Структура выходных данных
Структурой выходных данных в данной функции является преобразованный массив вещественных чисел. Примеры записи на языке Prolog приведены на рисунке 5.6.
|
[0.5, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 20.0] [1.6, 0.1, 3.0, 4.1, 0.5, 6.8, 7.9, 8.0, 18.4, 1.1] [1.05, 0.9, 3.8, 1.0, 0.25, 6.2, 2.0, 1.4, 18.04, 1.01] |
Рисунок 5.6
-
Функциональные тесты
Функциональные тесты для функции repl приведены в таблице 5.2.
Таблица 5.2
|
Проверяемая ситуация |
Вызов функции со входным значением |
Предполагаемый результат |
|
Пустой массив |
repl([],X). |
No solution |
|
Массив из целых чисел |
repl([1, 2, 3, 4, 5, 6, 7, 8, 9, 10],X). |
No solution |
|
Массив из вещественных чисел |
repl([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0],X). |
[0.5, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 20.0]
|
-
Графическое решение
Графическое решение представлено на рисунке 5.7.
|
|
Рисунок 5.7
-
Словесное описание результата применения функции
Минимальное четное число из списка чисел.
-
Текст программы
Текст программы представлен на рисунке 5.8.
|
domains il=real* predicates repl(il,il) findmin(il,real) findmax(il,real) replace(il,real,real,il) clauses repl(Massiv,Result):-findmin(Massiv,Min), findmax(Massiv,Max), Min<>Max, replace(Massiv,Min,Max,Result). repl([],[]). findmin([H|T],M):-findmin(T,Mn), Mn<H, M=Mn. findmin([H|T],M):-findmin(T,Mn), Mn>H, M=H. findmin([H|[]],H). findmax([H|T],M):-findmax(T,Mn), Mn>H, M=Mn. findmax([H|T],M):-findmax(T,Mn), Mn<H, M=H. findmax([H|[]],H).
replace([H|T],Min,Max,[Min2|TR]):-H=Min, Min2=Min/2, replace(T,Min,Max,TR).
replace([H|T],Min,Max,[Max2|TR]):-H=Max, Max2=Max*2, replace(T,Min,Max,TR).
replace([H|T],Min,Max,[H|TR]):-H<>Min, H<>Max, replace(T,Min,Max,TR). replace([],_,_,[]).
goal repl([1.1,2.4,-3.5,6.8,-7.1],X). |
Рисунок 5.8


