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

отчет флп 4

.docx
Скачиваний:
16
Добавлен:
31.03.2021
Размер:
35.95 Кб
Скачать

УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ ИНФОРМАТИКИ И РОБОТОТЕХНИКИ

КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ

УТВЕРЖДАЮ

Проректор университета по научной работе

ФИО

"___" ______________ _______г.

ОТЧЕТ О ПРОВЕДЕНИИ ЛАБОРОТОРНОЙ РАБОТЫ № 4

ВАРИАНТ № 5

по предмету: ФУНКЦИОНАЛЬНО И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

Преподаватель

В.А. Котельников

Исполнитель

А.Р. Шакиров

Уфа 2020

ВВЕДЕНИЕ

Цель работы – изучить бесконечные списки и функции работы с текстовыми файлами.

ХОД РАБОТЫ

В ходе лабораторной работы были выполнены следующие задания:

  1. а) Числа торта – максимальное число областей, получаемое при делении куба n плоскостями - 1,2,4,8,15,26…;

б) количество чисел кратных 6, меньших 500;

Результат приведен ниже.

Main> take 10 tort

[1,2,4,8,15,26,42,64,93,130]

Main> tortVal

2

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

Слова исходного файла, не начинающиеся с заглавной буквы и не повторяющиеся.

Содержимое «in.txt»: Ab ab ab cd Cd CDE cDE

Результат приведен ниже.

Main> task2 "in.txt"

ab cd cDE

Содержимое «out.txt»: ab cd cDE

  1. Написать решение задачи:

(20). n! means n × (n − 1) × ... × 3 × 2 × 1

For example, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800,

and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

Найти сумму цифр факториала числа 100.

Результат работы приведен ниже.

Main> task3

648

  1. Написать решение задачи:

Результат приведен ниже.

Main> task4 100

11363107

ЗАКЛЮЧЕНИЕ

В ходе лабораторной работы были получены навыки работы с бесконечными списками и функциями для работы с текстовыми файлами.

ПРИЛОЖЕНИЕ А. Листинг кода в файле «laba4.hs»

-- Вариант 5

import Data.Char

import Data.List

-- 1

-- Число торта

tort :: [Integer]

tort = [(n^3 + 5*n + 6) `div` 6 | n<-[0..]]

-- количество чисел кратных 6, меньших 500 среди чисел торта

tortVal :: Int

tortVal = length [x | x <- take 1000 tort, x < 500, x `mod` 6 == 0]

-- 2

-- Написать функцию, которая читает входной текстовой файл

-- и выводит в выходной файл указанную информацию

-- Слова исходного файла, не начинающиеся с заглавной буквы

-- и не повторяющиеся

task2 :: FilePath -> IO ()

task2 fileName = do

text <- readFile fileName

putStrLn (unwords (getMyWords text))

writeFile "out.txt" (unwords (getMyWords text))

where

getMyWords text = nub (filter isLowerFirst (words text))

isLowerFirst s = isLower (head s)

-- 3

-- Сумма цифр факториала 100

task3 :: Int

task3 =

sum (map digitToInt (strFac 100))

where

strFac n = show (fac n)

fac 1 = 1

fac n = n * fac (n-1)

-- 4

-- Для натуральных n

-- f(n) - наименьшее кратное n, которое записано цифрами <=2

task4 :: Integer -> Integer

task4 n =

foldl1 (\acc x -> f x `div` x + acc) [1..n]

where

f :: Integer -> Integer

f n =

head [intTo3 a | a<-[1..], intTo3 a `mod` n == 0]

-- генерируем из 10 чисел троичные и используем как 10

intTo3 n = to3system n 0

to3system 0 _ = 0

to3system n deep =

to3system (n `div` 3) (deep + 1) + (n `mod` 3) * (10^deep)

Соседние файлы в предмете Функциональное и логическое программирование