Хелпикс

Главная

Контакты

Случайная статья





Эту программу легко переписать, чтобы сумму вычислял компьютер. Нужно добавить глобальную переменную для подсчета суммы и убрать операторы печати.



Эту программу легко переписать, чтобы сумму вычислял компьютер. Нужно добавить глобальную переменную для подсчета суммы и убрать операторы печати.

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.

Решение будет выглядеть так: 

N F(N) G(N)
3+1-2+5=7 1+3-3*2=-2
3*7-2-3+5=21 7+3*(-2)-9=-8
3*21-8+1=56 21+3*(-8)-12=-15

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 При использовании или копировании материалов прямая ссылка на сайт обязательна.