Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet_LISP_Prolog.docx
Скачиваний:
16
Добавлен:
12.04.2015
Размер:
4.54 Mб
Скачать
  1. Лабораторная работа №5 (программирование с использованием многомерных массивов)

    1. Реализация на языке lisp

      1. Спецификация

Дана вещественная матрица размером NxM. Определить числа , равные произведению минимального и максимального элементов строк матрицы.

      1. Структура входных данных

Структурой входных данных в данной функции является матрица вещественных чисел. Примеры записи на языке 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

      1. Структура выходных данных

Структурой выходных данных в данной функции является список (чисел). Примеры записи на языке LISP приведены на рисунке 6.2.

((4.0)(40.0)(108.0))

((4.5)(6.72)(0.04))

((0.08)(1.54)(29.11))

Рисунок 6.2

      1. Функциональные тесты

Функциональные тесты для функции 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))

      1. Графическое решение

Графическое решение представлено на рисунке 6.3.

Рисунок 6.3

      1. Словесное описание результата применения функции

Произведение максимального и минимального чисел строк матрицы.

      1. Текст программы

Текст программы представлен на рисунке 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

    1. Реализация на языке Prolog

      1. Спецификация

Дана вещественная матрица размером NxM. Определить числа , равные произведению минимального и максимального элементов строк матрицы.

      1. Структура входных данных

Структурой входных данных в данной функции является матрица вещественных чисел. Примеры записи на языке 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

      1. Структура выходных данных

Структурой выходных данных в данной функции является список чисел. Примеры записи на языке Prolog приведены на рисунке 6.6.

[[4.0][40.0][108.0]]

[[4.5][6.72][0.04]]

[[0.08][1.54][29.11]]

Рисунок 6.6

      1. Функциональные тесты

Функциональные тесты для функции 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]]

      1. Графическое решение

Графическое решение представлено на рисунке 6.7.

Рисунок 6.7

      1. Словесное описание результата применения функции

Произведение максимального и минимального чисел строк матрицы.

      1. Текст программы

Текст программы представлен на рисунке 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]