Advertisement
igorulianov

FuncSum

Apr 23rd, 2023
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VisualBasic 13.25 KB | Software | 0 0
  1. '
  2. ' Функции для вычисления суммы прописью по
  3. ' числовому значению от 0 до 999999999999
  4. '
  5. ' Вспомогательные переменные
  6. Dim Тысячи, Миллионы As Boolean
  7. Dim Миллиарды, ВторойДесяток As Boolean
  8. ' Массмв составных частей
  9. Dim Часть(32) As String
  10. ' Логические константы
  11. Const Истина As Boolean = True
  12. Const Ложь As Boolean = False
  13.  
  14. '
  15. ' функция возвращает число прописью
  16. '
  17. Function ЧислоПрописом(Число)
  18. ' Присвоение значений массиву частей
  19. Часть(1) = "оди":       Часть(2) = "двi"
  20. Часть(3) = "три":       Часть(4) = "чотир"
  21. Часть(5) = "п`ят":       Часть(6) = "шiст"
  22. Часть(7) = "сiм":       Часть(8) = "вiсiм"
  23. Часть(9) = "дев`ят":     Часть(10) = "н"
  24. Часть(11) = "и":        Часть(12) = "ь"
  25. Часть(13) = "надцять":  Часть(14) = "дцять"
  26. Часть(15) = "сорок":    Часть(16) = "дев`яно"
  27. Часть(17) = "сто":      Часть(18) = "два"
  28. Часть(19) = "стi":      Часть(20) = "сот"
  29. Часть(21) = "одна":     Часть(22) = "тисяч"
  30. Часть(23) = "а":        Часть(24) = "i"
  31. Часть(25) = "мiльйон":  Часть(26) = "iв"
  32. Часть(27) = " ":        Часть(28) = "":
  33. Часть(29) = "десят":    Часть(30) = "ста"
  34. Часть(31) = "мільярд": Часть(32) = "нуль "
  35. ' Временные переменные вначале сбрасываются
  36. Тысячи = Ложь:      Миллионы = Ложь
  37. Миллиарды = Ложь:   ВторойДесяток = Ложь
  38. ' Отбрасываем дробную часть, если она есть
  39. Число = Fix(Число)
  40. ' Определяем длину исходного числа
  41. Длина = Len(Число)
  42. ' Цикл по всем цифрам числа, начиная с крайней
  43. ' левой до крайней правой
  44. For Позиция = Длина To 1 Step -1
  45. ' Добавляются очередные слова, описывающие
  46. ' текущую цифру
  47.   ЧислоПрописом = ЧислоПрописом + _
  48.                    ЦифраСтрокой(Mid(Число, _
  49.                    Длина - Позиция + 1, 1), _
  50.                    Позиция)
  51. Next Позиция
  52. ' Алгоритм возвращает пустую строку при
  53. ' нулевом аргументе. Исправим это
  54. If ЧислоПрописом = "" Then
  55.    ЧислоПрописом = Часть(32)
  56. End If
  57. End Function
  58. '
  59. ' Составление слов из частей по очередной
  60. ' цифре числа и по предистории работы
  61. '
  62. ' Функция доступна только в текущем модуле
  63. '
  64. Private Function ЦифраСтрокой(Цифра, Место) As String
  65. ' Если сотни или десятки миллиардов, то
  66. ' запомнить об этом для будущего
  67. If (Цифра <> 0) And ((Место = 11) Or _
  68.     (Место = 12)) Then
  69.    Миллиарды = Истина
  70. End If
  71. ' Если сотни или десятки миллионов, то
  72. ' запомнить об этом для будущего
  73. If (Цифра <> 0) And ((Место = 8) Or _
  74.     (Место = 9)) Then
  75.    Миллионы = Истина
  76. End If
  77. ' Если сотни или десятки тысяч, то
  78. ' запомнить об этом для будущего
  79. If (Цифра <> 0) And ((Место = 5) Or _
  80.     (Место = 6)) Then
  81.    Тысячи = Истина
  82. End If
  83. ' Если предыдущая цифра была единица
  84. ' в поле десятков, то выбираем
  85. If ВторойДесяток Then
  86.    Select Case Цифра
  87. ' пишем "десять "
  88.   Case 0
  89.      ЦифраСтрокой = Часть(29) + Часть(12) + _
  90.                     Часть(27)
  91. ' пишем "дванадцять "
  92.   Case 2
  93.      ЦифраСтрокой = Часть(18) + Часть(13) + _
  94.                     Часть(27)
  95. ' в остальных случаях пишем название цифры
  96. ' плюс "надцять "
  97.   Case Else
  98.      ЦифраСтрокой = Часть(Цифра) + Часть(13) + _
  99.                     Часть(27)
  100.    End Select
  101. ' Добавляем название разрядов
  102.   Select Case Место
  103.    Case 4
  104. ' добавляем "тисяч "
  105.     ЦифраСтрокой = ЦифраСтрокой + Часть(22) + _
  106.                     Часть(27)
  107. ' добавляем "мiльйонiв "
  108.   Case 7
  109.      ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
  110.                     Часть(26) + Часть(27)
  111. ' добавляем "мiлiардiв "
  112.   Case 10
  113.      ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
  114.                     Часть(26) + Часть(27)
  115.    End Select
  116. ' Сбрасываем значения, так как переходим к
  117. ' предыдущим разрядам
  118.  ВторойДесяток = Ложь:    Миллионы = Ложь
  119.   Миллиарды = Ложь:        Тысячи = Ложь
  120. ' Во всех остальных случаях, то есть
  121. ' не для описания чисел второго десятка
  122. Else
  123. ' Определяем название десятков
  124.   If (Место = 2) Or (Место = 5) Or _
  125.         (Место = 8) Or (Место = 11) Then
  126.      Select Case Цифра
  127. ' Запоминаем про второй десяток для
  128. ' подстановки при следующем входе
  129.     Case 1
  130.        ВторойДесяток = Истина
  131. ' пишем "двадцять "
  132.     Case 2
  133.        ЦифраСтрокой = Часть(18) + Часть(14) + _
  134.                       Часть(27)
  135. ' пишем "тридцять "
  136.     Case 3
  137.        ЦифраСтрокой = Часть(Цифра) + Часть(14) + _
  138.                       Часть(27)
  139. ' пишем "сорок "
  140.     Case 4
  141.        ЦифраСтрокой = Часть(15) + Часть(27)
  142. ' пишем "дев'яносто "
  143.     Case 9
  144.        ЦифраСтрокой = Часть(16) + Часть(17) + _
  145.                       Часть(27)
  146. ' в остальных случаях пишем название цифры
  147. ' плюс "десят "
  148.     Case 5, 6, 7, 8
  149.        ЦифраСтрокой = Часть(Цифра) + Часть(29) + _
  150.                        Часть(27)
  151.      End Select
  152.    End If
  153. ' Определяем названия сотен
  154.   If (Место = 3) Or (Место = 6) Or _
  155.         (Место = 9) Or (Место = 12) Then
  156.      Select Case Цифра
  157. ' пишем "сто "
  158.     Case 1
  159.        ЦифраСтрокой = Часть(17) + Часть(27)
  160. ' пишем "двісті "
  161.     Case 2
  162.        ЦифраСтрокой = Часть(2) + Часть(19) + _
  163.                       Часть(27)
  164. ' пишем "триста "
  165.     Case 3
  166.        ЦифраСтрокой = Часть(3) + Часть(30) + _
  167.                       Часть(27)
  168. ' пишем "чотириста "
  169.     Case 4
  170.        ЦифраСтрокой = Часть(4) + Часть(11) + _
  171.                       Часть(30) + Часть(27)
  172. ' в остальных случаях пишем название цифры
  173. ' плюс "сот "
  174.     Case 5, 6, 7, 8, 9
  175.        ЦифраСтрокой = Часть(Цифра) + Часть(20) + _
  176.                       Часть(27)
  177.      End Select
  178.    End If
  179. ' Определяем названия единиц
  180.   If (Место = 1) Or (Место = 4) Or _
  181.         (Место = 7) Or (Место = 10) Then
  182.      Select Case Цифра
  183. ' пишем  "один " для миллионов и миллиардов и "одна " для остальных вариантов
  184.     Case 1
  185.         If (Место = 7) Or (Место = 10) Then
  186.             ЦифраСтрокой = Часть(1) + Часть(10) + Часть(27)
  187.         Else
  188.             ЦифраСтрокой = Часть(21) + Часть(27)
  189.         End If
  190. ' пишем "два " для миллионов и миллиардов и "двi " для остальных вариантов
  191.     Case 2
  192.         If (Место = 7) Or (Место = 10) Then
  193.             ЦифраСтрокой = Часть(18) + Часть(27)
  194.         Else
  195.             ЦифраСтрокой = Часть(2) + Часть(27)
  196.         End If
  197. ' пишем "три "
  198.     Case 3
  199.        ЦифраСтрокой = Часть(Цифра) + Часть(27)
  200. ' пишем "чотири "
  201.     Case 4
  202.        ЦифраСтрокой = Часть(4) + Часть(11) + _
  203.                       Часть(27)
  204. ' пишем "сiм" или "вiсiм"
  205.     Case 7, 8
  206.        ЦифраСтрокой = Часть(Цифра) + Часть(27)
  207. ' в остальных случаях пишем название цифры
  208.     Case 5, 6, 9
  209.        ЦифраСтрокой = Часть(Цифра) + Часть(12) + _
  210.                       Часть(27)
  211.      End Select
  212. ' Определяем названия тысяч
  213.     If Место = 4 Then
  214.        Select Case Цифра
  215. ' пишем "тисяч" только в том случае, если
  216. ' хотя бы в одном разряде тысяч есть не нулевое
  217. ' значение
  218.       Case 0
  219.          If Тысячи Then
  220.            ЦифраСтрокой = Часть(22) + Часть(27)
  221.          End If
  222. ' пишем "одна тисяча "
  223.       Case 1
  224.          ЦифраСтрокой = Часть(21) + Часть(27) + _
  225.                 Часть(22) + Часть(23) + Часть(27)
  226. ' пишем "дві тисячі "
  227.       Case 2
  228.          ЦифраСтрокой = Часть(2) + Часть(27) + _
  229.                 Часть(22) + Часть(24) + Часть(27)
  230. ' добавляем "тисячі "
  231.       Case 3, 4
  232.          ЦифраСтрокой = ЦифраСтрокой + Часть(22) + _
  233.                         Часть(24) + Часть(27)
  234. ' в остальных случаях добавляем "тисяч "
  235.       Case 5, 6, 7, 8, 9
  236.          ЦифраСтрокой = ЦифраСтрокой + Часть(22) + _
  237.                         Часть(27)
  238.        End Select
  239. ' Сбрасываем значения тысяч, так как
  240. ' переходим к предыдущим разрядам
  241.       Тысячи = Ложь
  242.      End If
  243. ' Определяем названия миллионов
  244.     If Место = 7 Then
  245.        Select Case Цифра
  246. ' пишем "мiльйонiв " только в том случае,
  247. ' если хотя бы в одном разряде миллионов
  248. ' есть не нулевое значение
  249.       Case 0
  250.          If Миллионы Then
  251.            ЦифраСтрокой = Часть(25) + Часть(26) + _
  252.                           Часть(27)
  253.          End If
  254. ' добавляем "мiльйон "
  255.       Case 1
  256.          ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
  257.                         Часть(27)
  258. ' добавляем "мiльйони "
  259.       Case 2, 3, 4
  260.          ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
  261.                         Часть(11) + Часть(27)
  262. ' добавляем "мiльйонiв "
  263.       Case 5, 6, 7, 8, 9
  264.          ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
  265.                         Часть(26) + Часть(27)
  266.        End Select
  267. ' Сбрасываем значения миллионов, так как
  268. ' переходим к предыдущим разрядам
  269.       Миллионы = Ложь
  270.      End If
  271. ' Определяем названия миллиардов
  272.     If Место = 10 Then
  273.        Select Case Цифра
  274. ' пишем "мiлiардiв " только в том случае,
  275. ' если хотя бы в одном разряде миллиардов
  276. ' есть не нулевое значение
  277.       Case 0
  278.          If Миллиарды Then
  279.            ЦифраСтрокой = Часть(31) + Часть(26) + _
  280.                           Часть(27)
  281.          End If
  282. ' добавляем "мiлiард "
  283.       Case 1
  284.          ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
  285.                         Часть(27)
  286. ' добавляем "мiлiарди "
  287.       Case 2, 3, 4
  288.          ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
  289.                         Часть(11) + Часть(27)
  290. ' добавляем "мiлiардiв "
  291.       Case 5, 6, 7, 8, 9
  292.          ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
  293.                         Часть(26) + Часть(27)
  294.        End Select
  295. ' Сбрасываем значения миллиардов, так как
  296. ' переходим к предыдущим разрядам
  297.       Миллиарды = Ложь
  298.      End If
  299.    End If
  300. End If
  301. End Function
  302.  
  303.  
  304.  
Tags: vb
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement