Код:
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;