|
|
DIGIT.PAS |
|
{* Сумма Прописью *}Unit DIGIT;Interface Implementation Begin writeln('Функция "Сумма прописью" from Ruslan Nurislamov '); End. Program pas; Uses DIGIT.pas; {* Эту строку можно удалить *} Unit Digit; Interface Function Sum2Txt(L : LongInt) : String; Implementation Const {* Предопределенные *} Rub : Array[0..10] Of String[20] = ('', 'рубль', 'рубля', 'рубля', 'рубля', 'рублей', 'рублей', 'рублей', 'рублей', 'рублей', 'рублей'); Tho : Array[0..10] Of String[20] = ('', 'тысяча', 'тысячи', 'тысячи', 'тысячи', 'тысяч', 'тысяч', 'тысяч', 'тысяч', 'тысяч', 'тысяч'); Mill : Array[0..10] Of String[20] = ('', 'миллион', 'миллиона', 'миллиона', 'миллиона', 'миллионов', 'миллионов', 'миллионов', 'миллионов', 'миллионов', 'миллионов'); Milr : Array[0..2] Of String[20] = ('', 'миллиард', 'миллиарда'); Digit1 : Array[0..9] Of String[20] = ('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'); Digit21 : Array[0..9] Of String[20] = ('десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'); Digit2 : Array[0..9] Of String[20] = ('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'); Digit3 : Array[0..9] Of String[20] = ('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'); Digit3t : Array[0..9] Of String[20] = ('', 'одна', 'две', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'); Var {* Объявление переменных *} S : String; L : LongInt; Function Sum2Txt(L : LongInt); Var {* В работе нам потребуются переменные: *} St : Array[1..4] Of String[3]; I : Byte; N : Byte; J : Byte; Code : Integer; Sum : String; Sumt : String; OkAdd : Boolean; Begin If L = 0 Then Begin Sum2Txt := 'ноль рублей'; Exit; End; Str(L, S); St[1] := '000'; St[2] := '000'; St[3] := '000'; St[4] := '000'; While (Length(S) Mod 3)0 Do S := '0' + S; I := Length(S); N := 1; While I > = 1 Do Begin St[N] := St[N] + S[I]; Dec(I); {* Уменьшаем I на 1 *} If ((Length(S) - I) Mod 3) = 0 Then Inc(N); {* Увеличиваем N на 1 *} End; Begin conversion 3 - byte arrays To a String value } Sumt := ''; For I := 1 To 4 Do {* Увеличиваем I от 1 до 4 с шагом 1 *} Begin Sum := ''; Val(St[I][3], N, Code); Sum := Sum + Digit1[N]; If Digit1[N]'' Then Sum := Sum + ' '; If St[I][2] = '1' Then Begin OkAdd := False; Val(St[I][1], N, Code); Sum := Sum + Digit21[N] + ' '; N := 10; End; Else Begin Val(St[I][2], N, Code); Sum := Sum + Digit2[N]; If Digit2[N]'' Then Sum := Sum + ' '; Val(St[I][1], N, Code); Case I Of 1: Begin Sum := Sum + Digit3[N]; If Digit3[N]'' Then Sum := Sum + ' '; End; 2: Begin Sum := Sum + Digit3t[N]; If Digit3t[N]'' Then Sum := Sum + ' '; End; 3: Begin Sum := Sum + Digit3[N]; If Digit3[N]'' Then Sum := Sum + ' '; End; 4: Begin Sum := Sum + Digit3[N]; If Digit3[N]'' Then Sum := Sum + ' '; End; End; End; Case I Of 1: If Sum'' Then Sumt := Rub[N] + Sumt; 2: If Sum'' Then Sumt := Tho[N] + ' ' + Sumt; 3: If Sum'' Then Sumt := Mill[N] + ' ' + Sumt; 4: If Sum'' Then Sumt := Milr[N] + ' ' + Sumt; End; Sumt := Sum + Sumt; End; For I := Length(Sumt) - 2 Downto 1 Do If Sumt[I] = ' ' Then Begin J := I; Break; End; Sum := Copy(Sumt, J + 1, 4); If Sum'рубл' Then Sumt := Sumt + 'рублей'; Sum2Txt := Sumt; End; Begin End...... 07.08.2014 - Breakpoint - точка остановки 07.08.2014 - Топ-10 самых популярных приложений в Facebook 18.11.2013 - Панель управления и персонализация системы. Windows Vista 18.11.2013 - Логические и физические диски. Windows Vista 18.11.2013 - Удаление файлов и папок 01.11.2013 - Программирование дисковых подсистем: возможности 31.10.2013 - Windows8 или Windows7? 31.10.2013 - Windows8, игры |
|
Non-commercial fansite
|