Ir al contenido


Foto

Pasaje de números a letras

números letras conversión

  • Por favor identifícate para responder
44 respuestas en este tema

#1 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 03 julio 2015 - 10:33

Les propongo el siguiente reto.

 

Pero antes que alguien me diga que es una solución más que conocida y con varios ejemplos rondando por la red, aclaro que va con límites.

 

Pasar de un número expresado en forma de dígitos a su correspondiente en letras o sea su nombre. Por ejemplo:

 

4923 -> cuatromil novescientos veintitres

 

Para evitar el uso exagerado de fuerza bruta, propongo la limitación de hacerlo en alrededor de cien líneas totales de código pascal.

Para hacerlo algo más interesante también propongo una breve explicación del método.

 

Espero sus respuestas

Saludos

 


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 03 julio 2015 - 11:04

Y de una vez como un objeto????  :D  :p  :lol:  *-)


  • 0

#3 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 03 julio 2015 - 11:47

lo tengo resuelto en 255 lineas de xxxxxxx,xx a x,xx

 

*-)


  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 03 julio 2015 - 11:54

Interesante reto... :p


  • 0

#5 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 03 julio 2015 - 12:38

lo tengo resuelto en 255 lineas de xxxxxxx,xx a x,xx

 

*-)

 

Nikolas, debe tener alrededor de 100 líneas.

 

Obviamente, para que sea un reto, debe haber solución.

Yo lo tengo resuelto y les cuento que tuve que usar la solución de un programador que desconozco, que publicó este desarrollo. Me ví obligado, dada la escaséz de tiempo. Pero jamás soporté el hecho de usar algo copiado y pegado (no me gusta).

Hace un tiempo empecé una solución y otra vez la tuve que abandonar por la misma razón. Hoy, teniendo avanzado el programa principal se me ocurrió darle una "estocada letal" y lo hice. Tiene 120 líneas, pero no como el caso de Nikolas que permite la inclusión de coma.

En el futuro, lo pienso hacer con más opciones y encapsularlo en un componente... pero no será hoy, ya que para lo que quiero me sirve. Y eso es el caso de ponerle letras a las cifras en recibos emitidos.

El reto se me ocurrió porque mi código tiene más de 100 :embarrassed: y pensé que sería interesante que alguien lo logre con menos de 100.

Hay cuestiones a tener en cuenta:

1) Los comentarios no se cuentan

2) los then y else van debajo no en la misma línea del if.

 

Saludos.

(b)


  • 1

#6 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 03 julio 2015 - 12:56

Pregunta. 

 

Si lo hacemos en Delphi, ¿todas las líneas de código en la unidad cuentan? el uses, el type, etc etc etc?


  • 0

#7 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 03 julio 2015 - 01:01

Pregunta. 

 

Si lo hacemos en Delphi, ¿todas las líneas de código en la unidad cuentan? el uses, el type, etc etc etc?

 

Claro,

 

Pero no las del dfm, por supuesto


  • 0

#8 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 03 julio 2015 - 01:08

oks... Voy a compartir el reto esperando más colegas se sumen.


  • 0

#9 Dragonlair

Dragonlair

    Newbie

  • Miembros
  • Pip
  • 7 mensajes
  • LocationMéxico

Escrito 03 julio 2015 - 03:29

Buenas horas colegas, esta es la primera vez que participo en el foro, me pareció interesasnte el reto, hace tiempo tuve que implementar esto y a razón de que no encontré un código funcional para freepascal implementé mi propio método para el objetivo, yo me basé en la lógica de la funcion de número a romano incluida en la lcl.

El código está en forma de una función estática contando 70 lineas.

Saludos.


  • 1

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 03 julio 2015 - 04:07

.....El código está en forma de una función estática contando 70 lineas.......

 

Caramba!!! pues parece que ya tenemos a un duro competidor :)

 

bienvenido a delphiaccess amigo Dragolair.

 

Saludos


  • 0

#11 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 03 julio 2015 - 05:40

Admito que el reto me tienta, pero debo primar otros proyectos.

