Mensajes: 538
Temas: 13
Registro en: Oct 2013
Reputación:
16
Dos simples stocks que sirven para convertir un número entero a romano y viceversa - convertido a Pawn desde las fuentes que dejaré al final del post.
El número debe ir entre 1 y 3999, porque después del 3999 se utiliza caracteres especiales que no son soportados.
num_to_roman: Convierte un número entero a romano.
Devuelve la longitud del número romano generado, para números invalidos devolverá cero (0).
Código PHP:
stock num_to_roman ( num , roman [], len ) { if( num < 1 || num > 3999 ) return 0 ; static const intnums [ ] = { 1000 , 900 , 500 , 400 , 100 , 90 , 50 , 40 , 10 , 9 , 5 , 4 , 1 }; static const romnums [ ][ ] = { "M" , "CM" , "D" , "CD" , "C" , "XC" , "L" , "XL" , "X" , "IX" , "V" , "IV" , "I" }; new pos ; for( new i ; i < sizeof intnums && pos < len && num ; i ++ ) { while( num >= intnums [ i ] && pos < len ) { num -= intnums [ i ]; pos += copy ( roman [ pos ], 2 , romnums [ i ] ); } } return pos ; }
roman_to_num : Convierte un número romano a entero.
Devuelve el número entero generado, para caracteres invalidos devolverá cero (0).
Código PHP:
stock roman_to_num ( const roman [] ) { #define int(%1,%2) \ switch( % 1 ) \ { \ case 'I' : % 2 = 1 ; \ case 'V' : % 2 = 5 ; \ case 'X' : % 2 = 10 ; \ case 'L' : % 2 = 50 ; \ case 'C' : % 2 = 100 ; \ case 'D' : % 2 = 500 ; \ case 'M' : % 2 = 1000 ; \ default : return 0 ; \ } new j , k ; new num ; for( new i = strlen ( roman ) - 1 ; i > - 1 ; i -- ) { int ( roman [ i ], j ) num += j < k ? - j : j ; k = j ; } return num ; }
Ejemplo de uso:
Código PHP:
#include <amxmodx> public plugin_init ( ) { register_plugin ( "Roman numerals" , "1.0" , "Milashkasiya" ) register_srvcmd ( "test" , "srvcmd_test" ); } public srvcmd_test ( id ) { new szRomanNum [ 16 ]; for( new i = 1 ; i <= 298 ; i ++ ) { num_to_roman ( i , szRomanNum , charsmax ( szRomanNum ) ); server_print ( "%i -> %s" , roman_to_num ( szRomanNum ), szRomanNum ); } } stock num_to_roman ( num , roman [], len ) { if( num < 1 || num > 3999 ) return 0 ; static const intnums [ ] = { 1000 , 900 , 500 , 400 , 100 , 90 , 50 , 40 , 10 , 9 , 5 , 4 , 1 }; static const romnums [ ][ ] = { "M" , "CM" , "D" , "CD" , "C" , "XC" , "L" , "XL" , "X" , "IX" , "V" , "IV" , "I" }; new pos ; for( new i ; i < sizeof intnums && pos < len && num ; i ++ ) { while( num >= intnums [ i ] && pos < len ) { num -= intnums [ i ]; pos += copy ( roman [ pos ], 2 , romnums [ i ] ); } } return pos ; } stock roman_to_num ( const roman [] ) { #define int(%1,%2) \ switch( % 1 ) \ { \ case 'I' : % 2 = 1 ; \ case 'V' : % 2 = 5 ; \ case 'X' : % 2 = 10 ; \ case 'L' : % 2 = 50 ; \ case 'C' : % 2 = 100 ; \ case 'D' : % 2 = 500 ; \ case 'M' : % 2 = 1000 ; \ default : return 0 ; \ } new j , k ; new num ; for( new i = strlen ( roman ) - 1 ; i > - 1 ; i -- ) { int ( roman [ i ], j ) num += j < k ? - j : j ; k = j ; } return num ; }
Fuente: Encode |
Decode
Hi [R]ak
Mensajes: 1,764
Temas: 19
Registro en: Dec 2013
Reputación:
14
Muy bueno
Mensajes: 417
Temas: 53
Registro en: May 2014
Esta muy bueno, me gusto .
Pero cual seria su utilidad ?
Mensajes: 1,233
Temas: 19
Registro en: Mar 2015
Reputación:
14
(04/04/2015, 03:59 AM) Ipolito escribió: Esta muy bueno, me gusto .
Pero cual seria su utilidad ?
convertir números, a romanos
Muchas gracias Srita. lo utilizare xd
Mensajes: 94
Temas: 12
Registro en: Mar 2015
Esta muy bueno
Mensajes: 1,867
Temas: 57
Registro en: Oct 2014
Reputación:
16
(04/04/2015, 03:59 AM) Ipolito escribió: Esta muy bueno, me gusto .
Pero cual seria su utilidad ?
https://amxmodx-es.com/Thread-Mostrar-numero-como-texto
Mensajes: 1,764
Temas: 19
Registro en: Dec 2013
Reputación:
14
(04/04/2015, 02:35 PM) matrix123 escribió: (04/04/2015, 03:59 AM) Ipolito escribió: Esta muy bueno, me gusto .
Pero cual seria su utilidad ?
https://amxmodx-es.com/Thread-Mostrar-numero-como-texto
para que lo mandas a otro thread si en este mismo lo explica?
Cita: Dos simples stocks que sirven para convertir un número entero a romano y viceversa
Mensajes: 1,867
Temas: 57
Registro en: Oct 2014
Reputación:
16
(04/04/2015, 02:39 PM) ErikMav94 escribió: (04/04/2015, 02:35 PM) matrix123 escribió: (04/04/2015, 03:59 AM) Ipolito escribió: Esta muy bueno, me gusto .
Pero cual seria su utilidad ?
https://amxmodx-es.com/Thread-Mostrar-numero-como-texto
para que lo mandas a otro thread si en este mismo lo explica?
Cita: Dos simples stocks que sirven para convertir un número entero a romano y viceversa
Preguntó la utilidad, ahi le pasé para que vea la razón de este aporte.
Mensajes: 417
Temas: 53
Registro en: May 2014
Mensajes: 78
Temas: 17
Registro en: Jan 2015
Reputación:
0
Muchas gracias, justo lo que buscaba
Mensajes: 2,497
Temas: 20
Registro en: Oct 2014
Reputación:
26
Jumm, esta bueno, aunque dudo que muchos lo usen a menos que enseñen historia en su servidor
Pero bueno, esta bien que exista no?