Функцию оформить процедурой (вычислить сумму) - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Функцию оформить процедурой(вычислить сумму вида 1-1/2+1/3+...+((-1)^(n-1))/n)
Листинг программы
  1. uses crt;
  2. Var n:integer;
  3. z:real;
  4. Function S(m:integer):real;
  5. Begin
  6. if m<>1 then
  7. if (m mod 2)=0 then
  8. s:=s(m-1)-(1/m)
  9. else s:=s(m-1)+(1/m)
  10. else s:=1;
  11. end;
  12. Begin
  13. clrscr;
  14. repeat
  15. write('N='); readln(N);
  16. until n>0; writeln('s=',s(n):0:5);
  17. readln;
  18. END.

Решение задачи: «Функцию оформить процедурой (вычислить сумму)»

textual
Листинг программы
  1. program f2pr_sum;
  2. {Решаем задачу по зпданию: [url]http://www.cyberforum.ru/free-pascal/thread1224324.html[/url]
  3.  Пределать заданную функцию S в процедуру.
  4. }
  5. uses
  6.   crt;
  7. var
  8.   n: integer;
  9.   r: real;
  10.  
  11.   function S(m: integer): real;
  12.   begin
  13.     if m <> 1 then
  14.       if (m mod 2) = 0 then
  15.         s := s(m - 1) - (1 / m)
  16.       else
  17.         s := s(m - 1) + (1 / m)
  18.     else
  19.       s := 1;
  20.   end;
  21. //без рекурсии
  22. procedure SS(m: integer; out r: real);
  23. begin
  24.   r:= 1.0;
  25.   if m = 1 then exit;
  26.   while m <> 1 do begin
  27.     if (m mod 2) = 0 then
  28.       r:=  r - 1/m
  29.     else
  30.       r:=  r + 1/m;
  31.     Dec(m);
  32.   end;
  33. end;
  34. //с рекурсией
  35. procedure SSS(m: integer; out r: real);
  36. var
  37.   _r: real;
  38. begin
  39.   _r:= 0.0; r:= 0.0;
  40.   if m <> 1 then
  41.       if (m mod 2) = 0 then begin
  42.         SSS(m-1, _r);
  43.         r := _r - (1 / m)
  44.       end else begin
  45.         SSS(m-1, _r);
  46.         r := _r + (1 / m)
  47.       end
  48.     else
  49.       r := 1;
  50. end;
  51.  
  52. begin
  53.   clrscr;
  54.   repeat
  55.     Write('N=');
  56.     readln(N);
  57.   until n > 0;
  58.   writeln('s=', s(n): 0: 5);
  59.   SS(n, r);
  60.   writeln('s=', r: 0: 5);
  61.   SSS(n, r);
  62.   writeln('s=', r: 0: 5);
  63.   readln;
  64. end.

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

  1. Объявлены переменные: n (целое число), r (реальная величина).
  2. Определена функция S с типом возвращаемого значения real, которая вычисляет сумму.
  3. В функции S используется условие, определяющее, является ли число m четным или нечетным.
  4. Если число m не равно 1, то выполняется блок кода, который вычисляет сумму s.
  5. Если число m равно 1, то сумма равна 1.
  6. Определена процедура SS без рекурсии, которая вычисляет сумму s.
  7. В процедуре SS используется цикл while, который выполняется до тех пор, пока число m не станет равным 1.
  8. В каждой итерации цикла while выполняется блок кода, который вычисляет сумму s.
  9. Определена процедура SSS с рекурсией, которая вычисляет сумму s.
  10. В процедуре SSS определена внутренняя переменная _r для хранения промежуточных результатов.
  11. В процедуре SSS используется рекурсивный вызов функции SSS для вычисления суммы s на меньшем числе m.
  12. В процедуре SSS после рекурсивного вызова функции SSS выполняется блок кода, который вычисляет сумму s.
  13. В основной части программы запрашивается число n и сохраняется в переменной n.
  14. Вычисляется сумма s с помощью функции S и выводится на экран.
  15. Вычисляется сумма s с помощью процедуры SS и выводится на экран.
  16. Вычисляется сумма s с помощью процедуры SSS и выводится на экран.
  17. Программа завершается чтением числа n и выводом суммы s.
  18. Программа завершается чтением суммы s.
  19. Программа завершается чтением суммы s.
  20. Программа завершается чтением суммы s.

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


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

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

12   голосов , оценка 3.583 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы