sábado, 30 de novembro de 2013

Função que trata os valores de 0 e 999


// Trata os valores entre 0 e 999
// ==============================

Function TrataGrupo(Const S: String): String ;
Const
   Num1a19: Array[1..19] Of String = (
      'UM', 'DOIS', 'TRES', 'QUATRO', 'CINCO',
      'SEIS', 'SETE', 'OITO', 'NOVE', 'DEZ',
      'ONZE', 'DOZE', 'TREZE', 'CATORZE', 'QUINZE',
      'DEZESSEIS', 'DEZESSETE', 'DEZOITO', 'DEZENOVE') ;
   Num10a90: Array[1..9] Of String = (
      'DEZ', 'VINTE', 'TRINTA', 'QUARENTA', 'CINQUENTA',
      'SESSENTA', 'SETENTA', 'OITENTA', 'NOVENTA') ;
   Num100a900: Array[1..9] Of String = (
      'CENTO', 'DUZENTOS', 'TREZENTOS', 'QUATROCENTOS', 'QUINHENTOS',
      'SEISCENTOS', 'SETECENTOS', 'OITOCENTOS', 'NOVECENTOS') ;
Var
   N: Integer ;

   // Trata valores entre 0 e 99
   // ==========================
   Function Trata0a99(Const S: String ;N: Integer): String ;
   Begin
      Case N Of
         0:
            Result := '' ;
         1..19:
            Result := Num1a19[N] ;
         20..99:
            Begin
               Result := Num10a90[Ord(S[1]) - Ord('0')] ;
               If S[2] <> '0' Then
                  Result := Result + ' E ' + Num1a19[Ord(S[2]) - Ord('0')] ;
            End ;
      End ;
   End ;

   // Trata valores entre 101 e 999
   // =============================
   Function Trata101a999(Const S: String ;N: Integer): String ;
   Var
      Aux: String[3] ;
   Begin
      Result := Num100a900[Ord(S[1]) - Ord('0')] ;
      If (S[2] <> '0') Or (S[3] <> '0') Then
      Begin
         Aux := Copy(S, 2, 2) ;
         Result := Result + ' E ' + Trata0a99(Aux, StrToInt(Aux)) ;
      End ;
   End ;

Begin
   N := StrToInt(S) ;
   Case N Of
      0..99: Result := Trata0a99(IntToStr(N), N) ;
      100: Result := 'CEM' ;
      101..999: Result := Trata101a999(S, N) ;
   End ;
End ;

Nenhum comentário:

Postar um comentário