Como convertir Numeros a Binarios, Numeros ,Romano numeros a letras

Lainuxxx
24 de Marzo del 2004
Tengo una consulta me han pedido en el Instituto convertir numeros a diferentes tipos de formato.

Crear 2 cajas de texto
en la primera pongo el numero en la segunda debe aparecer el resultado como sigue:
Numero ==> BInario
Numero ==> numeros Romano
Numero ==> Letras

Para Visual Fox 6.0 si alguien sabe la forma de hacerlo en Visual Basic tambien me serviria claro que lo adaptaria al Fox.

Gracias por su ayuda.

Un amigo


Lainuxxx


Un amigo


Jes?art?z Seijas
24 de Marzo del 2004
Para convertir numeros a binarios:

PARAMETERS XNUM
XBIN = ""
DO WHILE XNUM > 0
XRES = MOD(XNUM,2)
XBIN = STR(XRES,1,0) + XBIN
XNUM = INT(XNUM/2)
ENDDO
RETURN XBIN

Jes?art?z Seijas
24 de Marzo del 2004
Para convertir numeros decimales a romanos:

PARAMETERS XNUM
* CONVIERTE NUMERO DECIMAL A ROMANOS
DIMENSION NUMEROS(13),ROMANOS(13)
NUMEROS(1) = 1
NUMEROS(2) = 4
NUMEROS(3) = 5
NUMEROS(4) = 9
NUMEROS(5) = 10
NUMEROS(6) = 40
NUMEROS(7) = 50
NUMEROS(8) = 90
NUMEROS(9) = 100
NUMEROS(10) = 400
NUMEROS(11) = 500
NUMEROS(12) = 900
NUMEROS(13) = 1000
ROMANOS(1) = "I"
ROMANOS(2) = "IV"
ROMANOS(3) = "V"
ROMANOS(4) = "IX"
ROMANOS(5) = "X"
ROMANOS(6) = "XL"
ROMANOS(7) = "L"
ROMANOS(8) = "XC"
ROMANOS(9) = "C"
ROMANOS(10) = "CD"
ROMANOS(11) = "D"
ROMANOS(12) = "CM"
ROMANOS(13) = "M"
XROM = ""
FOR I = 13 TO 1 STEP -1
DO WHILE XNUM >= NUMEROS(I)
XNUM = XNUM - NUMEROS(I)
XROM = XROM + ROMANOS(I)
ENDDO
NEXT I
RETURN XROM

Jes?art?z Seijas
24 de Marzo del 2004
Para convertir un numero decimal a letras:

PARAMETER XNUM
DECLARE U(10),D(10),C(10),E(10)
U(1) = ""
U(2) = "UNO"
U(3) = "DOS"
U(4) = "TRES"
U(5) = "CUATRO"
U(6) = "CINCO"
U(7) = "SEIS"
U(8) = "SIETE"
U(9) = "OCHO"
U(10) = "NUEVE"
***----
D(1) = ""
D(2) = "DIEZ"
D(3) = "VEINTE"
D(4) = "TREINTA"
D(5) = "CUARENTA"
D(6) = "CINCUENTA"
D(7) = "SESENTA"
D(8) = "SETENTA"
D(9) = "OCHENTA"
D(10) = "NOVENTA"
***-----
C(1) = ""
C(2) = "CIENTO"
C(3) = "DOSCIENTOS"
C(4) = "TRESCIENTOS"
C(5) = "CUATROCIENTOS"
C(6) = "QUINIENTOS"
C(7) = "SEISCIENTOS"
C(8) = "SETECIENTOS"
C(9) = "OCHOCIENTOS"
C(10) = "NOVECIENTOS"
***-------
E(1) = "DIEZ"
E(2) = "ONCE"
E(3) = "DOCE"
E(4) = "TRECE"
E(5) = "CATORCE"
E(6) = "QUINCE"
E(7) = "DIECISEIS"
E(8) = "DIECISIETE"
E(9) = "DIECIOCHO"
E(10) = "DIECINUEVE"
***-------

M4 = INT(XNUM / 1000000000)
M3 = INT(XNUM / 1000000) - (M4 * 1000)
M2 = INT(XNUM / 1000) - (M3 * 1000) - (M4 * 1000000)
M1 = INT(XNUM) - (M2 * 1000) - (M3 * 1000000) - (M4 * 1000000000)
XCS = INT((XNUM - INT(XNUM))*100)
XR2 = ""
IF !EMPTY(M4)
XR2 = XR2 + TRIO(M4,.F.) + " MIL "
ENDIF
IF !EMPTY(M3)
XR2 = XR2 + TRIO(M3,.F.) + IIF(M3=1," MILLON "," MILLLONES ")
ENDIF
IF !EMPTY(M2)
XR2 = XR2 + TRIO(M2,.F.) + " MIL "
ENDIF
IF !EMPTY(M1)
XR2 = XR2 + TRIO(M1,.T.)
ENDIF
* ANEXAR LOS CENTIMOS
XR2 = XR2 + " BOLIVARES CON " + STRTRAN(STR(XCS,2,0)," ","0") + "/100 CENTIMOS"
DO WHILE AT(" ",XR2) > 0
XR2 = STRTRAN(XR2," "," ")
ENDDO
RETURN XR2

FUNCTION TRIO
PARAMETER NUMERO,XUNO
U(2) = IIF(XUNO,"UNO","UN")
X3 = INT(NUMERO / 100)
X2 = INT(NUMERO / 10) - X3*10
X1 = NUMERO - X3*100 - X2*10
XR = ""
*****
DO CASE
CASE NUMERO = 100
XR = "CIEN"
OTHER
XR = C(X3+1) + " "
IF X2 = 1
XR = XR + E(X1+1)
ELSE
XR = XR + D(X2+1) + IIF(X1>0 AND X2>0," Y ","") + U(X1+1)
ENDIF
ENDCASE
RETURN XR

Saludos, estamos a la orden para aclarar cualquier duda.

Julio Cèsar Alemà
24 de Marzo del 2004
Saludos y quiere felicitarte por el aporte al elaborar esta funciòn pero quiero hacerte unas observaciones:

1. se forma un bucle infinito en las siguientes instrucciones
DO WHILE AT(" ",XR2) > 0
XR2 = STRTRAN(XR2," "," ")
procedì a dejarlas como comentario y funcionò.

2. La funciòn falla en los siguientes nùmeros: 999999.99, 9999999.99 y todas las cifras superiores presentadas en este formato.

La soluciòn para esto es trabajar con 4 cuatro decimales o 6 decimales segùn quieras convertir cifras muy grandes.
Incorporè el siguiente comando en la funciòn y trabajò:
Set deci to 4, conservando y restaurando los decimales que tenga activos el usuario.

3. Si la cifra no tiene nùmeros enteros tambièn falla, tiene problemas con los nùmeros negativos, los trabajè con el valor absoluto del paràmetro que recibe el nùmero.

4. Si las cifras enteras terminan en 1 las palabras ya convertidas se leen asì, ejemplo: 151.30 ( ciuento cincuenta y uno con 30/100 ) y debe leerse ciento cincuenta y un con 30/100 ).

Te enviarè la funciòn corregida por este medio para que la incorpores en tu pàgina si estàs de acuerdo con las correcciones.

Hasta pronto y gracias.

guajoman
24 de Marzo del 2004
Como seria el codigo funete en C++ completo