Contributor: ARIEL PABLO KLEIN


Unit Num2Let;

INTERFACE

Uses Crt;

Function num2letra(x: longint): String;

IMPLEMENTATION

Type
    Unidades = array[1..29] of string;
    Decenas = array[3..9] of string;
    Centenas = array[1..9] of string;

Const
    UnidMap: Unidades =
('UN','DOS','TRES','CUATRO','CINCO','SEIS','SIETE',
                         'OCHO','NUEVE','DIEZ','ONCE','DOCE','TRECE',
                         'CATORCE','QUINCE','DIECISEIS','DIECISIETE',
                         'DIECIOCHO','DIECINUEVE','VEINTE','VEINTIUNA',
                        
'VEINTIDOS','VEINTITRES','VEINTICUATRO','VEINTICINCO',
'VEINTISEIS','VEINTISIETE','VEINTIOCHO',
                         'VEINTINUEVE');
    DecMap: Decenas =
('TREINTA','CUARENTA','CINCUENTA','SESENTA','SETENTA',
                       'OCHENTA','NOVENTA');
    CentMap: Centenas =
('CIENTO','DOSCIENTOS','TRESCIENTOS','CUATROCIENTOS',
                         'QUINIENTOS','SEISCIENTOS','SETECIENTOS',
                         'OCHOCIENTOS','NOVECIENTOS');
Var
   N : LongInt;

Function num2letra(x: longint): String;
Var
   NS: String;
   i,j : byte;
   restemp,temp : String;

Function decifrar(y: string) : String;
var
   temp,temp2,temp3: String;
   I,Code,j: Integer;

Begin
     Temp:='';
     temp2:=y;
     for i:=1 to 3 do
     Begin
          Case length(y) of
               1:Begin
                      val(y,j,code);
                      if j>0 Then
                      temp:=Temp+UnidMap[j];
                      y:='';
                 End;
               2:Begin
                      val(y,j,code);
                      if J>0 THen
                         If j>29 Then
                           Begin
                              val(copy(y,1,1),j,code);
                              y:=copy(y,2,1);
                              Temp:=Temp+DecMap[j];
                              val(y,j,code);
                              if j>0 Then Temp:=Temp+' Y ';
                           End
                             Else
                               Begin
                                 y:='';
                                 Temp:=Temp+UnidMap[j];
                               End;
                 End;
               3:Begin
                      val(copy(y,1,1),j,code);
                      if j>0 Then
                      Temp:=Temp+CentMap[j]+' ';
                      y:=copy(y,2,2);
                 End;
          End;
     End;
     temp3:='';
     For j:= length(temp2)+1 to length(NS) do temp3:=Temp3+NS[j];
     NS:=Temp3;
     decifrar:=temp;
End;
Begin
     ResTemp:='';
     Str(x, NS);
     For i:=1 to 3 do
     Begin
          Case i of
               1:Begin
                      If Length(NS)>6 Then
                      Begin
                         ResTemp:=decifrar(copy(NS,1,length(NS)-6));
                         if copy(NS,1,length(NS)-6) = '1' Then         
       ResTemp:=ResTemp+' MILLON'
                            else
                                ResTemp:=ResTemp+' MILLONES ';
                      End;
                  End;
               2:Begin
                      If Length(NS)>3 Then
                      Begin
                        
ResTemp:=ResTemp+decifrar(copy(NS,1,length(NS)-3));
                         ResTemp:=ResTemp+' MIL '
                      End;
                 End;
               3:Begin
                      If x > 0 then
                      Begin
                           ResTemp:=ResTemp+decifrar(NS);
                      End
                      Else
                          num2letra:='CERO';
                 End;
          End;
     End;
     num2letra:=restemp;
End;
Begin
End. === End of NUM2LET.PAS ===