U mnie taki kod działa dobrze:
program dzialania;
uses
crt;
var
i,n,wynik:integer;
begin
clrscr;
n:=3;
wynik:=1;
for i:=1 to n do wynik:=wynik*i;
writeln('wynik to ',wynik);
readln;
end.
Daje to wynik 6. Jaki jest Twój problem? Wylicza Ci 8 zamiast 6? U mnie pętla jest prawie taka jak u Ciebie (zacząłem od 1, żeby dało się policzyć silnię 1 i 0) i działa. Pierwszy obrót 1*1, drugi 1*2, trzeci 2*3, czyli 6.