Называется "вложенный цикл".
Код:
var
A : Array Of Integer; // сама последовательность, где последний эл = 0
I, J : Integer;
M : Integer;
begin
For I := Length(A)-1 DownTo Low(A) Do
Begin
M := 1;
For J := Low(A) To I Do
M := M * A[J];
A[i] := M;
End;
end;
Весь фокус в том, что надо идти во внешнем цикле в обратную сторону, что бы не испортить цифры. Но можно решить эту задачу и по другому, в один цикл (алгоритмическая опимизация - вычисление следующего эл-та через предыдущий):
Код:
var
A : Array Of Integer; // сама последовательность, где последний эл = 0
I : Integer;
begin
For I := Low(A)+1 To High(A)-1 Do
A[i] := A[I-1] * A[i];
end;
Вот.