Пример «Универсальная функция суммы»
Файлы:
- Синтаксис языка
- Функции
- Универсальная функция суммы.перфо
- Функции
Пример программы на языке программирования Перфо:
//Эта программа написана на языке программирования Перфо
//для демонстрации написания универсальных функций
//напишем универсальную функцию суммирования членов последовательности от А до Б,
//где над каждым членом последовательности выполняется определенная операция
//Например, это могут быть такие функции как:
// - сумма чисел от 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д) пс)
К началу статьи
Вернуться в раздел:
Примеры по языку Перфо
Перейти в раздел:
Примеры