Hogyan számoljuk ki a faktoriális, delphisite

<
Faktoriálisának pozitív egész szám definíciója a következő:
n! = N * (n-1) * (n-2) * (n-3) *. * 2 * 1
1! = 1
0! = 1
Példa: 5! = 5 * 4 * 3 * 2 * 1
>
// iteratív megoldása:
funkció FacIterative # 40; N: Szó # 41;. longint;
var
F: LongInt;
i: integer;
kezdődik
f: = 1;
i: = 2 és n do f: = f * i;
Eredmény: = F;
végén;

// rekurzív megoldás:
funkció FacRecursive # 40; N: Szó # 41;. LongInt;
kezdődik
ha n> 1, akkor
Eredmény: = n * FacRecursive # 40; n -1 # 41;
más
Eredmény: = 1;
végén;

Az eljárást találni a pontos érték a faktoriális.
Te valaha is megtalálják a faktoriális 10? - könnyű, de 20 és 100? Még a legfejlettebb számológép, ami nem működik, (mármint a pontos értéket, mint a 100! -158 számokat, hogy mi legyen a kalkulátor kijelzőn megjelenik az értéket.) C-algoritmus tartalmaz egy hasonló programot a leírt, meg lehet csinálni. Egy ilyen program kell egy űrlapot (A nyomtatvány tartalmazó feljegyzés ilyen alkatrészek (név mmOutput eljárás), Maskedit (med), Folyamatsáv (PB-nem szükséges, de ha úgy gondolja, egy nagyon nagy faktoriális, bizonyos időt vesz igénybe, így vizuálisan nyomon követni az idő maradó számítás, ez nagyon kényelmes) ötlet az a program :. változók Delphi nem tartalmazhat ilyen hosszú számokat, így ez használ egy sor integer, feldolgozás, és kap a helyes válasz Ennek eredményeként, akkor feltételezhetjük, faktoriális sok ezer szám, gondoltam 5000.! tekinthető hosszú ideig, de lehetséges.

eljárás TForm1. bbRunClick # 40; Sender: TObject # 41; ; // fogantyú egéreseményeket

var // ez a rész jelzi a változók

eredmény: string; // az eredmény változó típusú egész szám

M: tömb integer;

// „M” - egy olyan mátrix, vagy egy tömb, ami dinamikus, azaz a mérete lehet

F, i, j, k, n: egész szám;

// változik ez növeli a futási a program, de érdekes, hogy megpróbálja

ha med. text = '', akkor

med. szöveg: = '0'; // ingatlan med szöveges elemet ellenőrizzük

n: = StrToInt # 40; állapot # 40; Med. szöveg # 41; # 41; ;

// megadott szám StrToInt-line számkonverzió

exit; // trim-eltávolítás terek egy húr

PB. Max: = # 40; n + sqr # 40; n # 41; # 41; ; // Ez a meghatározás PB méretek

képernyőn. Kurzor: = crHourGlass;

// új kurzor jelenik meg, a standard „vindovsky”

setLength # 40; M, 2 # 41; ; // határozza tömb határait

M # 91; 0 # 93; : = 1; // hozzárendelés 0. elem tömb érték M 1.

i: = 1-től n-do

PB. StepBy # 40; i * 2 # 41; ; // változás jelzések PB

j: = 0 k do

SetLength # 40; M, k + 1 # 41; ;

M # 91; j # 93; : = M # 91; j # 93; * I + F; // itt az alapötlet a program

ha # 40; M # 91; j # 93; div 10 # 41;> 0, akkor

F: = M # 91; j # 93; div 10;

M # 91; j # 93; : = M # 91; j # 93; mod 10;

i: = k downto 0 do // válogató egész értékeket a k 0

ha M # 91; én # 93;> 0, akkor

ha M # 91; én # 93; = 0, akkor

SetLength # 40; M, k # 41; ; // a tömb méretét M az elemek száma-k

j: = k downto 0 do

Eredmény: = Eredmény + IntToStr # 40; M # 91; j # 93; # 41; ;

mmOutput. Vonalak. hozzáad # 40; IntToStr # 40; n # 41; + „! = „+ Eredmény # 41; ;

ha n6. Kockás = igaz, akkor

mmoutput. Vonalak. hozzáad # 40; „Ez a szám” + IntToStr # 40; hossz # 40; eredmény # 41; # 41; + 'Számok. # 41; ;

M: = nil; // felszabadítása IntToStr-line szám konverzió

képernyőn. Kurzor: = crDefault; // kurzor változás

Med. SetFocus művelet; // át a bemenet fókusza alkatrész med