Функцию оформить процедурой (вычислить сумму) - 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.