<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wicri-demo.istex.fr/Wicri/Mathematiques/fr/index.php?action=history&amp;feed=atom&amp;title=Module%3ARomain</id>
	<title>Module:Romain - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wicri-demo.istex.fr/Wicri/Mathematiques/fr/index.php?action=history&amp;feed=atom&amp;title=Module%3ARomain"/>
	<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Mathematiques/fr/index.php?title=Module:Romain&amp;action=history"/>
	<updated>2026-04-19T07:52:17Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.31.10</generator>
	<entry>
		<id>https://wicri-demo.istex.fr/Wicri/Mathematiques/fr/index.php?title=Module:Romain&amp;diff=5528&amp;oldid=prev</id>
		<title>imported&gt;Jacques Ducloy : Page créée avec « local p = {}  -- barre horizontale au-dessus des nombres élevés local function overline( s )     return '&lt;span style=&quot;text-decoration:overline&quot;&gt;' .. s .. '&lt;/span&gt;' end... »</title>
		<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Mathematiques/fr/index.php?title=Module:Romain&amp;diff=5528&amp;oldid=prev"/>
		<updated>2021-05-16T15:42:01Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « local p = {}  -- barre horizontale au-dessus des nombres élevés local function overline( s )     return &amp;#039;&amp;lt;span style=&amp;quot;text-decoration:overline&amp;quot;&amp;gt;&amp;#039; .. s .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; end... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- barre horizontale au-dessus des nombres élevés&lt;br /&gt;
local function overline( s )&lt;br /&gt;
    return '&amp;lt;span style=&amp;quot;text-decoration:overline&amp;quot;&amp;gt;' .. s .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the Roman numerals for a given numeral table. Returns both the string of&lt;br /&gt;
-- numerals and the value of the number after it is finished being processed.&lt;br /&gt;
local function getLetters( num, t )&lt;br /&gt;
    local ret = {}&lt;br /&gt;
    for _, v in ipairs( t ) do&lt;br /&gt;
        local val, letter = unpack( v )&lt;br /&gt;
        while num &amp;gt;= val do&lt;br /&gt;
            num = num - val&lt;br /&gt;
            table.insert( ret, letter )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat( ret ), num&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.toRoman( num, default )&lt;br /&gt;
    num = tonumber( num )&lt;br /&gt;
    if not num or num &amp;lt; 1 or num == math.huge then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
    num = math.floor( num )&lt;br /&gt;
    &lt;br /&gt;
    -- Return a message for numbers too big to be expressed in Roman numerals.&lt;br /&gt;
    if num &amp;gt;= 5000000 then&lt;br /&gt;
        return default or 'N/A'&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local ret = ''&lt;br /&gt;
    -- Find the Roman numerals for the large part of numbers 5000 and bigger.&lt;br /&gt;
    -- The if statement is not strictly necessary, but makes the algorithm &lt;br /&gt;
    -- more efficient for smaller numbers.&lt;br /&gt;
    if num &amp;gt;= 5000 then&lt;br /&gt;
        local bigRomans = {&lt;br /&gt;
            { 1000000, 'M' },&lt;br /&gt;
            { 900000, 'CM' }, { 500000, 'D' }, { 400000, 'CD' }, { 100000, 'C' },&lt;br /&gt;
            { 90000, 'XC' }, { 50000, 'L' }, { 40000, 'XL' }, { 10000, 'X' },&lt;br /&gt;
            { 5000, 'V' }&lt;br /&gt;
        }&lt;br /&gt;
        local bigLetters&lt;br /&gt;
        bigLetters, num = getLetters( num, bigRomans )&lt;br /&gt;
        ret = overline( bigLetters )&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Find the Roman numerals for numbers 4999 or less.&lt;br /&gt;
    local smallRomans = {&lt;br /&gt;
        {1000, &amp;quot;M&amp;quot;},&lt;br /&gt;
        {900, &amp;quot;CM&amp;quot;}, {500, &amp;quot;D&amp;quot;}, {400, &amp;quot;CD&amp;quot;}, {100, &amp;quot;C&amp;quot;},&lt;br /&gt;
        {90, &amp;quot;XC&amp;quot;}, {50, &amp;quot;L&amp;quot;}, {40, &amp;quot;XL&amp;quot;}, {10, &amp;quot;X&amp;quot;},&lt;br /&gt;
        {9, &amp;quot;IX&amp;quot;}, {5, &amp;quot;V&amp;quot;}, {4, &amp;quot;IV&amp;quot;}, {1, &amp;quot;I&amp;quot;} &lt;br /&gt;
    }&lt;br /&gt;
    local smallLetters = getLetters( num, smallRomans )&lt;br /&gt;
    ret = ret .. smallLetters&lt;br /&gt;
    &lt;br /&gt;
    return ret&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.fromRoman( str, default )&lt;br /&gt;
	local strOrig = str&lt;br /&gt;
	str = str:upper()&lt;br /&gt;
	if not str:find( '^[MDCLXVI]+$' ) then&lt;br /&gt;
		return tonumber( str ) or default or strOrig&lt;br /&gt;
	end&lt;br /&gt;
	local smallRomans = { I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000 }&lt;br /&gt;
	local result = 0&lt;br /&gt;
	local old, n = 0&lt;br /&gt;
	for i = str:len(), 1, -1  do&lt;br /&gt;
		n = smallRomans[ str:sub( i, i ) ]&lt;br /&gt;
		if n &amp;lt; old then&lt;br /&gt;
			result = result - n&lt;br /&gt;
		else&lt;br /&gt;
			result = result + n&lt;br /&gt;
			old = n&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- compatibility with [[en:Module:Roman]]&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	return p.toRoman( args[1] )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main( frame )&lt;br /&gt;
	return p.nombreEnRomain( frame )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- functions to call the module from a template (takes the #invoke first arg or the template first arg)&lt;br /&gt;
function p.nombreEnRomain( frame )&lt;br /&gt;
	local num&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		num = frame.args[1] or frame:getParent().args[1]&lt;br /&gt;
	else&lt;br /&gt;
		num = frame&lt;br /&gt;
	end&lt;br /&gt;
	return p.toRoman( mw.text.trim( num or '' ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.nombreDepuisRomain( frame )&lt;br /&gt;
	local str&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		str = frame.args[1] or frame:getParent().args[1]&lt;br /&gt;
	else&lt;br /&gt;
		str = frame&lt;br /&gt;
	end&lt;br /&gt;
	return p.fromRoman( mw.text.trim( str or '' ) )&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Jacques Ducloy</name></author>
		
	</entry>
</feed>