Можно ли отсылаться из одной функции к какой-то определенной из нескольких? Или вписывать в аргументы формулу - 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.

Объяснение кода листинга программы

  1. В коде определены две константы: accuracy и l.
  2. Переменные n, x, l и result инициализируются значением 0.
  3. Определены две функции: Y и f.
  4. Функция Y вычисляет значение функции f(x).
  5. Функция f принимает два необязательных параметра: n и func.
  6. Если n не равно 0, то функция f вызывает функцию func с аргументами n, x и l.
  7. Если func равно nil, то функция f возвращает значение 1.0.
  8. Если func не равно nil, то функция f возвращает результат вызова функции func.
  9. Функции fa и fb вычисляют значения функций cos и sin соответственно.
  10. В основной части программы запрашиваются значения l и n.
  11. Выводится сообщение с преобразованной функцией.
  12. Для каждого значения i от 1 до n выводится сообщение с коэффициентами cos(i*X) и sin(i*X).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.5 из 5
Похожие ответы