Léon Woronꜩoff

Notes ponctuelles

Convertiſſeur en nombre romain

Dernière miſe à jour

J'ai fait un convertiſſeur baſique de nombre en chiffres arabes en nombre en chiffres romains, et ce, en langage (Page de l'Inter-Réſeau) Perſonnelle: pré-proceſſeur hypertexte (traduction libre). Il faudrait le compléter et il y a certainement moyen d'optimiſer le code, mais au moins cela a le mérite d'être fait (quoi que, cela exiſte peut-être déjà).

Lorſque j'ai écrit ce code, je croyais que les chiffres romains était limités au nombre entier entre 1 et 4999, hors, les chiffres romains ont évolué avec le temps et il eſt poſſible d'aller à des chiffres bien plus grand. Lorſque j'aurai le temps, je compléterai ce programme pour pouvoir avoir un choix de chiffres le plus large poſſible. L'écriture des chiffres à auſſi évolué, je penſe donc faire en ſorte de donner le choix entre pluſieurs écriture de ces chiffres en fonction de l'hiſtoire de ces chiffres.

Voici la baſe de ce programme (notez que je programme et commente en anglais par principe):

<?php $number=1; // The number to tranſlate in roman number. if($number>0 && $number<5000 && is_numeric($number)) { // There are only number in roman between 1 and 4999. $number="{$number}"; // The number muſt be a ſtring to be handled. while($number!="") { // The loops end when there are no more digits /* Setting of units roman numeral: */ if(strlen($number)==1) { switch($number{0}) { case "0": $roman_numeral=""; // As nothing is written when the laſt digit is 0, the numaral that will be added is nothing. break; case "1": $roman_numeral="Ⅰ"; break; case "2": $roman_numeral="Ⅱ"; break; case "3": $roman_numeral="Ⅲ"; break; case "4": $roman_numeral="Ⅳ"; break; case "5": $roman_numeral="Ⅴ"; break; case "6": $roman_numeral="Ⅵ"; break; case "7": $roman_numeral="Ⅶ"; break; case "8": $roman_numeral="Ⅷ"; break; case "9": $roman_numeral="Ⅸ"; break; } } /* Setting of tens roman numeral: */ elseif(strlen($number)==2) { /* As there are ſome Roman characters for 11 and 12, if the tens are one of them, the numeral is replaced by one of thoſe character and one digit is removed to the number, ſo, the loops will end before replacing the units elſe the tens are replaced normaly: */ if($number=="11") { $roman_numeral="Ⅺ"; $number=substr($number,1); } elseif($number=="12") { $roman_numeral="Ⅻ"; $number=substr($number,1); } else { switch($number{0}) { case "0": $roman_numeral=""; break; case "1": $roman_numeral="Ⅹ"; break; case "2": $roman_numeral="ⅩⅩ"; break; case "3": $roman_numeral="ⅩⅩⅩ"; break; case "4": $roman_numeral="ⅩⅬ"; break; case "5": $roman_numeral="Ⅼ"; break; case "6": $roman_numeral="ⅬⅩ"; break; case "7": $roman_numeral="ⅬⅩⅩ"; break; case "8": $roman_numeral="ⅬⅩⅩⅩ"; break; case "9": $roman_numeral="ⅩⅭ"; break; } } } /* Setting of hundreds roman numeral: */ elseif(strlen($number)==3) { switch($number{0}) { case "0": $roman_numeral=""; break; case "1": $roman_numeral="Ⅽ"; break; case "2": $roman_numeral="ⅭⅭ"; break; case "3": $roman_numeral="ⅭⅭⅭ"; break; case "4": $roman_numeral="ⅭⅮ"; break; case "5": $roman_numeral="Ⅾ"; break; case "6": $roman_numeral="ⅮⅭ"; break; case "7": $roman_numeral="ⅮⅭⅭ"; break; case "8": $roman_numeral="ⅮⅭⅭⅭ"; break; case "9": $roman_numeral="ⅭⅯ"; break; } } /* Setting of thouſands roman numeral: */ elseif(strlen($number)==4) { switch($number{0}) { case "0": $roman_numeral=""; break; case "1": $roman_numeral="Ⅿ"; break; case "2": $roman_numeral="ⅯⅯ"; break; case "3": $roman_numeral="ⅯⅯⅯ"; break; case "4": $roman_numeral="ⅯⅯⅯⅯ"; break; } } /* Adding of the numeral roman ſet to the roman number: */ if(isset($roman_number)) { $roman_number.=$roman_numeral; } else { $roman_number=$roman_numeral; } $number=substr($number,1); // digit added to the roman number removed. } echo $roman_number; } else { echo "The number is under 1 or over 4999 or it is not an integer, ſo, it cannot be tranſlated in roman number"; } ?>

J'ai amélioré ce programme en le liant à un formulaire, j'ai décidé de ne prendre le temps d'expliquer cette amélioration (d'où le fait qu'il n'y a que la baſe de ce programme), vous pouvez donc eſſayer mon convertiſſeur en chiffre romain ou eſſayer vous-même le code en remplaçant le "1" dans la première ligne du code par ce que vous voulez.

Si vous avez des idées pour améliorer, vous pouvez les propoſer. Bien ſûr, quand j'améliorerais d'une manière ou d'une autre, j'éditerais ce billet (ce que j'ai fait dans une précédante miſe à jour, principalement pour remplacer is_int par is_numeric afin que cela marche ſi on paſſe la valeur par un formulaire).

Par la ſuite, lors de la dernière réouverture de ce journal extime, j'ai conſtaté un problème que j'ai réglé. Celui-ci eſt certainement apparu lors d'un changement de verſion du langage de programmation ſuſmentionné.

Signaler une erreur

Pour me ſignaler les fautes (orthographe, grammaire, conjugaiſon, typographie, …) que je peux faire, veuillez me contacter plutôt que de faire un commentaire. Je vous en remercie d'avance.

Commentaire(s)

Il n'y a actuellement aucun commentaire.

Commenter

À lire au minimum avant d'envoyer un commentaire pour le faire en connaiſſance de cauſe: ce qui ſert de règlement d'ordre intérieur.

Envoyer un commentaire

Rétro-lien

Adreſſe de rétro-lien de ce billet (notez que certain moteur de journal extime informe d'une erreur comme par exemple le fait que cette adreſſe n'eſt nullement une adreſſe de rétro-lien, mais c'en eſt bien une et le rétro-lien ſe fait de toute façon).