Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет_Лаба2_ФП_Алексеева

.doc
Скачиваний:
11
Добавлен:
19.01.2023
Размер:
7.87 Mб
Скачать

Уфимский государственный авиационный технический университет

ОТЧЕТ по лабораторной работе №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)

  1. Определите функции для вычисления чисел Фибоначчи по номеру и для вычисления факториала. С помощью них определите собственную функцию, записанную в условной математической нотации. (fib(n) - означает n-е число Фибоначчи).

F(n,m,l)= fib(n!+2*max{m,l}-min{m,l})

  1. Определите рекурсивные функции (задание в варианте) для решения задачи, постарайтесь по возможности не использовать встроенные списочные функции.

а)Удалить из строки все элементы, равные заданному символу;

б) найти произведение индексов (начиная с 1) четных элементов числового списка, при отсутствии четных элементов вывести -1.

  1. В задании описаны правила составления некоторого пароля. Написать функцию, проверяющую удовлетворяет ли заданная строка данным правилам, используя различные функции из модуля Char.

а) не должен содержать латинских заглавных букв, стоящих в алфавите после ‘T’ б) содержит только четные цифры.

  1. Дано универсальное множество U={1,2,…,10} и некоторые его подмножества A,B,C. Найти множество D, заданное в варианте. Реализовать множества списками и использовать функции из модуля List.

  1. Написать функцию двух аргументов строкового типа, для выполнения арифметической операции. Вид операции, представление аргументов(система счисления) и результат в варианте задан в следующем виде:

При выполнении непосредственно арифметической операции разрешается использовать любую систему счисления (в т.ч. десятичную).

Операция

1-й аргумент

2-й аргумент

Результат

вычитание

8-ричная

двоичная

римская

  1. Используя функции 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