
- •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 Полный текст программы
-
Лабораторная работа №5 (программирование с использованием многомерных массивов)
-
Реализация на языке lisp
-
Спецификация
-
-
Дана
вещественная матрица размером NxM.
Определить числа
,
равные произведению минимального и
максимального элементов строк матрицы.
-
Структура входных данных
Структурой входных данных в данной функции является матрица вещественных чисел. Примеры записи на языке LISP приведены на рисунке 6.1.
((1.0 2.0 3.0 4.0) (5.0 6.0 7.0 8.0) (9.0 10.0 11.0 12.0)) ((2.1 3.0 4.5 1.0) (1.2 3.1 5.6 5.2) (0.1 0.2 0.3 0.4)) ((0.1 0.4 0.6 0.8) (1.1 1.2 1.3 1.4) (4.1 5.1 6.1 7.1)) |
Рисунок 6.1
-
Структура выходных данных
Структурой выходных данных в данной функции является список (чисел). Примеры записи на языке LISP приведены на рисунке 6.2.
((4.0)(40.0)(108.0)) ((4.5)(6.72)(0.04)) ((0.08)(1.54)(29.11)) |
Рисунок 6.2
-
Функциональные тесты
Функциональные тесты для функции main приведены в таблице 6.1.
Таблица 6.1
Проверяемая ситуация |
Вызов функции со входным значением |
Предполагаемый результат |
Пустая матрица |
(main ‘()) |
nil |
Матрица из целых чисел |
(main ‘((1 2 3 4) (5 6 7 8) (9 10 11 12 13)) |
nil |
Матрица из вещественных чисел |
(main ‘((0.1 0.4 0.6 0.8) (1.1 1.2 1.3 1.4) (4.1 5.1 6.1 7.1)) |
((0.08)(1.54)(29.11)) |
-
Графическое решение
Графическое решение представлено на рисунке 6.3.
|
Рисунок 6.3
-
Словесное описание результата применения функции
Произведение максимального и минимального чисел строк матрицы.
-
Текст программы
Текст программы представлен на рисунке 6.4.
;поиск минимума в строке (defun minim(lst) (cond ((= (cdr lst) NIL) (car lst)) ((< (car lst) (minim(cdr lst))) (car lst)) (T (minim (cdr lst))))) ;поиск максимума в строке (defun maxim(lst) (cond ((= (cdr lst) NIL) (car lst)) ((> (car lst) (maxim(cdr lst))) (car lst)) (T (maxim(cdr lst))))) ;выводит строку, состоящую из произведений минимального и максимального в каждой строке (defun main(lst rez) (cond ((NULL lst) rez) (t(cons (* (minim (car lst)) (maxim (car lst))) (main (cdr lst) rez))))) |
Рисунок 6.4
-
Реализация на языке Prolog
-
Спецификация
-
Дана
вещественная матрица размером NxM.
Определить числа
,
равные произведению минимального и
максимального элементов строк матрицы.
-
Структура входных данных
Структурой входных данных в данной функции является матрица вещественных чисел. Примеры записи на языке Prolog приведены на рисунке 6.5.
[[1.0, 2.0, 3.0, 4.0] [5.0, 6.0, 7.0, 8.0] [9.0, 10.0, 11.0, 12.0]] [[2.1, 3.0, 4.5, 1.0] [1.2, 3.1, 5.6, 5.2] [0.1, 0.2, 0.3, 0.4]] [[0.1, 0.4, 0.6, 0.8] [1.1, 1.2, 1.3, 1.4] [4.1, 5.1, 6.1, 7.1]] |
Рисунок 6.5
-
Структура выходных данных
Структурой выходных данных в данной функции является список чисел. Примеры записи на языке Prolog приведены на рисунке 6.6.
[[4.0][40.0][108.0]] [[4.5][6.72][0.04]] [[0.08][1.54][29.11]] |
Рисунок 6.6
-
Функциональные тесты
Функциональные тесты для функции pro приведены в таблице 6.2.
Таблица 6.2
Проверяемая ситуация |
Вызов функции со входным значением |
Предполагаемый результат |
Пустая матрица |
Pro ([],R). |
No solution |
Матрица из целых чисел |
maxmod ([1,2], R). |
No solution |
Матрица из вещественных чисел |
pro ([[2.1, 3.0, 4.5, 1.0] [1.2, 3.1, 5.6, 5.2] [0.1, 0.2, 0.3, 0.4]], R). |
[[4.5][6.72][0.04]]
|
-
Графическое решение
Графическое решение представлено на рисунке 6.7.
|
Рисунок 6.7
-
Словесное описание результата применения функции
Произведение максимального и минимального чисел строк матрицы.
-
Текст программы
Текст программы представлен на рисунке 6.8.
domains rlist = real* rmass = rlist*
predicates
pro(rmass, rlist) find_min_l(rlist, real) find_max_l(rlist, real)
clauses
find_min_l([H|[]],H).
find_min_l([H|T],R):- find_min_l(T,R0), R0 < H, R = R0.
find_min_l([H|T],R):- find_min_l(T,R0), H <= R0, R = H.
find_max_l([H|[]],H).
find_max_l([H|T],R):- find_max_l(T,R0), R0 > H, R = R0.
find_max_l([H|T],R):- find_max_l(T,R0), H >= R0, R = H.
pro([H|T],[H1|T1]):- find_min_l(H,Min), find_max_l(H,Max), H1 = Min * Max, pro(T,T1).
pro([],[]).
goal
pro([[1,0.5,9,7.2],[-0.2,1,3,5],[-3,-8,4,-0.01],[1,1,1,1]],R). |
Рисунок 6.8