Предмет: Информатика, автор: Nastya232

Помогите с информатикой, задание на фото

Приложения:

Ответы

Автор ответа: Аноним
0
Для решения задачи написана программа, в которую вставлены операторы вывода с целью трассировки.

// PascalABC.NET 3.1, сборка 1192 от 07.03.2016
function G(n:integer):integer; forward;

function F(n:integer):integer;
begin
  Writeln('Вход в F(',n,')');
  if n=1 then Result:=1
  else Result:=F(n-1)-G(n-1);
  Writeln('Выход из F(',n,') со значением ',Result)
end;

function G(n:integer):integer;
begin
  Writeln('Вход в G(',n,')');
  if n=1 then Result:=1
  else Result:=F(n-1)+G(n-1);
  Writeln('Выход из G(',n,') со значением ',Result)
end;

begin
  Writeln('РЕЗУЛЬТАТ: ',F(5)/G(5)) 
end.

Результат выполнения программы (трассировочная таблица)
Вход в F(5)
Вход в F(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из F(4) со значением -4
Вход в G(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из G(4) со значением 0
Выход из F(5) со значением -4
Вход в G(5)
Вход в F(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из F(4) со значением -4
Вход в G(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из G(4) со значением 0
Выход из G(5) со значением -4
РЕЗУЛЬТАТ: 1

Вариант с хранением данных

// PascalABC.NET 3.1, сборка 1192 от 07.03.2016
var
  RF,RG:array[-100..100] of integer;

function G(n:integer):integer; forward;

function F(n:integer):integer;
begin
  Writeln('Вход в F(',n,')');
  if RF[n]<>777 then Result:=RF[n]
  else begin
    if n=1 then Result:=1
    else Result:=F(n-1)-G(n-1);
    RF[n]:=Result
    end;
  Writeln('Выход из F(',n,') со значением ',Result)
end;

function G(n:integer):integer;
begin
  Writeln('Вход в G(',n,')');
  if RG[n]<>777 then Result:=RG[n]
  else begin
    if n=1 then Result:=1
    else Result:=F(n-1)+G(n-1);
    RG[n]:=Result
    end;
  Writeln('Выход из G(',n,') со значением ',Result)
end;

begin
  for var i:=-100 to 100 do begin
    RF[i]:=777; RG[i]:=777
    end;
  Writeln('РЕЗУЛЬТАТ: ',F(5)/G(5))
end.

Результат выполнения программы
Вход в F(5)
Вход в F(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Выход из F(2) со значением 0
Вход в G(2)
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из F(4) со значением -4
Вход в G(4)
Вход в F(3)
Выход из F(3) со значением -2
Вход в G(3)
Выход из G(3) со значением 2
Выход из G(4) со значением 0
Выход из F(5) со значением -4
Вход в G(5)
Вход в F(4)
Выход из F(4) со значением -4
Вход в G(4)
Выход из G(4) со значением 0
Выход из G(5) со значением -4
РЕЗУЛЬТАТ: 1
Автор ответа: Аноним
0
Сейчас дам вариант с табличкой, это примерно как человек бы считал.
Автор ответа: Аноним
0
Вручную такое решать могут только ну очень замотивированные люди.
Автор ответа: vladmor
0
Красиво. Себе сохранил. Классный код
Автор ответа: Аноним
0
Спасибо
Автор ответа: Nastya232
0
Это задание из ЕГЭ, так что у меня выбора нет :)
Похожие вопросы
Предмет: Математика, автор: ноисагл