Объясните пожалуйста вот этот алгоритм в Free Pascal

Объясните пожалуйста вот этот алгоритм в Free Pascal
Объясните пожалуйста вот этот алгоритм в Free Pascal, только пожалуйста поподробнее, а то уже 2 листа исписал и ничего не понял

Var k,i : integer;
begin
k := 4;
for i := 1 to 3 do
k := 2*k + i;
writeln(k);
end.

  • Это цикл со счётчиком.
    Т. е. ты сам задаёшь то, сколько раз (3 раза, в данном случае) должны выполняться команды в теле цикла (в данной случае, это команды арифметического присваивания) .
    И нужно понимать, что переменная сохраняет своё значение до тех пор, пока не выполняется присваивание.

    В данном алгоритме

    В первом цикле к = 2*4 + 1 = 9
    Во втором цикле (выражение нужно вычислять со значением переменной к = 11) к = 2*9+2 = 20
    Третий цикл к = 2*20+3 = 43

    И по достижению переменной значения 3 цикл завершается и к становится равной 43.

  • сам по себе алгоритм выводит числа 9, 20, 43..

    UPD.. ну да, не выводит... прочел как
    for i := 1 to 3 do BEGIN
    k := 2*k + i;
    writeln(k); END;

    UPD2
    1) k = 2*4+1=9
    2) k = 9*2+2=20
    3) k = 20*2+3=43
    вывести k

  • Считает сумму. Вроде 43 получится.

    Александр Безруков: Не выводит.

  • Выведет '43'. А вот зачем он такой нужен - не знаю.
  • элементарно же
    задаем к =4
    и 3 раза к*2 плюс от 1 до 3, выводим итоговый к

    элементарнейший алшоритм. что именно не понятно?

  • Выводит число 43 на экран, специальным образом формируя его в цикле с использованием итерационной переменной i и накопительной переменной k, в которой в итоге и лежит результат.
  • что бы этот алгоритм не считал, скажи своему преподу что хватит говнокодить )))
    это же надо было такое придумать )))

    writeln(k*8+11) не легче?
    если i предполагается вводить (то есть заранее не известно максимальное значение i), то результат равен (1 shl i)*(k+1)+i, или иначе ((k+1) shl i)+i
    writeln(((k+1) shl i)+i);

    и не надо никаких циклов вообще.
    Так что переписываем это "по нормальному" и показываем преподу за пятёрку как надо писать код :)

    по поводу "что делает этот код"... хм.. . не знаю.. . прибавляет к числу единицу, сдвигает на введённое количество разрядов и потом прибавляет число разрядов к результату :)