Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '
- ' Функции для вычисления суммы прописью по
- ' числовому значению от 0 до 999999999999
- '
- ' Вспомогательные переменные
- Dim Тысячи, Миллионы As Boolean
- Dim Миллиарды, ВторойДесяток As Boolean
- ' Массмв составных частей
- Dim Часть(32) As String
- ' Логические константы
- Const Истина As Boolean = True
- Const Ложь As Boolean = False
- '
- ' функция возвращает число прописью
- '
- Function ЧислоПрописом(Число)
- ' Присвоение значений массиву частей
- Часть(1) = "оди": Часть(2) = "двi"
- Часть(3) = "три": Часть(4) = "чотир"
- Часть(5) = "п`ят": Часть(6) = "шiст"
- Часть(7) = "сiм": Часть(8) = "вiсiм"
- Часть(9) = "дев`ят": Часть(10) = "н"
- Часть(11) = "и": Часть(12) = "ь"
- Часть(13) = "надцять": Часть(14) = "дцять"
- Часть(15) = "сорок": Часть(16) = "дев`яно"
- Часть(17) = "сто": Часть(18) = "два"
- Часть(19) = "стi": Часть(20) = "сот"
- Часть(21) = "одна": Часть(22) = "тисяч"
- Часть(23) = "а": Часть(24) = "i"
- Часть(25) = "мiльйон": Часть(26) = "iв"
- Часть(27) = " ": Часть(28) = "":
- Часть(29) = "десят": Часть(30) = "ста"
- Часть(31) = "мільярд": Часть(32) = "нуль "
- ' Временные переменные вначале сбрасываются
- Тысячи = Ложь: Миллионы = Ложь
- Миллиарды = Ложь: ВторойДесяток = Ложь
- ' Отбрасываем дробную часть, если она есть
- Число = Fix(Число)
- ' Определяем длину исходного числа
- Длина = Len(Число)
- ' Цикл по всем цифрам числа, начиная с крайней
- ' левой до крайней правой
- For Позиция = Длина To 1 Step -1
- ' Добавляются очередные слова, описывающие
- ' текущую цифру
- ЧислоПрописом = ЧислоПрописом + _
- ЦифраСтрокой(Mid(Число, _
- Длина - Позиция + 1, 1), _
- Позиция)
- Next Позиция
- ' Алгоритм возвращает пустую строку при
- ' нулевом аргументе. Исправим это
- If ЧислоПрописом = "" Then
- ЧислоПрописом = Часть(32)
- End If
- End Function
- '
- ' Составление слов из частей по очередной
- ' цифре числа и по предистории работы
- '
- ' Функция доступна только в текущем модуле
- '
- Private Function ЦифраСтрокой(Цифра, Место) As String
- ' Если сотни или десятки миллиардов, то
- ' запомнить об этом для будущего
- If (Цифра <> 0) And ((Место = 11) Or _
- (Место = 12)) Then
- Миллиарды = Истина
- End If
- ' Если сотни или десятки миллионов, то
- ' запомнить об этом для будущего
- If (Цифра <> 0) And ((Место = 8) Or _
- (Место = 9)) Then
- Миллионы = Истина
- End If
- ' Если сотни или десятки тысяч, то
- ' запомнить об этом для будущего
- If (Цифра <> 0) And ((Место = 5) Or _
- (Место = 6)) Then
- Тысячи = Истина
- End If
- ' Если предыдущая цифра была единица
- ' в поле десятков, то выбираем
- If ВторойДесяток Then
- Select Case Цифра
- ' пишем "десять "
- Case 0
- ЦифраСтрокой = Часть(29) + Часть(12) + _
- Часть(27)
- ' пишем "дванадцять "
- Case 2
- ЦифраСтрокой = Часть(18) + Часть(13) + _
- Часть(27)
- ' в остальных случаях пишем название цифры
- ' плюс "надцять "
- Case Else
- ЦифраСтрокой = Часть(Цифра) + Часть(13) + _
- Часть(27)
- End Select
- ' Добавляем название разрядов
- Select Case Место
- Case 4
- ' добавляем "тисяч "
- ЦифраСтрокой = ЦифраСтрокой + Часть(22) + _
- Часть(27)
- ' добавляем "мiльйонiв "
- Case 7
- ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
- Часть(26) + Часть(27)
- ' добавляем "мiлiардiв "
- Case 10
- ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
- Часть(26) + Часть(27)
- End Select
- ' Сбрасываем значения, так как переходим к
- ' предыдущим разрядам
- ВторойДесяток = Ложь: Миллионы = Ложь
- Миллиарды = Ложь: Тысячи = Ложь
- ' Во всех остальных случаях, то есть
- ' не для описания чисел второго десятка
- Else
- ' Определяем название десятков
- If (Место = 2) Or (Место = 5) Or _
- (Место = 8) Or (Место = 11) Then
- Select Case Цифра
- ' Запоминаем про второй десяток для
- ' подстановки при следующем входе
- Case 1
- ВторойДесяток = Истина
- ' пишем "двадцять "
- Case 2
- ЦифраСтрокой = Часть(18) + Часть(14) + _
- Часть(27)
- ' пишем "тридцять "
- Case 3
- ЦифраСтрокой = Часть(Цифра) + Часть(14) + _
- Часть(27)
- ' пишем "сорок "
- Case 4
- ЦифраСтрокой = Часть(15) + Часть(27)
- ' пишем "дев'яносто "
- Case 9
- ЦифраСтрокой = Часть(16) + Часть(17) + _
- Часть(27)
- ' в остальных случаях пишем название цифры
- ' плюс "десят "
- Case 5, 6, 7, 8
- ЦифраСтрокой = Часть(Цифра) + Часть(29) + _
- Часть(27)
- End Select
- End If
- ' Определяем названия сотен
- If (Место = 3) Or (Место = 6) Or _
- (Место = 9) Or (Место = 12) Then
- Select Case Цифра
- ' пишем "сто "
- Case 1
- ЦифраСтрокой = Часть(17) + Часть(27)
- ' пишем "двісті "
- Case 2
- ЦифраСтрокой = Часть(2) + Часть(19) + _
- Часть(27)
- ' пишем "триста "
- Case 3
- ЦифраСтрокой = Часть(3) + Часть(30) + _
- Часть(27)
- ' пишем "чотириста "
- Case 4
- ЦифраСтрокой = Часть(4) + Часть(11) + _
- Часть(30) + Часть(27)
- ' в остальных случаях пишем название цифры
- ' плюс "сот "
- Case 5, 6, 7, 8, 9
- ЦифраСтрокой = Часть(Цифра) + Часть(20) + _
- Часть(27)
- End Select
- End If
- ' Определяем названия единиц
- If (Место = 1) Or (Место = 4) Or _
- (Место = 7) Or (Место = 10) Then
- Select Case Цифра
- ' пишем "один " для миллионов и миллиардов и "одна " для остальных вариантов
- Case 1
- If (Место = 7) Or (Место = 10) Then
- ЦифраСтрокой = Часть(1) + Часть(10) + Часть(27)
- Else
- ЦифраСтрокой = Часть(21) + Часть(27)
- End If
- ' пишем "два " для миллионов и миллиардов и "двi " для остальных вариантов
- Case 2
- If (Место = 7) Or (Место = 10) Then
- ЦифраСтрокой = Часть(18) + Часть(27)
- Else
- ЦифраСтрокой = Часть(2) + Часть(27)
- End If
- ' пишем "три "
- Case 3
- ЦифраСтрокой = Часть(Цифра) + Часть(27)
- ' пишем "чотири "
- Case 4
- ЦифраСтрокой = Часть(4) + Часть(11) + _
- Часть(27)
- ' пишем "сiм" или "вiсiм"
- Case 7, 8
- ЦифраСтрокой = Часть(Цифра) + Часть(27)
- ' в остальных случаях пишем название цифры
- Case 5, 6, 9
- ЦифраСтрокой = Часть(Цифра) + Часть(12) + _
- Часть(27)
- End Select
- ' Определяем названия тысяч
- If Место = 4 Then
- Select Case Цифра
- ' пишем "тисяч" только в том случае, если
- ' хотя бы в одном разряде тысяч есть не нулевое
- ' значение
- Case 0
- If Тысячи Then
- ЦифраСтрокой = Часть(22) + Часть(27)
- End If
- ' пишем "одна тисяча "
- Case 1
- ЦифраСтрокой = Часть(21) + Часть(27) + _
- Часть(22) + Часть(23) + Часть(27)
- ' пишем "дві тисячі "
- Case 2
- ЦифраСтрокой = Часть(2) + Часть(27) + _
- Часть(22) + Часть(24) + Часть(27)
- ' добавляем "тисячі "
- Case 3, 4
- ЦифраСтрокой = ЦифраСтрокой + Часть(22) + _
- Часть(24) + Часть(27)
- ' в остальных случаях добавляем "тисяч "
- Case 5, 6, 7, 8, 9
- ЦифраСтрокой = ЦифраСтрокой + Часть(22) + _
- Часть(27)
- End Select
- ' Сбрасываем значения тысяч, так как
- ' переходим к предыдущим разрядам
- Тысячи = Ложь
- End If
- ' Определяем названия миллионов
- If Место = 7 Then
- Select Case Цифра
- ' пишем "мiльйонiв " только в том случае,
- ' если хотя бы в одном разряде миллионов
- ' есть не нулевое значение
- Case 0
- If Миллионы Then
- ЦифраСтрокой = Часть(25) + Часть(26) + _
- Часть(27)
- End If
- ' добавляем "мiльйон "
- Case 1
- ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
- Часть(27)
- ' добавляем "мiльйони "
- Case 2, 3, 4
- ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
- Часть(11) + Часть(27)
- ' добавляем "мiльйонiв "
- Case 5, 6, 7, 8, 9
- ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _
- Часть(26) + Часть(27)
- End Select
- ' Сбрасываем значения миллионов, так как
- ' переходим к предыдущим разрядам
- Миллионы = Ложь
- End If
- ' Определяем названия миллиардов
- If Место = 10 Then
- Select Case Цифра
- ' пишем "мiлiардiв " только в том случае,
- ' если хотя бы в одном разряде миллиардов
- ' есть не нулевое значение
- Case 0
- If Миллиарды Then
- ЦифраСтрокой = Часть(31) + Часть(26) + _
- Часть(27)
- End If
- ' добавляем "мiлiард "
- Case 1
- ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
- Часть(27)
- ' добавляем "мiлiарди "
- Case 2, 3, 4
- ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
- Часть(11) + Часть(27)
- ' добавляем "мiлiардiв "
- Case 5, 6, 7, 8, 9
- ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _
- Часть(26) + Часть(27)
- End Select
- ' Сбрасываем значения миллиардов, так как
- ' переходим к предыдущим разрядам
- Миллиарды = Ложь
- End If
- End If
- End If
- End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement