Форум » Циклы и ветвления » №11_ДЕМО_2017 » Ответить

№11_ДЕМО_2017

Гаврюкова: В ответе к заданию №11 ДЕМО_2017 у меня получается 34. Не 33 как в ответе. Построила дерево и написала программу. 34. Вот программа: program Demo2017_N11; var s: integer; procedure F(n: integer); begin write( 'n=',n); s:=s+n; writeln( ' S=',S); if n > 2 then begin F(n -3); F(n -4); end end; begin F(10); writeln('Otvet:',s); end. Окно вывода: n=10 S=10 n=7 S=17 n=4 S=21 n=1 S=22 n=0 S=22 n=3 S=25 n=0 S=25 n=-1 S=24 n=6 S=30 n=3 S=33 n=0 S=33 n=-1 S=32 n=2 S=34 Otvet:34 Где я ошиблась?

Ответов - 8

Поляков: Гаврюкова пишет: Где я ошиблась? В оригинале writeln стоит внутри if.

Гаврюкова: Поставила внутрь. Числа получаются такие же как и при построения дерева. Опять 34! program Demo2017_N11; var s: integer; procedure F(n: integer); begin writeln( 'n=',n); s:=s+n; if n > 2 then begin F(n -3); F(n -4); writeln( ' S=',S); end end; begin F(10); writeln('Otvet:',s); end. n=10 n=7 n=4 n=1 n=0 S=22 n=3 n=0 n=-1 S=24 S=24 n=6 n=3 n=0 n=-1 S=32 n=2 S=34 S=34 Otvet:34 Такой же ответ получается и при решении подстановкой.

Поляков: Гаврюкова пишет: Такой же ответ получается и при решении подстановкой. Внутри if - это вот так:[pre2] procedure F(n: integer); begin if n > 2 then begin writeln( 'n=',n); s:=s+n; F(n -3); F(n -4); writeln( ' S=',S); end end; [/pre2]


Гаврюкова: Спасибо! Т.е., когда строишь дерево из 10, - после 4 и 3 не смотреть! И на 2 тоже!

Гаврюкова: Рассуждая по этому алгоритму (Ваши задания ege_11) в задаче N82 д.б. ответ 33. У меня получается 16 и деревом и в Паскале. n=5 n=4 n=3 n=2 S=14 S=14 S=14 n=2 S=16 S=16 Otvet:16 Где я опять заблудилась?

Поляков: Гаврюкова пишет: Где я опять заблудилась? Программу покажите.

Гаврюкова: Если там два раза writeln(n), то получается, что числа, которые будут выведены, для суммирования - повторяются 2 раза? program Z11_N82; var s, s1: integer; procedure F(n: integer); begin writeln('n=',n); s:=s+n; writeln( ' S=',S); if n > 1 then begin writeln( 'n_=',n); s1:=s1+n; F(n -1); F(n -3); writeln( ' S1=',S1); end end; begin F(5); writeln('Otvet:',s+s1); end. Otvet:33

Поляков: Да, можно и так. А можно было везде использовать s (убрать s1).



полная версия страницы