Функцию оформить процедурой (вычислить сумму) - 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.
Объяснение кода листинга программы
- Объявлены переменные: n (целое число), r (реальная величина).
- Определена функция S с типом возвращаемого значения real, которая вычисляет сумму.
- В функции S используется условие, определяющее, является ли число m четным или нечетным.
- Если число m не равно 1, то выполняется блок кода, который вычисляет сумму s.
- Если число m равно 1, то сумма равна 1.
- Определена процедура SS без рекурсии, которая вычисляет сумму s.
- В процедуре SS используется цикл while, который выполняется до тех пор, пока число m не станет равным 1.
- В каждой итерации цикла while выполняется блок кода, который вычисляет сумму s.
- Определена процедура SSS с рекурсией, которая вычисляет сумму s.
- В процедуре SSS определена внутренняя переменная _r для хранения промежуточных результатов.
- В процедуре SSS используется рекурсивный вызов функции SSS для вычисления суммы s на меньшем числе m.
- В процедуре SSS после рекурсивного вызова функции SSS выполняется блок кода, который вычисляет сумму s.
- В основной части программы запрашивается число n и сохраняется в переменной n.
- Вычисляется сумма s с помощью функции S и выводится на экран.
- Вычисляется сумма s с помощью процедуры SS и выводится на экран.
- Вычисляется сумма s с помощью процедуры SSS и выводится на экран.
- Программа завершается чтением числа n и выводом суммы s.
- Программа завершается чтением суммы s.
- Программа завершается чтением суммы s.
- Программа завершается чтением суммы s.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д