Порядковые числительные

 Для одного проекта мне понадобилась процедура, переводящая номера в числительные. Русский язык я немного подзабыл, поэтому после чтения доков получил код:

Procedure.s ordn(n)
  r$=""
  d1=n%10
  d2=(n%100)/10
  
  d3=n%100:d3=Int(n/100)
  nl=Len(Str(n)) ; длина строки
    Select d1
      Case 0
      Case 1:r$="первый"
      Case 2:r$="второй"
      Case 3:r$="третий"
      Case 4:r$="четвертый"
      Case 5:r$="пятый"
      Case 6:r$="шестой"
      Case 7:r$="седьмой"
      Case 8:r$="восьмой"
      Case 9:r$="девятый"
    EndSelect
    Select d2
      Case 0:
      Case 1:
        Select d1
          Case 0:r$="десятый"
          Case 1:r$="одиннадцатый"
          Case 2:r$="двенадцатый"
          Case 3:r$="тринадцатый"
          Case 4:r$="четырнадцатый"
          Case 5:r$="пятнадцатый"
          Case 6:r$="шестнадцатый"
          Case 7:r$="семнадцатый"
          Case 8:r$="восемнадцатый"
          Case 9:r$="девятнадцатый"
        EndSelect
      Case 2:
        If d1 ;2x
          r$="двадцать "+r$
        Else
          r$="двадцатый"
        EndIf
      Case 3:
        If d1 ;3x
          r$="тридцать "+r$
        Else
          r$="тридцатый"
        EndIf
      Case 4:
        If d1 ;4x
          r$="сорок "+r$
        Else
          r$="сороковой"
        EndIf
      Case 5:
        If d1 ;5x
          r$="пятьдесят "+r$
        Else
          r$="пятидесятый"
        EndIf
      Case 6:
        If d1 ;6x
          r$="шестьдесят "+r$
        Else
          r$="шестидесятый"
        EndIf
      Case 7:
        If d1 ;7x
          r$="семьдесят "+r$
        Else
          r$="семидесятый"
        EndIf
      Case 8:
        If d1 ;8x
          r$="восемьдесят "+r$
        Else
          r$="восьмидесятый"
        EndIf
      Case 9:
        If d1 ;9x
          r$="девяносто "+r$
        Else
          r$="девяностый"
        EndIf
    EndSelect
    
    Select d3
        Case 0:
        Case 1:
          If d1=0 And d2=0
            r$="сотый"
          Else
            r$="сто "+r$
          EndIf
        Case 2:
          If d1=0 And d2=0
            r$="двухсотый"
          Else
            r$="двести "+r$
          EndIf
        Case 3:
          If d1=0 And d2=0
            r$="трехсотый"
          Else
            r$="триста "+r$
          EndIf
        Case 4:
          If d1=0 And d2=0
            r$="четырехсотый"
          Else
            r$="четыреста "+r$
          EndIf
        Case 5:
          If d1=0 And d2=0
            r$="пятисотый"
          Else
            r$="пятьсот"+r$
          EndIf
        Case 6:
          If d1=0 And d2=0
            r$="шестисотый"
          Else
            r$="шестьсот "+r$
          EndIf
        Case 7:
          If d1=0 And d2=0
            r$="семисотый"
          Else
            r$="семьсот"+r$
          EndIf
        Case 8:
          If d1=0 And d2=0
            r$="восьмисотый"
          Else
            r$="восемьсот"+r$
          EndIf
        Case 9:
          If d1=0 And d2=0
            r$="девятисотый"
          Else
            r$="девятьсот "+r$
          EndIf
    EndSelect
  ProcedureReturn r$
EndProcedure

For i=0 To 999
  Debug Str(i)+"="+ordn(i)
Next i

Дальше пойдут тысячные, с которыми пока все грустно.

Комментарии