Si se permite una sugerencia, más que fijarse en las LDC deberían fijarse en la complejidad ciclomática. No si se será posible estimar o llegar a un estudio de caso desde la complejidad computacional; el primer enfoque en el que pienso es que podría emplearse como variable la cantidad de dígitos. Si es posible abordar el caso, entonces aquel algoritmo que ofrezca el menor O(d) será el más óptimo.

 

Al menos la V(G) si es posible determinarla y puede ser útil para tener un mejor acercamiento que la subjetiva métrica LDC.

 

Saludos,


  • 0

#12 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 04 julio 2015 - 02:35

Buenas horas colegas, esta es la primera vez que participo en el foro, me pareció interesasnte el reto, hace tiempo tuve que implementar esto y a razón de que no encontré un código funcional para freepascal implementé mi propio método para el objetivo, yo me basé en la lógica de la funcion de número a romano incluida en la lcl.

El código está en forma de una función estática contando 70 lineas.

Saludos.

 

Realmente impresionante.

 

No sabía que lázarus ya contaba con una función para eso.

En fin, todo vale.

 

Saludos


  • 0

#13 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 04 julio 2015 - 05:03

Dragonlair,

 

Estuve viendo el código de Lázarus escrito por Preston y Truijillo, ¿es éste el que citas y al que has mejorado?

Tiene algo menos de 200 sin contar el encabezado (o sea comentarios)

Tiene un límite de 999.999.999, es decir 9 cifras y mucho de fuerza bruta. No lo conocía ni sabía que Lazarus tenía eso en su biblioteca de funciones. También tiene para muchas lenguas más.

 

Aquí dejo el código completo de Presotn y Trujillo:


