User:Rical/valeurDeRomain.js

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

function roman2int(r, err) { if ( r ) { r = +r; } else { r = ; }; // anti null if ( err ) { err = +err; } else { err = ; }; // anti null var v=0; var v1=0; var v2=0; var v3=0; // valeurs totale, de derniere lettre, et precedentes var x='-'; var i=0; // caractere courant et son numéro var lst='-MDCLXVIJ'; // liste des chiffres romains var e0=; var e1=; var e2=; var e3=; var e4=''; // erreurs detectables while (x!='') { v3=v2; v2=v1; v1=0; x=r.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 < (r.length-1) ) {e4=' 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 ) {e3=' caractere '+x+' en '+(i+1)+'.';}; if ( (v1>v2) & (v2>v3) ) {e2=' caracteres croissants.';}; i+=1; x=r.substr(i,1); };	if ( v == 0) {e0=' valeur nulle.';}; if ( v > 4999) {e1=' valeur > 4999.';}; if ( ( e0+e1+e2+e3+e4 >  ) && ( err >  ) ) { err = ''+v+ err +e0+e1+e2+e3+e4; // sortie avec les erreurs } else { err = ''+v; // sortie sans les erreurs };	return err; // avec ou sans erreurs }

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

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

/* 22/04/2012 15:35 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 :