Pas.0021. Напишите программу, которая выводит заданное натуральное $0 < N < 999'999'999'999$ прописью, например, \( N = 1'234'567'890 \) — «Один миллиард двести тридцать четыре миллиона пятьсот шестьдесят семь тысяч восемьсот девяносто».
Решение.program NumberInWords; const t = 1000; DIGITAL_N = 54321; SECOND_TERNARY = 2; FROM_10_TO_19 = 1; var n : longint = DIGITAL_N; ternaryCounter : integer; ternaryString, nString : string; ternaryNames : array [1..4] of string = ('', 'тысяч', 'миллион', 'миллиард'); ternarySuffixes : array [1..4,0..9] of string = (('', '', '', '', '', '', '', '', '', ''), ('', 'а', 'и', 'и', 'и', '', '', '', '', ''), ('ов', '', 'а', ' а', 'а', 'ов', 'ов', 'ов', 'ов', 'ов'), ('ов', '', 'а', ' а', 'а', 'ов', 'ов', 'ов', 'ов', 'ов')); female : array[0..9] of string = ('', 'одна', 'две', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'); male : array[0..9] of string = ('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'); teens : array[0..9] of string = ('десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'); tens : array[0..9] of string = ('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'); hundreds : array[0..9] of string = ('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'); function GetTernaryString(ternary, tCounter : integer) : string; var digitValue, tenValue, hundredValue : integer; begin digitValue := ternary mod 10; tenValue := (ternary div 10) mod 10; hundredValue := ternary div 100; if ternary = 0 then GetTernaryString := '' else if tenValue = FROM_10_TO_19 then GetTernaryString := hundreds[hundredValue] + ' ' + teens[digitValue] + ' ' + ternaryNames[tCounter] + ternarySuffixes[tCounter, 0] else if tCounter = SECOND_TERNARY then GetTernaryString := hundreds[hundredValue] + ' ' + tens[tenValue] + ' ' + female[digitValue] + ' ' + ternaryNames[tCounter] + ternarySuffixes[tCounter, digitValue] else GetTernaryString := hundreds[hundredValue] + ' ' + tens[tenValue] + ' ' + male[digitValue] + ' ' + ternaryNames[tCounter] + ternarySuffixes[tCounter, digitValue]; end; begin nString := ''; ternaryCounter := 1; while n > 0 do begin ternaryString := GetTernaryString(n mod t, ternaryCounter); nString := ternaryString + ' ' + nString; ternaryCounter := ternaryCounter + 1; n := n div t; end; write(DIGITAL_N + ' — ' + nString + '.'); end.Консоль.
54321 — пятьдесят четыре тысячи триста двадцать один .