delphi
  1. Unit NumW_Esp;
  2.  
  3. { Andy Preston, Apollo Developments, http://www.apollod.omnia.co.uk/aa/
  4.  
  5.   Numbers in words - Version 4.6
  6.  
  7.   Copyright © 1999 Andy Preston
  8.   Copyright © 1999 Carlos García Trujillo
  9.  
  10.   Object-Pascal Units to express a number as words in various languages
  11.  
  12.   This unit is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public
  13.   License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
  14.   version.
  15.  
  16.   This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  17.   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.
  18.  
  19.   You should have received a copy of the GNU Library General Public License along with this library; if not, write to the
  20.   Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  21.  
  22.   This unit an modified version of NLetra By Carlos García Trujillo
  23.   mailto:cgar1136@geocities.com http://www.geocities.com/ResearchTriangle/Node/2174/ }
  24.  
  25. Interface
  26.  
  27. Uses
  28. NumW;
  29.  
  30. Type
  31. TNumWordsEspanol = Class (TNumWordsLangDriver)
  32. Private
  33. Function convierte (s : LongInt) : String;
  34. Public
  35. Function NumberInWords (TheNumber : Integer; Gender : TGender) : String; Override;
  36. Function IMoneyInWords (Major, Minor : Integer; EuroMode : Boolean) : String; Override;
  37. Function HasGender (Gender : TGender) : Boolean; Override;
  38. End;
  39.  
  40. Implementation
  41.  
  42. Uses
  43. SysUtils;
  44.  
  45. Function TNumWordsEspanol.HasGender (Gender : TGender) : Boolean;
  46. Begin
  47. Result := (Gender <> genNeuter);
  48. End;
  49.  
  50. Function TNumWordsEspanol.convierte (s : LongInt) : String;
  51. Begin
  52. Case s Of
  53. 1 : convierte := 'uno';
  54. 2 : convierte := 'dos';
  55. 3 : convierte := 'tres';
  56. 4 : convierte := 'cuatro';
  57. 5 : convierte := 'cinco';
  58. 6 : convierte := 'seis';
  59. 7 : convierte := 'siete';
  60. 8 : convierte := 'ocho';
  61. 9 : convierte := 'nueve';
  62. 10 : convierte := 'diez';
  63. 11 : convierte := 'once';
  64. 12 : convierte := 'doce';
  65. 13 : convierte := 'trece';
  66. 14 : convierte := 'catorce';
  67. 15 : convierte := 'quince';
  68. 20 : convierte := 'veinte';
  69. 30 : convierte := 'treinta';
  70. 40 : convierte := 'cuarenta';
  71. 50 : Convierte := 'cincuenta';
  72. 60 : convierte := 'sesenta';
  73. 70 : convierte := 'setenta';
  74. 80 : convierte := 'ochenta';
  75. 90 : convierte := 'noventa';
  76. 100 : convierte := 'cien';
  77. 500 : convierte := 'quinientos';
  78. 700 : convierte := 'setecientos';
  79. 900 : convierte := 'novecientos';
  80. End;
  81. End;
  82.  
  83. Function TNumWordsEspanol.NumberInWords (TheNumber : Integer; Gender : TGender) : String;
  84. // Note the new parameter, Gender (genMale, genFemale, or genNeuter)
  85. Var
  86. N, {erro,} unidades, Dec, cent, {salva,} miles, decmil, centmil, mill, aux : LongInt;
  87. cad, cad2 : String;
  88. Begin
  89. If TheNumber < 0 Then Raise EConvertError.Create ('NumWords - Debe Ser un Número Positivo!!');
  90. If TheNumber > 999999999 Then Raise EConvertError.Create ('NumWords - Lo siento, Esto es solo un entero ...');
  91. // if n>999999999999 then showmessage('Debe ser un número menor a un billón')
  92. // else
  93. N := TheNumber;
  94. Begin
  95. // If we comment out the use of N that doesn't get used down there we get Hint: Value assigned to 'salva' never used
  96. // salva:=N;
  97. aux := N Div 1000000;
  98. mill := aux;
  99. n := n Mod 1000000;
  100. aux := n Div 100000;
  101. centmil := aux;
  102. n := n Mod 100000;
  103. aux := n Div 10000;
  104. decmil := aux;
  105. n := n Mod 10000;
  106. aux := n Div 1000;
  107. miles := aux;
  108. n := n Mod 1000;
  109. aux := n Div 100;
  110. cent := aux;
  111. n := n Mod 100;
  112. aux := n Div 10;
  113. Dec := aux;
  114. n := n Mod 10;
  115. aux := n;
  116. unidades := aux;
  117. cad := '';
  118. If mill > 0 Then
  119. If mill = 1 Then cad := 'un millon ' Else Begin
  120. n := mill;
  121. cad := NumberInWords (N, Gender) + ' millones ';
  122. End;
  123. // n:=salva; Hint: Value assigned to 'N' never used, Andy Preston
  124. {empieza la conversión de las centenas de miles}
  125. cad2 := '';
  126. Case centmil Of
  127. 1 : If (miles = 0) And (decmil = 0) Then cad2 := convierte (100) Else cad2 := 'ciento ';
  128. 2 : cad2 := convierte (2) + 'cientos ';
  129. 3 : cad2 := convierte (3) + 'cientos ';
  130. 4 : cad2 := convierte (4) + 'cientos ';
  131. 5 : cad2 := convierte (500) + ' ';
  132. 6 : cad2 := convierte (6) + 'cientos ';
  133. 7 : cad2 := convierte (700) + ' ';
  134. 8 : cad2 := convierte (8) + 'cientos ';
  135. 9 : cad2 := convierte (900) + ' ';
  136. End;
  137. cad := cad + cad2;
  138. {Termina la conversión de las centenas}
  139.  
  140.  
  141. {empieza la conversión de las decenas y unidades de miles}
  142. cad2 := '';
  143. Case decmil Of
  144. 0 : If miles <> 1 Then cad2 := convierte (miles);
  145. 1 : If miles <= 5 Then cad2 := convierte (decmil * 10 + miles)
  146. Else cad2 := 'dieci' + convierte (miles);
  147. 2 : If miles = 0 Then cad2 := convierte (20)
  148. Else If miles = 1 Then cad2 := 'veintiun'
  149. Else cad2 := 'veinti' + convierte (miles);
  150. 3 : If miles = 0 Then cad2 := convierte (30)
  151. Else If miles = 1 Then cad2 := 'treinta y un'
  152. Else cad2 := 'treinta y ' + convierte (miles);
  153. 4 : If miles = 0 Then cad2 := convierte (40)
  154. Else If miles = 1 Then cad2 := 'cuarenta y un'
  155. Else cad2 := 'cuarenta y ' + convierte (miles);
  156. 5 : If miles = 0 Then cad2 := convierte (50)
  157. Else If miles = 1 Then cad2 := 'cincuenta y un'
  158. Else cad2 := 'cincuenta y ' + convierte (miles);
  159. 6 : If miles = 0 Then cad2 := convierte (60)
  160. Else If miles = 1 Then cad2 := 'sesenta y un'
  161. Else cad2 := 'sesenta y ' + convierte (miles);
  162. 7 : If miles = 0 Then cad2 := convierte (70)
  163. Else If miles = 1 Then cad2 := 'setenta y un'
  164. Else cad2 := 'setenta y ' + convierte (miles);
  165. 8 : If miles = 0 Then cad2 := convierte (80)
  166. Else If miles = 1 Then cad2 := 'ochenta y un'
  167. Else cad2 := 'ochenta y ' + convierte (miles);
  168. 9 : If miles = 0 Then cad2 := convierte (90)
  169. Else If miles = 1 Then cad2 := 'noventa y un'
  170. Else cad2 := 'noventa y ' + convierte (miles);
  171. End;
  172. If (miles > 0) Or (decmil > 0) Or (centmil > 0) Then cad2 := cad2 + ' mil ';
  173. cad := cad + cad2;
  174. {termina la conversión de las decenas y unidades de miles}
  175.  
  176. {empieza la conversión de las centenas}
  177. cad2 := '';
  178. Case cent Of
  179. 1 : If (unidades = 0) And (Dec = 0) Then cad2 := convierte (100) Else cad2 := 'ciento ';
  180. 2 : cad2 := convierte (2) + 'cientos ';
  181. 3 : cad2 := convierte (3) + 'cientos ';
  182. 4 : cad2 := convierte (4) + 'cientos ';
  183. 5 : cad2 := convierte (500) + ' ';
  184. 6 : cad2 := convierte (6) + 'cientos ';
  185. 7 : cad2 := convierte (700) + ' ';
  186. 8 : cad2 := convierte (8) + 'cientos ';
  187. 9 : cad2 := convierte (900) + ' ';
  188. End;
  189. cad := cad + cad2;
  190. {Termina la conversión de las centenas}
  191.  
  192. {empieza la conversión de las decenas y unidades}
  193. cad2 := '';
  194. Case Dec Of
  195. 0 : cad2 := convierte (unidades);
  196. 1 : If unidades <= 5 Then cad2 := convierte (Dec * 10 + unidades)
  197. Else cad2 := 'dieci' + convierte (unidades);
  198. 2 : If unidades = 0 Then cad2 := convierte (20)
  199. Else cad2 := 'veinti' + convierte (unidades);
  200. 3 : If unidades = 0 Then cad2 := convierte (30)
  201. Else cad2 := 'treinta y ' + convierte (unidades);
  202. 4 : If unidades = 0 Then cad2 := convierte (40)
  203. Else cad2 := 'cuarenta y ' + convierte (unidades);
  204. 5 : If unidades = 0 Then cad2 := convierte (50)
  205. Else cad2 := 'cincuenta y ' + convierte (unidades);
  206. 6 : If unidades = 0 Then cad2 := convierte (60)
  207. Else cad2 := 'sesenta y ' + convierte (unidades);
  208. 7 : If unidades = 0 Then cad2 := convierte (70)
  209. Else cad2 := 'setenta y ' + convierte (unidades);
  210. 8 : If unidades = 0 Then cad2 := convierte (80)
  211. Else cad2 := 'ochenta y ' + convierte (unidades);
  212. 9 : If unidades = 0 Then cad2 := convierte (90)
  213. Else cad2 := 'noventa y ' + convierte (unidades);
  214. End;
  215. cad := cad + cad2;
  216. {termina la conversión de las decenas y unidades}
  217. If cad <> '' Then Result := cad Else Result := 'Cero';
  218. End;
  219. End;
  220.  
  221. Function TNumWordsEspanol.IMoneyInWords (Major, Minor : Integer; EuroMode : Boolean) : String;
  222. Begin
  223. Result := 'Currency support not yet included';
  224. End;
  225.  
  226. End.

Saludos


Editado por cram, 04 julio 2015 - 05:07 .

  • 1

#14 Dragonlair

Dragonlair

    Newbie

  • Miembros
  • Pip
  • 7 mensajes
  • LocationMéxico

Escrito 04 julio 2015 - 10:19

No, me basé en la función que convierte de entero a romano como 2010 -> "MMX", forma parte de la LasarusComponentLibrary, lo requería para entregar un trabajo y no encontraba librerías adecuadas o que funcionaran correctamente. :)

