Показать сообщение отдельно
  #5  
Старый 26.04.2011, 18:43
Raskolnikov Raskolnikov вне форума
Прохожий
 
Регистрация: 20.04.2011
Адрес: Киров
Сообщения: 35
Версия Delphi: 7 Enterprise
Репутация: 148
По умолчанию

Код:
var
  i,  //Счетчик цикла
  k, //Собственно, наш параметр k
  R: Cardinal; //Результат
begin

  { Получаем значение k из текстового поля }
  k := StrToInt(Edit1.Text);

  { Устанавливаем начальное значение переменной R }
  R  := k;

  { Наша цель - произвести k умножений. Начальное значение R у нас уже есть - это k. Затем умножаем на (k+i), первое значение k равно 1, т.е. получаем R*(k+1). Второе значение k равно 2, и то, что у нас получилось до этого - R*(k+1), мы умножаем на (k+2) - выходит R*(k+1)*(k+2). Ну и так далее, i после каждого умножения увеличивается на единицу, конечное значение перменной i - k. ВОт таким и будет последний множитель - (k+k) или (2*k) }
  for i := 1 to k do
    R := R * (k + i)
  Edit2.Text := IntToStr(R);
end;

Что еще можно сказать об этой "гениальной" программе - результат растет очень быстро с ростом k (быстрее факториала), поэтому быстро произойдет переполнение разрядной сетки. Лучше R объявить как Int64:
Код:
var
  i, k: Cardinal;
  R: Int64;
begin
  k := StrToInt(Edit1.Text);
  R  := k;
  for i := 1 to k do
    R := R * (k + i)
  Edit2.Text := IntToStr(R);
end;
Ответить с цитированием