User:Rical/valeurDeRomain.js

/*! 30/04/2012 12:42 calcul de valeur de nombre romain pour http://fr.wikisource.org/ */ // voir la documentation en fin de script, exemples d'appels : // roman2int('MCXI', 'Erreur : '); // testerDesRomains('span.vueromains');

function roman2int(roman, err) { // return 'vr='+r; // for minimal test var v=0; var v1=0; var v2=0; var v3=0; // valeurs totale, derniere lettre et precedentes var x='-'; var i=0; // caractere courant et son numéro var e1=; var e2=; var e3=''; var lst='-MDCLXVIJ'; // erreur si hors lst while (x!='') { v3=v2; v2=v1; v1=0; x=roman.substr(i,1); if ( x=='M' ) { v1=1000 }; if ( x=='D' ) { v1=500 }; if ( x=='C' ) { v1=100 }; if ( x=='L' ) { v1=50 }; if ( x=='X' ) { v1=10 }; if ( x=='V' ) { v1=5 }; if ( x=='I' ) { v1=1 }; if ( x=='J' ) { v1=1; if ( i < (roman.length-1) ) {e3=' erreur caractere J avant la fin.';} };		v+=v1; if ( (v1==5*v2) | (v1==10*v2) ) {v-=2*v2}; // pour ajuster 4, 9, 40, 90 ... if ( lst.indexOf(x) < 1 ) {e2=' erreur caractere '+x+' en '+(i+1)+'.';}; if ( (v1>v2) & (v2>v3) ) {e1=' erreur caracteres croissants.';}; if ( v>4999) {e1=' erreur > 4999.';}; i+=1; x=roman.substr(i,1); };	if ( err == null ) { err = ' ' }; if ( err > ' ' ) { err = err+e1+e2+e3; return v + err; } else { return v + ''; }; } // function roman2int(roman, err)

function int2roman(in, err) { // return 'vr='+r; // for minimal test var v=0; var v1=0; var v2=0; var v3=0; // valeurs totale, derniere lettre et precedentes var x='-'; var i=0; // caractere courant et son numéro var e1=; var e2=; var e3=''; var lst='-MDCLXVIJ'; // erreur si hors lst while (x!='') { v3=v2; v2=v1; v1=0; x=roman.substr(i,1); if ( x=='M' ) { v1=1000 }; if ( x=='D' ) { v1=500 }; if ( x=='C' ) { v1=100 }; if ( x=='L' ) { v1=50 }; if ( x=='X' ) { v1=10 }; if ( x=='V' ) { v1=5 }; if ( x=='I' ) { v1=1 }; if ( x=='J' ) { v1=1; if ( i < (roman.length-1) ) {e3=' erreur caractere J avant la fin.';} };		v+=v1; if ( (v1==5*v2) | (v1==10*v2) ) {v-=2*v2}; // pour ajuster 4, 9, 40, 90 ... if ( lst.indexOf(x) < 1 ) {e2=' erreur caractere '+x+' en '+(i+1)+'.';}; if ( (v1>v2) & (v2>v3) ) {e1=' erreur caracteres croissants.';}; if ( v>4999) {e1=' erreur > 4999.';}; i+=1; x=roman.substr(i,1); };	if ( err == null ) { err = ' ' }; if ( err > ' ' ) { err = err+e1+e2+e3; return v + err; } else { return v + ''; }; } // function int2roman(in, err)

function testerUnRomain(r1, vue) { $(vue).append(' '+r1+'='+roman2int(r1) ); $(vue).append(' '+r1+'='+roman2int(r1, vue ) ); }

function testerDesRomains(vue) { testerUnRomain('XIJ', vue); testerUnRomain('MCXI', vue); testerUnRomain('MCDXLIV', vue); testerUnRomain('MDCLXVI', vue); testerUnRomain('MCMXCIX', vue); testerUnRomain('MMCCXXII', vue); testerUnRomain('MMMMCMXCIX', vue); testerUnRomain('ERREURS', vue); testerUnRomain('XIA', vue); testerUnRomain('XJI', vue); testerUnRomain('IXC', vue); testerUnRomain('VLD', vue); testerUnRomain('MMMMM', vue); testerUnRomain('MMMMMYJXC', vue); }

/* Le script ci-dessus donne le resultat suivant : [ bouton Calculs de romains ] Nombres romains : XIJ=12 MCXI=1111 MCDXLIV=1444 MDCLXVI=1666 MCMXCIX=1999 MMCCXXII=2222 MMMMCMXCIX=4999 ERREURS=0 erreur caractere S en 7. XIA=11 erreur caractere A en 3. XJI=12 erreur caractere J avant la fin. IXC=89 erreur caracteres croissants. VLD=445 erreur caracteres croissants. MMMMM=5000 erreur > 4999. MMMMMYJXC=5089 erreur > 4999. erreur caractere Y en 6. erreur caractere J avant la fin.

Le test consiste à placer les fichiers calculromain.html, calculromain.js et jquery.js dans un même dossier. Puis à lancer calculromain.html et à cliquer sur le bouton [ Calculs de romains ]

Le fichier calculromain.html contient exactement : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

  valeurDeRomain    Calculs de romains  raz Nombres romains :