Formă: cifră romană
Salt la navigare Salt la căutare
Instructiuni de folosire
Acesta este un modul scris în Lua . Următoarele instrucțiuni sunt incluse în sub- modulul: Roman Numeral / om ( schimbări · istorie )
Sandbox: Formă: număr roman / sandbox ( modificări · istoric ) · Test: Formă: număr roman / test ( modificări · istoric · Executare )
Acesta este un modul scris în Lua . Următoarele instrucțiuni sunt incluse în sub- modulul: Roman Numeral / om ( schimbări · istorie )
Sandbox: Formă: număr roman / sandbox ( modificări · istoric ) · Test: Formă: număr roman / test ( modificări · istoric · Executare )
Modul care implementează funcționalitatea șablonului {{ număr roman }}.
- [[
* Modul care implementează funcționalitatea șablonului {{număr roman}}.
*
* Modulul a fost importat din:
* http://en.wikipedia.org/w/index.php?title=Module:Roman&oldid=570926639
]]
local p = {}
- Această funcție implementează șablonul {{overline}}.
overline ( s ) de funcții locale
întoarce-te mw . ustring . format ( '<span style = "text-decoration: overline;">% s </span>' , s )
Sfârșit
- Obține cifrele romane pentru un tabel de numere dat. Returnează atât șirul de
- cifrele și valoarea numărului după ce a fost procesat.
funcție locală getLetters ( num , t )
local ret = {}
pentru _ , v în ipairs ( t ) do
local val , letter = despacheta ( v )
while num> = val do
num = num - val
table.insert ( ret , scrisoare )
Sfârșit
Sfârșit
return table.concat ( ret ), num
Sfârșit
- evaluează arg nu numai ca număr, ci și ca expresie matematică
funcția locală getNum ( arg )
local ret
dacă tastați ( arg ) == „număr” atunci
ret = arg
elseif tip ( arg ) == 'șir' atunci
ret = tonumber ( arg )
dacă nu ret atunci
succes local , rezultat = pcall ( mw . ext . ParserFunctions . expr , arg )
în cazul în care succesul atunci
ret = tonumber ( rezultat )
Sfârșit
Sfârșit
Sfârșit
retur ret
Sfârșit
- Fluxul principal de control al modulului.
funcție locală _main ( args )
- Obțineți intrare și ieșire afișând nimic dacă intrarea este proastă.
local num = getNum ( args [ 1 ] )
dacă nu num sau num < 1 sau num == math.huge atunci
întoarcere
Sfârșit
num = math.floor ( num )
- Returnați un mesaj pentru numere prea mari pentru a fi exprimate în cifre romane.
dacă num > = 5000000 atunci
returnează argumente [ 2 ] sau „N / A”
Sfârșit
local ret = "
- Găsiți numerele romane pentru partea mare a numerelor 5000 și mai mari.
- Instrucțiunea if nu este strict necesară, ci face algoritmul
- mai eficient pentru un număr mai mic.
dacă num > = 4000 atunci
local bigRomans = {
{ 1000000 , „M” },
{ 900000 , 'CM' }, { 500000 , 'D' }, { 400000 , 'CD' }, { 100000 , 'C' },
{ 90000 , 'XC' }, { 50000 , 'L' }, { 40000 , 'XL' }, { 10000 , 'X' },
{ 9000 , 'IX' }, { 5000 , 'V' }, { 4000 , 'IV' },
}
Litere mari locale
bigLetters , num = getLetters ( num , bigRomans )
ret = overline ( bigLetters )
Sfârșit
- Găsiți numerele romane pentru numerele 4999 sau mai puțin.
local SmallRomans = {
{ 1000 , „M” },
{ 900 , "CM" }, { 500 , "D" }, { 400 , "CD" }, { 100 , "C" },
{ 90 , "XC" }, { 50 , "L" }, { 40 , "XL" }, { 10 , "X" },
{ 9 , "IX" }, { 5 , "V" }, { 4 , "IV" }, { 1 , "I" }
}
local smallLetters = getLetters ( num , smallRomans )
ret = ret .. smallLetters
retur ret
Sfârșit
funcția p . principal ( cadru )
- Dacă este apelat prin #invoke, utilizați argumentele transmise în invocare
- șablon sau argumentele transmise la #invoke dacă există. In caz contrar
- presupunem că argumentele sunt transmise direct din consola de depanare
- sau de la un alt modul Lua.
origArg-uri locale
if frame == mw . getCurrentFrame () atunci
origArgs = cadru : getParent (). argumente
pentru k , v în perechi ( cadru . args ) do
origArgs = cadru . argumente
pauză
Sfârșit
altceva
origArgs = cadru
Sfârșit
- Tăiați spațiul alb și eliminați argumentele goale.
argumente locale = {}
pentru k , v în perechi ( origArgs ) do
dacă tastați ( v ) == 'șir' atunci
v = mw . text . tăia ( v )
Sfârșit
dacă v ~ = " atunci
args [ k ] = v
Sfârșit
Sfârșit
return _main ( args )
Sfârșit
retur p