|
||||||||||||||||||
Эту программу легко переписать, чтобы сумму вычислял компьютер. Нужно добавить глобальную переменную для подсчета суммы и убрать операторы печати. ⇐ ПредыдущаяСтр 2 из 2 Эту программу легко переписать, чтобы сумму вычислял компьютер. Нужно добавить глобальную переменную для подсчета суммы и убрать операторы печати. Program PR_3; Var sum : integer; procedure F(n: integer); begin sum:=sum + n; if n < 6 then begin n:= n + 1; F(n + 1); F( n*2 ); Sum:=sum + n ; end end; BEGIN sum:=0; F(1); writeln(sum) END. Эти вычисления мы без труда выполнили «вручную» и программу можно написать только для проверки правильности ответа.
Нетрудно представить себе аналогичную задачу, которую нельзя сделать «вручную». ЗАДАЧА 4. Определите наименьшее значение n, при котором сумма чисел, которые будут выведены при вызове F(n), будет больше 1000000. Запишите в ответе сначала найденное значение n, а затем через пробел – соответствующую сумму выведенных чисел. procedure F( n: integer ); begin writeln(n+1); if n > 1 then begin writeln(2*n); F(n-1); F(n-3); end; end; Напишем соответствующую программу, внеся необходимые изменения в процедуру. Program PR_4; Var n, sum:integer; procedure F( n: integer ); begin sum:=sum+n+1; if n > 1 then begin sum:=sum +2*n; F(n-1); F(n-3); end; end; Begin n:=1; SUM:=1; while sum<=1000000 do begin sum:=0; F(n); n:=n+1 end; writeln(n:10, sum:10) end. Получается такой ответ: 31 1249317. ЗАДАЧА 5. Осталось рассмотреть задачу со взаимным вызовом двух процедур. Алгоритм вычисления функций F(n) и G(n) задан следующими соотношениями: F(1) = G(1) = 1 F(n) = 3·F(n–1) + G(n–1) – n + 5, если n > 1 G(n) = F(n–1) + 3·G(n–1) – 3·n, если n > 1 Если требуется найти F(4) + G(4) то это несложно сделать вручную. Результатом будет число 41. Решение будет выглядеть так:
56-15=41 |
А если требуется выяснить чему равно значение F(14) + G(14), то придется написать программу
PROGRAMPR_5;
Functionf(n:integer):integer; FORWARD;
functiong(n:integer):integer; FORWARD;
functionf(n:integer):integer;
begin
ifn=1
thenf:=1
elsef:=3*f(n-1) + g(n-1) - n+5
end;
functiong(n:integer):integer;
begin
ifn=1
theng:=1
elseg:=f(n-1)+3*g(n-1) - 3*n
end;
BeginWriteln(f(14) + g(14))
End.
В результате работы этой программы получено довольно большое число 37282721.
|
© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.
|
|