Cum se calculeaza factorial, delphisite

<
Factorialul unui număr întreg pozitiv este definit ca:
n! = N * (n-1) * (n-2) * (n-3) *. * 2 * 1
1! = 1
0! = 1
Exemplu: 5! = * 4 * 5 3 * 2 * 1
>
// iterativă Soluție:
funcţia FacIterative # 40; n: Word # 41;. longint;
var
f: LongInt;
I: Integer;
începe
f: = 1;
pentru i: = 2 până la n do f: = f * i;
Rezultat: = f;
se încheie;

// Soluție recursive:
funcţia FacRecursive # 40; n: Word # 41;. LongInt;
începe
dacă n> 1, atunci
Rezultat: = n * FacRecursive # 40; n -1 # 41;
altfel
Rezultat: = 1;
se încheie;

Procedura de constatare valoarea exactă a factorial.
Ați găsit vreodată factorialul 10? - este ușor, dar 20 și 100? Chiar și cu cele mai avansate calculator care nu funcționează, (mă refer la valoarea exactă, cum ar fi 100! -158 numere, ceea ce ar trebui să fie pe afișajul calculatorului pentru a afișa o astfel de valoare.) C, folosind algoritmul conține un program similar cu cel descris, se poate face. Pentru un astfel de program, au nevoie de o formă (Forma, care conține Memo astfel de componente (numele procedurii mmOutput), Maskedit (med), ProgressBar (PB-nu este necesar, dar dacă credeți că un factorial foarte mare, este nevoie de ceva timp, astfel încât să păstreze vizual evidența timpului rămânând în calcul, este foarte convenabil), ideea programului :. variabile în Delphi nu pot conține astfel de numere lungi, așa că folosește o serie de variabile întregi, de prelucrare, care și pentru a obține răspunsul corect ca rezultat, putem presupune factorial multe mii de numere, m-am gândit 5000 pe.! luate în considerare pentru o lungă perioadă de timp, dar posibil.

Procedura TForm1. bbRunClick # 40; Expeditor: TObject # 41; ; // evenimente mâner mouse-ul

var // această secțiune indică variabilele

Rezultatul: string; // variabila rezultat de tip întreg

M: matrice de număr întreg;

// „M“ - este o matrice sau o matrice, care este dinamic, adică, dimensiunea acesteia poate fi

F, i, j, k, n: integer;

// schimba acest lucru mărește durata de funcționare a programului, dar este interesant pentru a încerca

în cazul în med. text = '' atunci

med. Text: = '0'; // proprietate componentă de text med este verificată

n: = StrToInt # 40; tunde # 40; MEd. text # 41; # 41; ;

// număr introdus, de conversie număr StrToInt-line

ieșire; // decorația de eliminare a spațiilor dintr-un șir de caractere

PB. Max: = # 40; n + sqr # 40; n # 41; # 41; ; // Această definiție dimensiuni PB

ecran. Cursor: = crHourGlass;

Apare // nou cursorul, standardul „vindovsky“

setlength # 40; M, 2 # 41; ; // defini limite matrice

M # 91; 0 # 93; : = 1; // atribuire element de 0th matrice valoare M 1.

pentru i: = 1 la n do

PB. StepBy # 40; i * 2 # 41; ; // indicații de schimbare PB

pentru j: = 0 la k face

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

M # 91; j # 93; : = M # 91; j # 93; * I + F; // aici ideea de bază a programului

dacă # 40; M # 91; j # 93; div 10 # 41;> 0 atunci

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

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

pentru i: = k downto 0 do // sortare valori întregi ale k la 0

dacă M # 91; eu # 93;> 0 atunci

dacă M # 91; eu # 93; = 0 atunci

setlength # 40; M, k # 41; ; // redimensionarea matrice M la numărul de elemente-k

pentru j: = k downto 0 do

Rezultat: = Rezultat + IntToStr # 40; M # 91; j # 93; # 41; ;

mmOutput. Linii. adăuga # 40; IntToStr # 40; n # 41; + „! = „+ Rezultat # 41; ;

dacă N6. Verificat = true atunci

mmoutput. Linii. adăuga # 40; „Acest număr“ + IntToStr # 40; lungime # 40; rezultat # 41; # 41; + 'Numere'. # 41; ;

M: = zero; // Numărul de conversie deallocation IntToStr-line în

ecran. Cursor: = crDefault; // modifica cursorul

Med. setfocus; // transfera med componente focus intrare