![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 01.10.2009
Сообщений: 83
|
![]()
Всем привет!
Сильно не бейте за повтор темы, но хочу научится сам, переделал макрос украинской валюты в казахскую, и все ниче но где то косяк с написанием пишет например дванадцать вместо двенадцать,четыренадцать дведцать вместо двадцать можно ли проверить где я ошибся! |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
![]() |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 01.10.2009
Сообщений: 83
|
![]()
Может лучше так выложу:
' ' Функции для вычисления суммы прописью по ' числовому значению от 0 до 999999999999 ' ' Вспомогательные переменные Dim Тысячи, Миллионы As Boolean Dim Миллиарды, ВторойДесяток As Boolean ' Массмв составных частей Dim Часть(32) As String ' Логические константы Const Истина As Boolean = True Const Ложь As Boolean = False ' ' Функция возвращает сумму прописью ' Function СумаПрописом(Тенге) ' Считаем тиын Переменная = (Тенге - Fix(Тенге)) * 100 If (Переменная - Fix(Переменная)) >= 0.5 Then If Переменная >= 99.5 Then Переменная = 0 Тенге = Тенге + 1 Else Переменная = Fix(Переменная) + 1 End If Else Переменная = Fix(Переменная) End If Тиын = CStr(Переменная) ' Вызов функции для получения числа прописью Число = CStr(Fix(Тенге)) СумаПрописом = ЧислоПрописом(Число) ' Строку с заглавной буквы СумаПрописом = UCase(Mid(СумаПрописом, 1, 1)) + _ Mid(СумаПрописом, 2) ' Вычислить длину исходного числа Длина = Len(Число) ' Если число только из одной цифры, добавить ' до двух (для единообразия алгоритма) If Длина = 1 Then Число = "0" & Число Длина = Длина + 1 End If ' Добавление нужного окончания строки ' ' Для чисел, оканчивающихся на 10, 11, 12, 13, ' 14, 15, 16, 17, 18, 19 добавляем "тенге" If Mid(Число, Длина - 1, 1) = 1 Then СумаПрописом = СумаПрописом + "тенге" ' Для всех остальных случаев Else Select Case Mid(Число, Длина) ' Для чисел, оканчивающихся на 1 добавляем "тенге" Case 1 СумаПрописом = СумаПрописом + "тенге" ' Для чисел, оканчивающихся на 2, 3, 4 ' добавляем "тенге " Case 2, 3, 4 СумаПрописом = СумаПрописом + "тенге" ' Для чисел, оканчивающихся на 5, 6, 7, 8, ' 9, 0 добавляем "тенге" Case Else СумаПрописом = СумаПрописом + "тенге" End Select End If ' Окончательно формируем результат, добавляя тиын If Len(Тиын) = 1 Then Тиын = "0" & Тиын End If СумаПрописом = СумаПрописом + " " + Тиын + " " ' Для чисел, оканчивающихся на 10, 11, 12, 13, ' 14, 15, 16, 17, 18, 19 добавляем "тиын" If Mid(Тиын, 1, 1) = 1 Then СумаПрописом = СумаПрописом + "тиын" ' Для всех остальных случаев Else Select Case Mid(Тиын, 2) ' Для чисел, оканчивающихся на 1 добавляем "тиын" Case 1 |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 01.10.2009
Сообщений: 83
|
![]()
СумаПрописом = СумаПрописом + "тиын"
' Для чисел, оканчивающихся на 2, 3, 4 ' добавляем "тиын" Case 2, 3, 4 СумаПрописом = СумаПрописом + "тиын" ' Для чисел, оканчивающихся на 5, 6, 7, 8, ' 9, 0 добавляем "тиын" Case Else СумаПрописом = СумаПрописом + "тиын" End Select End If End Function ' ' функция возвращает число прописью ' Function ЧислоПрописом(Число) ' Присвоение значений массиву частей Часть(1) = "один": Часть(2) = "две" Часть(3) = "три": Часть(4) = "четыре" Часть(5) = "пять": Часть(6) = "шесть" Часть(7) = "семь": Часть(8) = "восемь" Часть(9) = "девять": Часть(10) = "н" ' Часть(11) = "ы": Часть(12) = "ь" Часть(13) = "надцать": Часть(14) = "дцать" Часть(15) = "сорок": Часть(16) = "девяно" Часть(17) = "сто": Часть(18) = "две" Часть(19) = "сти": Часть(20) = "сот" Часть(21) = "одна": Часть(22) = "тысяч" Часть(23) = "а": Часть(24) = "и" Часть(25) = "миллион": Часть(26) = "ов" Часть(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) ' добавляем "миллионов " Case 7 ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _ Часть(26) + Часть(27) ' добавляем "милиардов " Case 10 ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _ Часть(26) + Часть(27) End Select ' Сбрасываем значения, так как переходим к ' предыдущим разрядам ВторойДесяток = Ложь: Миллионы = Ложь Миллиарды = Ложь: Тысячи = Ложь ' Во всех остальных случаях, то есть ' не для описания чисел второго десятка Else |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 01.10.2009
Сообщений: 83
|
![]()
' Определяем название десятков
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 ' пишем "два " для миллионов и миллиардов и "два " для остальных вариантов Case 2 If (Место = 7) Or (Место = 10) Then ЦифраСтрокой = Часть(18) + Часть(27) Else ЦифраСтрокой = Часть(2) + Часть(27) End If ' пишем "три " Case 3 ЦифраСтрокой = Часть(Цифра) + Часть(27) ' пишем "четыре " Case 4 ЦифраСтрокой = Часть(4) + Часть(11) + _ Часть(27) ' пишем "семь" или "восемь" 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 ' Сбрасываем значения тысяч, так как ' переходим к предыдущим разрядам |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 01.10.2009
Сообщений: 83
|
![]()
Тысячи = Ложь
End If ' Определяем названия миллионов If Место = 7 Then Select Case Цифра ' пишем "миллионов " только в том случае, ' если хотя бы в одном разряде миллионов ' есть не нулевое значение Case 0 If Миллионы Then ЦифраСтрокой = Часть(25) + Часть(26) + _ Часть(27) End If ' добавляем "миллион " Case 1 ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _ Часть(27) ' добавляем "миллионы " Case 2, 3, 4 ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _ Часть(11) + Часть(27) ' добавляем "миллионов " Case 5, 6, 7, 8, 9 ЦифраСтрокой = ЦифраСтрокой + Часть(25) + _ Часть(26) + Часть(27) End Select ' Сбрасываем значения миллионов, так как ' переходим к предыдущим разрядам Миллионы = Ложь End If ' Определяем названия миллиардов If Место = 10 Then Select Case Цифра ' пишем "милиардов " только в том случае, ' если хотя бы в одном разряде миллиардов ' есть не нулевое значение Case 0 If Миллиарды Then ЦифраСтрокой = Часть(31) + Часть(26) + _ Часть(27) End If ' добавляем "милиард " Case 1 ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _ Часть(27) ' добавляем "милиарды " Case 2, 3, 4 ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _ Часть(11) + Часть(27) ' добавляем "милиардов " Case 5, 6, 7, 8, 9 ЦифраСтрокой = ЦифраСтрокой + Часть(31) + _ Часть(26) + Часть(27) End Select ' Сбрасываем значения миллиардов, так как ' переходим к предыдущим разрядам Миллиарды = Ложь End If End If End If End Function |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
![]() |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 01.10.2009
Сообщений: 83
|
![]()
Сори, за мои познания екселя!
Вроде то что я зазаиповал, открывается у меня на компе, через Разработчик-VB..там весь этот код! ваш вариант выкладки не совсем понятен! я думал что просто "орфографически" проверите на ошибку, не более! Еще раз извините! |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
![]()
Вроди бы все исправил,проверте все внимательно.
Анализ,обработка данных Недорого
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 01.10.2009
Сообщений: 83
|
![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Где ошибка: | Egik_net | Microsoft Office Access | 6 | 26.10.2009 00:43 |
Где ошибка? | Константин1985 | HTML и CSS | 3 | 30.09.2009 17:35 |
где ошибка? | Prophet23 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 20.05.2009 23:20 |
Где ошибка? | [Smarik] | Общие вопросы Delphi | 5 | 01.04.2008 09:56 |
Где ошибка? | jarded | Общие вопросы C/C++ | 2 | 01.06.2007 15:10 |