You are on page 1of 2

Indicaremos los pasos para construir una funcin portable o reutilizable que nos traduzca una variable de tipo

entero a su equivalente escrito en espaol, el cual ser almacenado en un string y retornado. Lo primero es definir una interfaz simple e intuitiva, deber tener la forma como la que sigue: String monto_escrito(Integer value), Integer debe ser de tipo ENTERO y no coma flotante, por motivos de eficiencia y adems deber poder almacenar nmeros entre 0 y 999.999.999.999. String debe ser del tipo string proporcionado por el estndar del lenguaje que se usar. Pero vamos por parte, no debemos escribir todo el cdigo en la misma funcin, ste debe estar dividido en varias subrutinas auxiliares que sern inaccesibles para el usuario que use monto_escrito, en otras palabras deben tener mbito local al archivo en que estn definidas. Todas estas sub-rutinas debern tener dos parmetros, uno de tipo Int_Type que recibir el nmero a escribir y otro de tipo Referencia a String para concatenar el nmero dado en palabras a ste. El tipo de retorno puede ser omitido pues ste no es necesario. Algunas sub-rutinas trabajarn con arreglos de string, estos deben tener permanencia esttica ya que no queremos que los strings se creen cada vez que utilizamos monto_escrito, el lugar donde se definan los arreglos ser elegido por el programador, las condiciones son que no se tenga que almacenar un mismo arreglo dos o ms veces y que no sean accesible desde otros archivos, es decir deben tener el mismo mbito que las funciones auxiliares mencionados anteriormente. Los arreglos sern los siguientes: name_0_20[21]: Contiene los nombres de los nmeros del 0 al 20, el 1 debe ser guardado como un. ten_name[7]. Contiene los nombres de las decenas desde el 30 al 90. hundred_name[9]: Contiene los nombres de las centenas desde el 100 hasta el 900. 100 debe ser guardado como ciento. Como ltima condicin, se debe cumpir que los strings estn ordenados de menor a mayor por el valor que representan ( y no lexicogrficamente). La primera funcin auxiliar a definir es la que sabe escribir nmeros de 0 a 99 y es como sigue: monto_0_99 (Int_Type value, string& w_amount): Esta funcin preguntar si el valor es menor o igual a 20, de serlo concatenar al string referenciado name_0_20[value]. Si es mayor a 20 pero menor a 30 agregar al monto escrito veinti y luego name_0_20[value%10]. De otro modo agregar al monto escrito el nombre de la decena

correspondiente con el string ten_name[value/10 - 3] el -3 se debe a que treinta, que es el primer elemento del arreglo, est en la posicin cero del string y no 3. Adems la funcin consultara si value%10 es distinto de 0, de ser as agregara y y luego name_0_20[value%10] al string. Para las dems funciones no seremos tan especficos ya que se capta de lo anterior como obtener el nombre de un arreglo, obtener cierta parte de un nmero mediante divisin y mdulo, etc. monto_0_999 (Int_Type value, string& w_amount): Esta funcin preguntar si el valor es menor a 100, de serlo llamar directamente a la funcin monto_0_99. Si es igual a 100 agregara al monto escrito cien. Si es superior a 100 agregar al monto escrito la palabra correspondiente que se encontrara en el arreglo hundred_name. Despus la funcin consultar si el resto del valor dividido por 100 es distinto de 0, si es as agregar un espacio al monto escrito y enviar el resto a la funcin monto_0_99. monto_0_999999(Int_Type value, string& w_amount): Esta funcin preguntar si el valor es menor a 1.000, de serlo enviar el valor directamente a la funcin monto_0_999. En caso contrario preguntar si es menor a 2.000 de serlo agregar al monto el string mil, sino enviar el valor entero dividido por 1.000 a la funcin monto_0_999 para luego agregar el string mil (notese el espacio antes de mil). Despus la funcin consultar si el resto del valor dividido por 1.000 es distinto de 0, si es as agregar un espacio al monto escrito y enviar el resto a la funcin monto_0_999. monto_0_999999999999(Int_Type value, string& w_amount): Esta funcin preguntar si el valor es menor a 1.000.000, de serlo enviar el valor directamente a la funcin monto_0_999999. En caso contrario preguntar si es menor a 2.000.000 de serlo agregar al monto escrito las palabras un milln, sino enviar el valor entero dividido por 1.000.000 a la funcin monto_0_999999 para luego agregar la palabra millones. Despus la funcin consultar si el resto del monto dividido por 1.000.000 es distinto de 0, si es as agregara un espacio al monto y enviar el resto a la funcin monto_0_999999. Finalmente la funcin String monto_escrito(Int_Type value) deber poder comunicarse con monto_0_999999999999 y har lo siguiente, crear un objeto de tipo string, reservar espacio suficiente con tal de que no se tenga que reconstruir el string por falta de espacio, luego llamar a monto_0_999999999999 con el valor del argumento dado y el string vaco como referencia, despus preguntar si el nmero termina en uno pero no es once, si es as agregar una o al resultado y finalmente retornar el string.

You might also like