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

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

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

Дан массив из 10 вещественных чисел. Максимальный элемент массива увеличить в 2 раза, а минимальный элемент уменьшить в 2 раза. Вывести преобразованный массив.

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

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

      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

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

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

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

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

Рисунок 5.3

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

Преобразованный массив вещественных чисел.

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

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

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

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

Дан массив из 10 вещественных чисел. Максимальный элемент массива увеличить в 2 раза, а минимальный элемент уменьшить в 2 раза. Вывести преобразованный массив.

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

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

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

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

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

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

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

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

Рисунок 5.7

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

Минимальное четное число из списка чисел.

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

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

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