Отчет_Лаба2_ФП_Алексеева
.docУфимский государственный авиационный технический университет
ОТЧЕТ по лабораторной работе №2
по дисциплине:
«Функциональное программирование»
на тему:
«Создание простейших рекурсивных программ. Функции работы со строками и множествами. Сообщения об ошибках и преобразования типов.»
Выполнил: бакалавр гр. ПРО-223
Алексеева А.В.
Проверил: Фридлянд Александр Михайлович
Содержание
Содержание 2
1 задание 5
2 задание а) 6
2 задание б) 7
3 задание а) 7
3 задание б) 8
3 задание а)+б) 9
4 задание 9
5 задание 10
6 задание 10
7 задание 12
Выводы 14
1 Цель работы (Вариант 3)
Определите функции для вычисления чисел Фибоначчи по номеру и для вычисления факториала. С помощью них определите собственную функцию, записанную в условной математической нотации. (fib(n) - означает n-е число Фибоначчи).
F(n,m,l)= fib(n!+2*max{m,l}-min{m,l})
Определите рекурсивные функции (задание в варианте) для решения задачи, постарайтесь по возможности не использовать встроенные списочные функции.
а)Удалить из строки все элементы, равные заданному символу;
б) найти произведение индексов (начиная с 1) четных элементов числового списка, при отсутствии четных элементов вывести -1.
В задании описаны правила составления некоторого пароля. Написать функцию, проверяющую удовлетворяет ли заданная строка данным правилам, используя различные функции из модуля Char.
а) не должен содержать латинских заглавных букв, стоящих в алфавите после ‘T’ б) содержит только четные цифры.
Дано универсальное множество U={1,2,…,10} и некоторые его подмножества A,B,C. Найти множество D, заданное в варианте. Реализовать множества списками и использовать функции из модуля List.
Написать функцию двух аргументов строкового типа, для выполнения арифметической операции. Вид операции, представление аргументов(система счисления) и результат в варианте задан в следующем виде:
При выполнении непосредственно арифметической операции разрешается использовать любую систему счисления (в т.ч. десятичную).
-
Операция
1-й аргумент
2-й аргумент
Результат
вычитание
8-ричная
двоичная
римская
Используя функции show, read, error, undefined (не обязательно все сразу) напишите функцию, выполняющую указанные действия.
По введенным датам рождения и смерти в формате «dd.mm.yyyy» вычисляет продолжительность жизни человека в годах, месяцах и днях. Выводит соответствующие сообщения об ошибках в данных.
2 Теоретические основы
В императивных языках программирования основной конструкцией является цикл.
В Haskell вместо циклов используется рекурсия. Функция называется рекурсивной, если
она вызывает сама себя (или, точнее, определена в терминах самой себя). Рекурсивные
функции существуют в императивных языках, но используются не столь широко.
Рекурсия - это способ определять функции таким образом, что функция применяется в собственном определении.
3 Результат выполнения работы
1 задание
F(n,m,l)= fib(n!+2*max{m,l}-min{m,l})
Рисунок 1 Результат работы
Рисунок 2 Исходный код
2 задание а)
Удалить из строки все элементы, равные заданному символу;
Рисунок 3 Исходный код
Рисунок 4 Результат работы программы
2 задание б)
найти произведение индексов (начиная с 1) четных элементов числового списка, при отсутствии четных элементов вывести -1.
Рисунок 5 Исходный код
Рисунок 6 Результат
3 задание а)
не должен содержать латинских заглавных букв, стоящих в алфавите после ‘T’
Рисунок 7 Исходный код
Рисунок 8 Результат работы программы
3 задание б)
содержит только четные цифры
Рисунок 9 Исходный код
Рисунок 10 Результат
3 задание а)+б)
Рисунок 11 Исходный код
Рисунок 12 Результат
4 задание
Зашифруйте заданную строку с помощью шифра Цезаря с ключом, соответствующим номеру варианта (3). Напишите функцию для расшифровки (можно одну функцию с дополнительным аргументом, задающим режим шифровки или расшифровки). Внимание! Шифроваться должны только буквы, все остальные символы должны оставаться без изменений. Шифр Цезаря означает циклический сдвиг каждого символа в строке на число, равное коду.
Рисунок 13 Исходный код
Рисунок 14 Результат
5 задание
Рисунок 15 Исходный код
Рисунок 16 Результат
6 задание
-
Операция
1-й аргумент
2-й аргумент
Результат
вычитание
8-ричная
двоичная
римская
Рисунок 17 Исходный код
Рисунок 18 Результат
7 задание
По введенным датам рождения и смерти в формате «dd.mm.yyyy» вычисляет продолжительность жизни человека в годах, месяцах и днях. Выводит соответствующие сообщения об ошибках в данных.
Рисунок 19 Исходный код
Рисунок 20 Результат
Выводы
Выполнила задания лабораторной, соответствующие моему варианту.
Уфа – 2020