МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ імені Тараса Шевченка
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ
Кафедра програмних систем і технологій



Дисципліна:
«Функціональне програмування»


Лабораторна робота № 2
на тему:
«Рекурентні співвідношення для тригонометричних, експоненціальних функцій та ланцюгові дроби»


Виконав:
студент групи ІПЗ-44мс
Косенко Клим Сергійович

Перевірила:
Ніколаєнко Анастасія Юріївна


Київ 2023












Мета роботи

Опанувати теоретичні основи застосування рекурентних співвідношень для обчислення тригонометричних, експоненціальних, степеневих функцій та розробити програми функціональними мовам програмування для обчислення їх значень.




Умова завдання
Умова завдання


Код 1
        ";1
        (define (factorial n)
          (if (= n 0)
              1
              (* n (factorial (- n 1)))))
        
        (define (power x n)
          (if (= n 0)
              1
              (* x (power x (- n 1)))))
        
        (define (sint x)
          (define (term n)
            (if (= n 0)
                x
                (* (/ (power -1 n) (factorial (* 2 n)))
                   (power x (* 2 n)))))
          (define (sum-terms x n)
            (if (= n 0)
                (term 0)
                (+ (term n) (sum-terms x (- n 1)))))
          (sum-terms x 10))
        
        (do ((x -2 (+ x 0.5)))
              ((> x 2))
            (newline)
            (if(and (>= x -2) (<= x 0))
               (display(- (sint x) (sint (/ x 2.0)))))
            (if(and (> x 0) (< x 1))
               (display(- (power (sint x) 3) (sint (+ x 0.125))))))"
      

Код 2
        ";2
        (define (continued-fraction a n)
          (if (= n 0)
              a
              (+ (+ (* a 2) 1) (/ (* (+ a 1) (+ a 1)) (continued-fraction (+ a 1) (- n 1))))))
        
        (define (compute-continued-fraction a tolerance)
          (define (iter n)
            (let ((approximation (/ 4 (continued-fraction a n)))
                  (previous-approximation (if (= (- n 1) 0) 0 (/ 4 (continued-fraction a (- n 1))))))
              (if (< (abs (- approximation previous-approximation)) tolerance)
                  (exact->inexact approximation)
                  (iter (+ n 1)))))
          (iter 1))
        
        (display "Введіть точність: ")
        (define tolerance (read))
        
        (display "Значення ланцюгового дробу з заданою точністю: ")
        (display (compute-continued-fraction 0 tolerance))
        (newline)"
      



Скріншот роботи та результату
Результат виконання



Висновок

У цій лабораторній роботі ми вивчали теоретичні основи застосування рекурентних співвідношень для обчислення тригонометричних, експоненціальних та степеневих функцій. Цей підхід дозволяє нам ефективно обчислювати значення цих функцій, використовуючи попередні результати. Вивчення рекурентних співвідношень розширює наше розуміння алгоритмів обчислень та сприяє оптимізації ресурсів комп'ютера.
В процесі лабораторної роботи ми також отримали практичні навички у розробці програм на функціональних мовах програмування, зокрема в мові Scheme. Це дозволило нам перевірити теоретичні знання у практичних завданнях, реалізуючи рекурентні співвідношення у вигляді функцій та перевіряючи їх правильність.