delphi
  1. function intToRoman(Value: Longint): string;
  2.  
  3. const
  4. Arabics : Array[1..13] of Integer
  5. = (1,4,5,9,10,40,50,90,100,400,500,900,1000);
  6. Romans : Array[1..13] of String
  7. = ('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');
  8.  
  9. var
  10. i: Integer;
  11.  
  12. begin
  13. Result:='';
  14. for i:=13 downto 1 do
  15. while (Value >= Arabics[i]) do
  16. begin
  17. Value:=Value-Arabics[i];
  18. Result:=Result+Romans[i];
  19. end;
  20. end;

Por cierto mi código también solo llega a 999,999,999.99 y el formato de salida está en español de México pero es fácilmente modificable.
  • 1

#15 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 06 julio 2015 - 11:29

He experimentado un poco y he obtenido un código algo chapucero y poco optimizado. El resultado es que convierte en menos de 80 líneas hasta el cuatrillón, en concreto hasta el número 999.999.999.999.999 y con menos fuerza bruta que el algoritmo de de Presotn y Trujillo.

Trata de ser fiel a la ortografía pero tiene algunos defectos, no pone acentos, aunque todo es mejorable. :grin:


Saludos.

Archivos adjuntos


  • 2

#16 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 06 julio 2015 - 12:51

