Можно ли отсылаться из одной функции к какой-то определенной из нескольких? Или вписывать в аргументы формулу - PascalABC.NET
Формулировка задачи:
Есть функция, считающая определенный интеграл от еще одной функции.
Хотелось бы сделать возможным подстановку в нее вместо f(x) еще j(x) и прочих, не переписывая заново для каждого случая. И, желательно, без case-ов, так как придется дублировать циклы
Вот сама ф-ция:
Если интересно задание: надо рассчитать коэффициенты для ряда Фурье к заданной f(x) (саму функцию можно вводить прямо в текст программы, тут ограничений нет).
Я расписал отдельные функции для A0, An и Bn. Некрасиво, но, похоже, работает. Вопрос до сих пор открыт. И вдруг кто найдет неточности в программе. Буду признателен.
Решение задачи: «Можно ли отсылаться из одной функции к какой-то определенной из нескольких? Или вписывать в аргументы формулу»
textual
Листинг программы
const accuracy = 10; var l:real; n:integer; function Y(x:real):real:=sqrt(1+x*x+2*x);//Функция f(x) type tfunc = function(n : integer; x, l : real) : real; function f(n : integer := 0; func : tfunc := nil) : real; var h,x:real; begin h:=2*l/accuracy; x:=-l+h; while x<l do begin result+=(4*Y(x)* (func = nil ? 1.0 : func(n, x, l))); x+=h; result+=(2*Y(x)*(func = nil ? 1.0 : func(n, x, l))); x+=h; end; result:=h/3*(result+Y(-l)-Y(l)); result/=l; end; function fa(n : integer; x, l : real) := cos(pi*n*x/l); function fb(n : integer; x, l : real) := sin(pi*n*x/l); begin writeln('Введите границы промежутка L. Рассчитываем коэффициенты на [-L;L]: '); read(l); writeln('Введите n (количество рассчитываемых коэффициентов): '); read(n); writeln('Преобразованная функция: '); writeln(f():6:2,'/2+'); for var i:integer:=1 to n do writeln('+(',f(i, fa):6:2,'cos(',i,'X)+',f(i, fb):6:2,'sin(',i,'X))'); end.
Объяснение кода листинга программы
- В коде определены две константы:
accuracy
иl
. - Переменные
n
,x
,l
иresult
инициализируются значением 0. - Определены две функции:
Y
иf
. - Функция
Y
вычисляет значение функцииf(x)
. - Функция
f
принимает два необязательных параметра:n
иfunc
. - Если
n
не равно 0, то функцияf
вызывает функциюfunc
с аргументамиn
,x
иl
. - Если
func
равноnil
, то функцияf
возвращает значение 1.0. - Если
func
не равноnil
, то функцияf
возвращает результат вызова функцииfunc
. - Функции
fa
иfb
вычисляют значения функцийcos
иsin
соответственно. - В основной части программы запрашиваются значения
l
иn
. - Выводится сообщение с преобразованной функцией.
- Для каждого значения
i
от 1 доn
выводится сообщение с коэффициентамиcos(i*X)
иsin(i*X)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д