Язык программирования Перфолента.Net - Официальный сайт

 Язык программирования Перфолента.Net - Официальный сайт.

Поиск   
Главная :: О проекте :: Контакты :: Обратная связь :: Благодарности :: ВходГость

   >   >   > 


Пример «Комплексные числа»

Файлы:

  • Прикладные задачи
    • Комплексные числа.перфо

Пример программы на языке программирования Перфо:



//Эта программа написана на языке Перфо
//для демонстрации манипуляций с комплексными числами


//====== ОПРЕДЕЛЕНИЯ ======

//Определим операции с комплексными числами как функции

//--- создание комплексного числа ---

//Создать комплексное число
//с вещественной и мнимой частями
(Функция (КоВещМним ВещественаяЧасть МнимаяЧасть) 
  (СЭЛ ВещественаяЧасть МнимаяЧасть)
)

//Создать комплексное число
//по модулю и углу
(Функция (КоМодУгл Модуль Угол)
  (СЭЛ (* Модуль (Косинус Угол)) (* Модуль (Синус Угол)))
)

//--- извлечение частей комплексного числа ---

//Получить вещественную часть комплексного числа
(Функция (ВещЧастьКо Ко) (ПЭЛ Ко 0))

//Получить мнимую часть комплексного числа
(Функция (МнимЧастьКо Ко) (ПЭЛ Ко 1))

//Получить модуль комплексного числа
(Функция (МодульКо Ко)
  (Корень (+ (^ (ВещЧастьКо Ко) 2) 
             (^ (МнимЧастьКо Ко) 2)
          )
  )
)

//Получить угол комплексного числа
(Функция (УголКо Ко)
    (ATan2 (МнимЧастьКо Ко) (ВещЧастьКо Ко))
)

//--- вспомогательные функции ---

//Функция ATanYX аналог ATan2, использовалась, когда функции ATan2 ещё не было в языке Перфо.   
//Вычисляет корректно угол в любом квадранте комплексной плоскости
(Функция (ATanYX Y X)
    (Перем ПИ 3.14159265358979) 
    (Если (> X 0)
        (ATan (/ Y X))
        (Если (< X 0)
            (Если (>= Y 0)
                (+ (ATan (/ Y X)) ПИ)
                (- (ATan (/ Y X)) ПИ)
            )
            (Если (= Y 0)
                0
                (Если (> Y 0)
                    (/ ПИ 2)
                    (- (/ ПИ 2))
                )
            )
        )
    )
)

//Функция форматирует комплексное число в строку
//Позволяет указать разрядность округления частей комплексного числа 
(Функция (ФорматКо Ко Разрядность) 
    (& 
        (Строка:Окр (ВещЧастьКо Ко) Разрядность)
        (Если (< (МнимЧастьКо Ко) 0) "" "+") 
        (Строка:Окр (МнимЧастьКо Ко) Разрядность) 
        "i"
    )
) 

//--- определение арифметических операций ---

//сложение комплексных чисел
(Функция (+ко Ко1 Ко2)
  (КоВещМним 
    (+ (ВещЧастьКо Ко1) (ВещЧастьКо Ко2))
    (+ (МнимЧастьКо Ко1) (МнимЧастьКо Ко2))
  )
)

//вычитание комплексных чисел
(Функция (-ко Ко1 Ко2)
  (КоВещМним 
    (- (ВещЧастьКо Ко1) (ВещЧастьКо Ко2))
    (- (МнимЧастьКо Ко1) (МнимЧастьКо Ко2))
  )
)

//умножение комплексных чисел

//умножение через вещественную и мнимую части
(Функция (*ко Ко1 Ко2)
    // Извлекаем компоненты
    (Перем А (ВещЧастьКо Ко1))
    (Перем Б (МнимЧастьКо Ко1))
    (Перем В (ВещЧастьКо Ко2))
    (Перем Г (МнимЧастьКо Ко2))

    // Правила умножения: (А + Бi)(В + Гi) = (АВ - БГ) + (АГ + БВ)i
    (Перем РеальнаяЧасть (- (* А В) (* Б Г)))
    (Перем МнимаяЧасть (+ (* А Г) (* Б В)))

    (КоВещМним РеальнаяЧасть МнимаяЧасть)
)

//умножение через модуль и угол
(Функция (*коугл Ко1 Ко2)
    // Вычисляем модули и углы обоих комплексных чисел
    (Перем М1 (МодульКо Ко1))
    (Перем М2 (МодульКо Ко2))
    (Перем У1 (УголКо Ко1))
    (Перем У2 (УголКо Ко2))

    // Перемножаем модули, складываем углы
    (Перем НовыйМодуль (* М1 М2))
    (Перем НовыйУгол (+ У1 У2))

    // Формируем новое комплексное число
    (КоМодУгл НовыйМодуль НовыйУгол)
)

//деление комплексных чисел

