Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2013, 12:09   #1
kcah
 
Регистрация: 27.11.2013
Сообщений: 8
По умолчанию Калькулятор. Рекурсия. Разбор кода.

У исполнителя Калькулятор две команды, которым присвоены номера:
a. прибавь 1
b. умножь на 2
Сколько есть программ, которые число 1 преобразуют в число 16?
Код:
function F(k:integer):integer;
begin
if k=1 then F:=1
else
if k mod 2=0 then
F:=F(k-1)+F(k div 2)
else
F:=F(k-1);
end;
begin 
write(F(16));
end.

Это программа работает правильно, но объясните, как? Как она вообще работает пошагово?

Последний раз редактировалось Stilet; 08.12.2013 в 12:39.
kcah вне форума Ответить с цитированием
Старый 08.12.2013, 12:35   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Все калькуляторами балуетесь: http://programmersforum.ru/showthread.php?t=249119
Arigato вне форума Ответить с цитированием
Старый 08.12.2013, 12:42   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Капец, какая хитрая программа...
Код:
//Описываем функцию с параметром числа и номера команды
function F(k,cmd:integer):integer;
begin
//Если команда такая-то 
 case cmd of
  1:f:=k+1; // Возвращаем результат на единице больше
  2:f:=k*2; // Возвращаем удвоенное число
 end;
end;
begin 
write(F(16,1));
write(F(16,2));
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.12.2013, 12:59   #4
kcah
 
Регистрация: 27.11.2013
Сообщений: 8
По умолчанию

Закрепляю =)
kcah вне форума Ответить с цитированием
Старый 08.12.2013, 13:03   #5
kcah
 
Регистрация: 27.11.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Капец, какая хитрая программа...
Код:
//Описываем функцию с параметром числа и номера команды
function F(k,cmd:integer):integer;
begin
//Если команда такая-то 
 case cmd of
  1:f:=k+1; // Возвращаем результат на единице больше
  2:f:=k*2; // Возвращаем удвоенное число
 end;
end;
begin 
write(F(16,1));
write(F(16,2));
end.

Это что вообще?
kcah вне форума Ответить с цитированием
Старый 08.12.2013, 13:35   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это исполнитель - калькулятор.
Или тебе не это нужно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.12.2013, 13:48   #7
kcah
 
Регистрация: 27.11.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это исполнитель - калькулятор.
Или тебе не это нужно?
Он выдаёт просто 17, т.е. 16+1 и 32, т.е. 16*2.
А мне надо, чтоб он выдавал 36
kcah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбор кода CSharp zxzLeejacKzxz C# (си шарп) 4 13.06.2012 07:25
Разбор кода Arhit Помощь студентам 3 22.01.2012 16:34
Разбор кода Delphi cv0l04b Помощь студентам 3 07.01.2012 13:39
Разбор куска кода. Alexcomeback Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 05.04.2011 18:14
Разбор кода. С++ TIT0 Помощь студентам 0 27.12.2010 11:17