Файл: Отчет по контрольной работе по дисциплине Функциональное и логическое программирование.docx
Добавлен: 25.10.2023
Просмотров: 11
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Томский государственный университет систем управления и радиоэлектроники» (ТУСУР)
Кафедра автоматизации обработки информации (АОИ)
Отчет по контрольной работе
по дисциплине «Функциональное и логическое программирование»
Студент гр. з-429П6-1
____________ А.А. Пивоваров
«___» _____________ 2023 г.
Преподаватель
канд. техн. наук,
доцент кафедры АОИ
__________ / Н. Ю. Салмина /
«___» _____________ 2023 г.
Томск 2023
Задача 1
Условие
Напишите предикат digits(+N, -L), истинный тогда и только тогда, когда L – список цифр натурального числа N.
Решение
digits(0, []).
digits(N, L) :-
N > 0,
N1 is div(N, 10),
digits(N1, L1),
D is mod(N, 10),
append(L1, [D], L).
Предикат digits(0, []). - это базовый случай, когда N равно 0. В этом случае список L пуст.
Предикат digits(N, L) :- - это рекурсивный случай, когда N больше 0. В этом случае программа делит число N на 10 с помощью функции div(N, 10) и сохраняет результат в переменной N1. Это дает нам оставшуюся часть числа N, без последней цифры.
Затем программа рекурсивно вызывает себя для оставшейся части числа N, используя digits(N1, L1). Это дает нам список L1, содержащий цифры оставшейся части числа N.
После этого программа находит последнюю цифру числа N с помощью функции mod(N, 10) и сохраняет ее в переменной D.
Наконец, программа добавляет последнюю цифру D в конец списка L1 с помощью функции append(L1, [D], L), чтобы получить список L, содержащий все цифры числа N.
Если N равно 0, то программа использует первое правило (базовый случай) и возвращает пустой список [].
Таким образом, программа digits разбивает число N на цифры и создает список L, содержащий все цифры числа N. Если N равно 0, то возвращается пустой список.
Задача 2
Условие
Напишите предикат summa_digits(+N, -S), истинный тогда и только тогда, когда S – сумма цифр натурального числа N.
Решение
summa_digits(0, 0).
summa_digits(N, S) :-
N > 0,
N1 is div(N, 10),
summa_digits(N1, S1),
S is S1 + mod(N, 10).
Предикат summa_digits(0, 0). - это базовый случай, когда N равно 0. В этом случае сумма цифр равна 0.
Предикат summa_digits(N, S) :- - это рекурсивный случай, когда N больше 0. В этом случае программа делит число N на 10 с помощью функции div(N, 10) и сохраняет результат в переменной N1. Это дает нам оставшуюся часть числа N, без последней цифры.
Затем программа рекурсивно вызывает себя для оставшейся части числа N, используя summa_digits(N1, S1). Это дает нам сумму цифр оставшейся части числа N.
После этого программа находит последнюю цифру числа N с помощью функции mod(N, 10) и сохраняет ее в переменной D.
Наконец, программа добавляет последнюю цифру D к сумме цифр оставшейся части числа N S1 с помощью функции S is S1 + mod(N, 10), чтобы получить общую сумму цифр числа N.
Если N равно 0, то программа использует первое правило (базовый случай) и возвращает 0.
Таким образом, программа summa_digits суммирует цифры числа N и возвращает их сумму S.