//умножение через вещественную и мнимую части
(Функция (/ко Ко1 Ко2)
    (Перем А (ВещЧастьКо Ко1))
    (Перем Б (МнимЧастьКо Ко1))
    (Перем В (ВещЧастьКо Ко2))
    (Перем Г (МнимЧастьКо Ко2))

    (Перем Знаменатель (+ (^ В 2) (^ Г 2)))

    (Перем РеальнаяЧасть (/ (+ (* А В) (* Б Г)) Знаменатель))
    (Перем МнимаяЧасть (/ (- (* Б В) (* А Г)) Знаменатель))

    (КоВещМним РеальнаяЧасть МнимаяЧасть)
)

//деление через модуль и угол
(Функция (/коугл Ко1 Ко2)
  (КоМодУгл 
    (/ (МодульКо Ко1) (МодульКо Ко2))
    (- (УголКо Ко1) (УголКо Ко2))
  )
)


//====== ТЕСТЫ ======


//Сложение
//Найти сумму комплексных чисел z1 = 5 ? 6i и z2 = ?3 + 2i. 
(Перем Ко (+ко (КоВещМним 5 -6) (КоВещМним -3 2)))
(Вывод "Сложение = " (ФорматКо Ко 0) пс)
//Ответ: 2?4i

//Вычитание
//Выполнить вычитание комплексных чисел (5 + 9i) ? (3 + 24i) 
(Перем Ко (-ко (КоВещМним 5 9) (КоВещМним 3 24)))
(Вывод "Вычитание = " (ФорматКо Ко 0) пс)
//Ответ: 2?15i

//Умножение
//Найти произведение комплексных чисел z1 = 2 + 3i и z2 = ?1 + i. 
(Перем Ко (*ко (КоВещМним 2 3) (КоВещМним -1 1)))
(Вывод "Умножение = " (ФорматКо Ко 0) пс)
(Уст Ко (*коугл (КоВещМним 2 3) (КоВещМним -1 1)))
(Вывод "Умножение (угл) = " (ФорматКо Ко 0) пс)
//Ответ: -5?1i

//Деление
//Найти частное (2 + 3i) / (5 ? 7i). 
(Перем Ко (/ко (КоВещМним 2 3) (КоВещМним 5 -7)))
(Вывод "Деление = " (ФорматКо Ко 3) пс)
(Уст Ко (/коугл (КоВещМним 2 3) (КоВещМним 5 -7)))
(Вывод "Деление (угл) = " (ФорматКо Ко 3) пс)
//Ответ: -0,149+0,392i

//тест функции ATanYX
(Вывод пс "Тест функции ATanYX:" пс)
(Функция (ПроверитьATanYX)
    (Перем Тесты
        (Список 
            // Каждая пара: [X Y]
            (Список 1 1)      // 1 квадрант
            (Список -1 1)     // 2 квадрант
            (Список -1 -1)    // 3 квадрант
            (Список 1 -1)     // 4 квадрант
            (Список 0 1)      // вверх
            (Список 0 -1)     // вниз
            (Список 1 0)      // вправо
            (Список -1 0)     // влево
            (Список 0 0)      // ноль
        )      
    )
    (Для (Инд 0 (- Тесты.Количество 1))
        (Перем Пара (ПЭЛ Тесты Инд))
        (Перем X (ПЭЛ Пара 0))
        (Перем Y (ПЭЛ Пара 1))

        (Перем Угол (ATanYX Y X))

        (Вывод "X = " X ", Y = " Y ", Угол = " Угол пс)
    )
)
(ПроверитьATanYX)

К началу статьи


Вернуться в раздел:
Примеры по языку Перфо

Перейти в раздел:
Примеры
  Поддержи проект!

Вы можете поддержать разработку Перфоленты, перечислив любую удобную сумму, которая пойдет на развитие языка и поддержку инфраструктуры сайта.

  Новости:
      21.01.2026 На сайт добавлена статья "Конструируем класс. События"
      20.01.2026 Опубликован новый релиз 0.4.18.0_NY языка программирования Перфолента.Net
      29.12.2025 Анонс: Новая возможность - разрабатываем веб-сайты, веб-приложения и веб-API на Перфоленте!
      07.06.2025 Небольшие дополнения к документации на сайте - описание атрибута поля &Атомарное
      09.05.2025 На сайте опубликован релиз 0.4.16.0_SE дистрибутива языка программирования Перфолента.Net
      27.04.2025 Дополнена статья про циклы
      04.01.2025 Опубликован новый релиз дистрибутива языка программирования Перфолента.Net версии 0.4.15.0_CE
      23.09.2024 Опубликована новая статья: "Конструируем класс. Делегаты."
      30.08.2024 Опубликован новый релиз дистрибутива языка программирования Перфолента.Net версии 0.4.14.0
      24.05.2024 Обновлён справочный раздел сайта
      01.07.2023 Новая версия 0.4.13.0 языка программирования Перфолента.Net
       Все новости