<docere>http://www.docere.ro/ |

—download jsFact.zip— (click pe imagine) |
Următoarea funcţie modelează calculul factorialului în baza 10.
function factorial( n ) { var cf = new Array(); // tabloul cifrelor factorialului numărului n cf[0] = 1; // iniţializează cu factorialul lui 1 (1! = 1) for( var f = 2; f <= n; f++) { // factorul cu care trebuie înmulţit cf[] anterior găsit var t = 0; // transportul curent; se propagă de la operaţia (f*cifră) precedentă for(var i = 0, s = cf.length; i < s; i++) { // începând cu cifra unităţilor (de indice 0), var p = cf[i] * f + t; // o înmulţeşte cu factorul curent f şi adună transportul, cf[i] = p % 10; // apoi înscrie pe poziţia cf[i] cifra unităţilor produsului t = Math.floor(p / 10); // şi elimină această cifră din produs, indicând noul transport. } while(t) { // dacă terminând înmulţirea cu f, există un transport final (nenul), cf[s++] = t % 10; // atunci adaugă în cf[] şi cifrele respectivului transport. t = Math.floor(p / 10); } } return cf.reverse().join(''); // inversează tabloul cifrelor şi-l returnează ca şir obişnuit de cifre }
Presupunând că s-a determinat (f-1)! în cf[], pentru a determina mai departe şi pe f! urmează să se facă cel puţin atâtea operaţii individuale câte cifre are cf[], fiecare constând în înmulţirea factorului f cu cifra curentă din cf[], cumularea transportului de la precedenta înmulţire la produsul găsit şi apoi separarea acestui produs în două părţi: cifra unităţilor (adică restul împărţirii produsului prin baza 10 de lucru) reprezintă tocmai cifra care trebuie înscrisă în cf[] pe rangul curent, iar partea rămasă după eliminarea cifrei unităţilor din produs (câtul împărţirii produsului prin baza de lucru) reprezintă transportul final, către următoarea operaţie individuală.
Timpul de calcul depinde şi de calculator şi de browser şi de diverse configurări asupra browserului; pot fi 3 secunde pentru 1000!, 14 secunde pentru 2000! şi 95 secunde pentru 5000! - în ultimele două cazuri fiind necesar click pe 'Continue' în fereastra "Warning - Unresponsive script" alertată de browser.
ORAR orarul şcolii
SitSco situaţie şcolară
ŞAH prin corespondenţă
doChess a Javascript chess engine
doPGN a Javascript PGN-browser
Cal++ ambiţiile Calului
aşaAzis momente lingvistice
Comentarii
—cum ar trebui calculată Media şcolară?
completely rethink the browser:
Google chrome