He experimentado un poco y he obtenido un código algo chapucero y poco optimizado. El resultado es que convierte en menos de 80 líneas hasta el cuatrillón, en concreto hasta el número 999.999.999.999.999 y con menos fuerza bruta que el algoritmo de de Presotn y Trujillo.

Trata de ser fiel a la ortografía pero tiene algunos defectos, no pone acentos, aunque todo es mejorable. :grin:


Saludos.


Me parece excelente, ya que de poder llegar al cuatrillón ya es mucho. ¿pero está en Delphi o en C++?
Hay todo un tema con este asunto de los nombres luego del millón y se supone que los hispanohablantes podemos nombrar cifras de hasta nonillones, mientras que en otras lenguas no le dan importancia a los números sobre los mil millardos. Por ejemplo en inglés, griego y portugués, le llaman "billones" a los "mil millones" (claro que en sus respectivas lenguas.

Yo, por mi parte, dado el tremendo aporte de Dragonlair me puse a jugar con mi código, ahora veo que Escafandra también llegó por debajo de las cien líneas y estoy seguro que al optimizar el código llegará a disminuirl más aún. Por lo que les comento que alcancé las setenta (en realidad 69 ;)) líneas como Dragonlair, con una limitación de doce cifras, que con el agregado de algunas líneas puede permitir hasta unas tres veces más, ya que no se trata de un algoritmo de fuerza bruta para nada.

No podía pasar por debajo de las cien debido a que mi código era modular y se separaba en tres partes. Uní estas partes en un único proceso y alcancé llegar debajo de las setenta. Siempre -aclaro- con if, then y else en diferentes líneas y salto de lína cuando se exceden las 100 columnas, y obviamente contando unit, interface, implementation, sus espacios intermedios, etc. Si se dejaran las líneas sin cortar y se levantaran los then junto con el if, dejando los else debajo, el código baja a cincuenta y cinco (55).

