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


