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

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

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

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

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

textual
Листинг программы
program f2pr_sum;
{Решаем задачу по зпданию: [url]http://www.cyberforum.ru/free-pascal/thread1224324.html[/url]
 Пределать заданную функцию S в процедуру.
}
uses
  crt;
var
  n: integer;
  r: real;
 
  function S(m: integer): real;
  begin
    if m <> 1 then
      if (m mod 2) = 0 then
        s := s(m - 1) - (1 / m)
      else
        s := s(m - 1) + (1 / m)
    else
      s := 1;
  end;
//без рекурсии
procedure SS(m: integer; out r: real);
begin
  r:= 1.0;
  if m = 1 then exit;
  while m <> 1 do begin
    if (m mod 2) = 0 then
      r:=  r - 1/m
    else
      r:=  r + 1/m;
    Dec(m);
  end;
end;
//с рекурсией
procedure SSS(m: integer; out r: real);
var
  _r: real;
begin
  _r:= 0.0; r:= 0.0;
  if m <> 1 then
      if (m mod 2) = 0 then begin
        SSS(m-1, _r);
        r := _r - (1 / m)
      end else begin
        SSS(m-1, _r);
        r := _r + (1 / m)
      end
    else
      r := 1;
end;
 
begin
  clrscr;
  repeat
    Write('N=');
    readln(N);
  until n > 0;
  writeln('s=', s(n): 0: 5);
  SS(n, r);
  writeln('s=', r: 0: 5);
  SSS(n, r);
  writeln('s=', r: 0: 5);
  readln;
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
Похожие ответы