Estoy seguro que en algún momento alguien lo supera. (y)

A los que les interesa el desafío, les dejo el enlace a esta excelente página para ver como se pone nombre a los números: http://tip.dis.ulpgc.es/
Además tiene otros procesos como separación silábica (le encontré un error que mi algoritmo no comete :cool: ), etc.

Saludos
(b)
  • 1

#17 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 06 julio 2015 - 01:18

Me parece excelente, ya que de poder llegar al cuatrillón ya es mucho. ¿pero está en Delphi o en C++?
Hay todo un tema con este asunto de los nombres luego del millón y se supone que los hispanohablantes podemos nombrar cifras de hasta nonillones, mientras que en otras lenguas no le dan importancia a los números sobre los mil millardos. Por ejemplo en inglés, griego y portugués, le llaman "billones" a los "mil millones" (claro que en sus respectivas lenguas.


Pues lo escribí en delphi, en C me hubiera resultado más sencillo.

En el asunto del billón, lo hago como los anglosajones, mil millones, quizás debería cambiarlo al modo un millón de millones para ser coherente la cultura. Dejemos que la cifra máxima la dejé en 999.999.999.999.999 por un problema de tipos numéricos.

 

El tema de las separaciones entre palabras lo hice según este enlace de reglas ortográficas,

 

Otro tema es el tratamiento de números decimales, que no contemplo.

 

 

Saludos.


  • 0

#18 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 06 julio 2015 - 01:21

Pues lo escribí en delphi, en C me hubiera resultado más sencillo.

^o|  :|  :  :p  :D 
 

Otro tema es el tratamiento de números decimales, que no contemplo.

 

El tema de los decimales acá en México es bastante simple. Solo hay que incluir un texto que dice " XX/100 M.N." donde XX son los centavos 00-99 :)

 

Saludos


  • 0

#19 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 06 julio 2015 - 01:29

El tema de los decimales acá en México es bastante simple. Solo hay que incluir un texto que dice " XX/100 M.N." donde XX son los centavos 00-99 :)


Si aplicamos las mismas reglas ortográficas descritas aquí los decimales se tratarían igual que la parte entera, pero perderíamos el límite alto, de nuevo por el problema de tipos numéricos.

 

 

Saludos.


  • 0

#20 Dragonlair

Dragonlair

    Newbie

  • Miembros
  • Pip
  • 7 mensajes
  • LocationMéxico

Escrito 06 julio 2015 - 10:06

Que hay de nuevo colegas, aquí reportando unas optimizaciones que me tomé la molestia de realizar hoy a mi código,
después de optimizarlo eliminando variables y factorizando código pude bajar drásticamente la cantidad de lineas.
Creo que es necesario que establezcamos los lineamientos de la participación, por ejemplo si es necesario el salto de linea cada tantas columnas, y hasta que numero es necesario hacer la conversión.

 

por ahora mi código lo pude reducir a 34 lineas. Utilicé la función IfThen para emular el operador ternario de c++ y ahorrar 6 lineas de código, así como que estoy contando sentencias, es decir, no hago saltos de linea cada tantas columnas, además que el algoritmo sólo sigue traduciendo hasta un máximo de 999,999,999.99 y el formato de salida es en español de México.

 

Saludos desde un lugar en Zacatecas México...

 

Otra cosa la unidad ya terminada cuenta 58 lineas con saltos de linea y formateada correctamente con JediCodeFormat CTRL+D en lazarus, en este si se realizan saltos de linea para que haya lineas largas. además que como unidad ya posee sus secciones de interface, implementación, usos, etc.

Pero supongo que deberíamos contar solo las lineas efectivas, en mi caso 34 lineas desde la declaración de la función, su begin y end; ;)

Archivos adjuntos


  • 0




IP.Board spam blocked by CleanTalk.