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



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


Лабораторна робота № 5
на тему:
«Обробка раціональних та комплексних чисел
мовами функціонального програмування»


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

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


Київ 2023












Мета роботи

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




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


Код 1
        ";(1/4)x + (1/7)x + 17 = x
        ;x = 17/(1 - (1/4+1/7))
        
        (define (numer x) (car x));чисельник
        
        (define (denom x) (cdr x))		;знаменник
        
        (define (make-rat n d) (cons n d))		; створення пари
        
        (define(print-rat x)			; друк пари
          (newline)
          (display (numer x))
          (display "/")
          (display (denom x)))
        
        (define (add-rat x y)
              (make-rat (+ (* (numer x) (denom y)
                            )
                           (* (numer y) (denom x)
                            )
                         )
                         (* (denom x) (denom y)
                         )
               )
            )
        
        (define (div-rat x y)
                (make-rat (* (numer x) (denom y))
                                  (* (denom x) (numer y))))
        
        (define (sub-rat x y)
               (make-rat (- (* (numer x) (denom y))
                                     (* (numer y) (denom x)))
                                  (* (denom x) (denom y))))
        
        (define (solve-task x y z)
           (div-rat (make-rat z 1) (sub-rat (make-rat 1 1) (add-rat x y)))
          )
        (define fraction1 (make-rat 1 4) )
        (define fraction2 (make-rat 1 7) )
        
        (display "Відповідь")
        (define solution (solve-task fraction1 fraction2 17))
        (print-rat solution)
        (newline)
        (display (/ (numer solution) (denom solution)))
        "
      

Код 2
        "(define (make-from-real-imag x y)
        (cond
        ((> y 0) (list (string-append (number->string x) " " "+" " " (number->string y) "i")))
        ((< y 0) (list (string-append (number->string x) " " "-" " " (number->string (- 0 y)) "i")))
        (else (list (string-append (number->string x)))))
      )
      
      (define (my-map func x y)
        (if (null? (cdr x))
            (list(func (car x) (car y)))
        (cons (func (car x) (car y)) (my-map func (cdr x) (cdr y))))
      )
      
      (define list1 '(1 2 3 4))
      (define list2 '(-5 6 7 -8))
      (define complex-list (my-map make-from-real-imag list1 list2))
      (display complex-list)
      "
      



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



Висновок

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