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

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

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

   >   >   > 


Пример «Универсальная функция суммы»

Файлы:

  • Синтаксис языка
    • Функции
      • Универсальная функция суммы.перфо

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



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


//напишем универсальную функцию суммирования членов последовательности от А до Б,
//где над каждым членом последовательности выполняется определенная операция

//Например, это могут быть такие функции как:
// - сумма чисел от 1 до 5
// - сумма квадратов чисел от 1 до 5
// - вычисление числа Пи/8 с помощью ряда 1/(1*3)+1/(5*7)+1/(9*11)... в диапазоне от 1 до 1000
// - вычисление определенного интеграла функции х^3 на отрезке от 1 до 10

// Описание:
// Определение универсальной функции обработки последовательности значений от А до Б.
// Параметры:
// Операция - функция, производящая операцию над каждым членом последовательности;
// А - начальное значение последовательности;
// Следующий - функция, возвращающая следующее значение последовательности;
// Б - конечное значение последовательности;
(Функция (Сумма Операция А Следующий Б)
    (Если (> А Б)
        0
        (+ (Операция А) (Сумма Операция (Следующий А) Следующий Б))
    )
)


//===== функция суммы чисел ======

//Операция для суммирования чисел
(Функция (Операнд А) 
    А
)

//Функция получения следующего члена последовательности
(Функция (Плюс1 А) 
    (+ А 1)
) 

//вычислим сумму чисел от 1 до 10
(Вывод "Сумма от 1 до 10 = " (Сумма Операнд 1 Плюс1 10) пс)

//теперь можно определить отдельную функцию суммы чисел
(Функция (СуммаЧисел От До) 
    (Сумма Операнд От Плюс1 До)
) 

//вычислим сумму чисел от 1 до 10
(Вывод "Сумма от 1 до 10 = " (СуммаЧисел 1 10) пс)


//====== функция суммы квадратов чисел ======

//Операция для суммирования квадратов чисел
(Функция (Квадрат А) 
    (* А А)
)

//Функция получения следующего члена последовательности остается такой же,
//как в предыдущем примере: Плюс1...

//вычислим сумму квадратов чисел от 1 до 10
(Вывод "Сумма квадратов от 1 до 10 = " (Сумма Квадрат 1 Плюс1 10) пс)

//теперь можно определить отдельную функцию суммы квадратов
(Функция (СуммаКвадратов От До) 
    (Сумма Квадрат От Плюс1 До)
) 

//вычислим сумму квадратов чисел от 1 до 10
(Вывод "Сумма квадратов от 1 до 10 = " (СуммаКвадратов 1 10) пс)

//====== функция вычисления ряда Пи/8 ======

// Ряд бесконечный, медленно сходящийся
// Пи/8 = 1/(1*3)+1/(5*7)+1/(9*11)...

//Операция для вычисления значения члена ряда Пи/8
(Функция (ОперПи x)
    (/ 1д (* x (+ x 2)))
)

//Функция для получения следующего значения в диапазоне
(Функция (СледПи А) 
    (+ А 4)
) 

//Функция вычисления ряда Пи/8
(Функция (ПиНа8 От До) 
    (Сумма ОперПи От СледПи До)
) 

//Вычислим число Пи с помощью ряда
(Вывод "Число Пи = " (* 8 (ПиНа8 1 1000)) пс)

//Ответ: Число Пи = 3,13959265558978
//этот ряд сходится медленно, поэтому точность ответа не высокая

//====== функция вычисления определенного интеграла ======

//функция для вычисления определенного интеграла функции на заданном отрезке
(Функция (Интеграл Фун От До Приращение)
    //функцию получения следующего значения на интервале инкапсулируем
    //внутрь функции Интеграл, т.к. изменять её не потребуется 
    (Функция (ДобавитьПриращение Х) 
        (+ Х Приращение)
    ) 
    (* (Сумма Фун (+ От (/ Приращение 2)) ДобавитьПриращение До) Приращение)
) 

//определение кубической функции для которой мы будем вычислять определенный интеграл
(Функция (Куб А) 
    (* А А А)
)

//проверка с шагом 0.1
(Вывод "Интеграл = " (Интеграл Куб 0 1 0.1д) пс)
//Ответ: 0,24875

//проверка с шагом 0.01
(Вывод "Интеграл = " (Интеграл Куб 0 1 0.01д) пс)
//Ответ: 0,2499875

//Точное значение интеграла х^3 от 0 до 1 равно 1/4, т.е. 0.25.

//--- напишем функцию вычисления интеграла немного по другому ---

//Вместо инкапсуляции функции получения следующего значения
//используем лямбда-выражение Функ
(Функция (Интеграл2 Фун От До Приращение)
    (* (Сумма Фун (+ От (/ Приращение 2)) (Функ (Х) (+ Х Приращение)) До) Приращение)
) 
//проверка с шагом 0.01
(Вывод "Интеграл2 = " (Интеграл2 Куб 0 1 0.01д) пс)



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


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

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

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

  Новости:
      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
       Все новости