Составить программу, которая читает натуральное число N в десятичном представлении (N= меньше 10000), а на выходе выдает это же число в десятичном представлении и на естественном языке. Например, 7 Þ семь; 204 Þ двести четыре;...

Составить программу, которая читает натуральное число N в десятичном представлении (N=< 10000), а на выходе выдает это же число в десятичном представлении и на естественном языке. Например, 7 Þ семь; 204 Þ двести четыре; 52 Þ пятьдесят два   в C#
Гость
Ответ(ы) на вопрос:
Гость
program NumberToStrnig; function NumToStr(InN: LongInt): String; { Константы для формирования числительных } const arr100 : array[0..9] of String = ('','сто ','двести ','триста ','четыреста ','пятьсот ', 'шестьсот ','семьсот ','восемьсот ','девятьсот '); arr011 : array[0..10] of String = ('','десять ','одиннадцать ','двенадцать ','тринадцать ', 'четырнадцать ','пятнадцать ','шестнадцать ','семнадцать ', 'восемнадцать ','девятнадцать '); arr010 : array[0..9] of String = ('','десять ','двадцать ','тридцать ','сорок ','пятьдесят ', 'шестьдесят ','семьдесят ','восемьдесят ','девяносто '); arr001 : array[0..9] of String = ('','','','три ','четыре ','пять ','шесть ','семь ','восемь ','девять '); arr000 : array[1..2,0..2] of String = (('','один ','два '), ('','одна ','две ')); { массив единиц, зависящих о рода } arrName : array[0..3] of String = ('тысяч','миллион','миллиард'); var sN, sSign, Triad, tmpS, Result : String; TriadCount, i, j, Err, idx : Integer; N, N10, N01, nGender : Integer; begin Str(Abs(InN), sN); { преобразуем число в строку } if InN < 0 then sSign := '(минус) ' else sSign := ''; TriadCount := (Length(sN)+2) div 3; { количество триад в числе } sN := Copy('000', 1, TriadCount*3-Length(sN)) + sN; { дополним до полных триад } Result := ''; { обработка триад } for i:=1 to TriadCount do begin Triad := Copy(sN, 3*i-2, 3); { очередная триада } Val (Triad[2], N10, Err); { десятки } Val (Triad[3], N01, Err); { единицы } for j:=1 to 3 do begin { сканируем цифры триады } Val(Triad[j], N, Err); { очередная цифра триады } case j of 1: Result := Result + arr100[N]; { формируем сотни } 2: if N10 = 1 then Result := Result + arr011[N01 + 1] { 10..19 } else Result := Result + arr010[N]; { 20..90 } 3: if N10 <> 1 then begin nGender := 1; { род мужской } if i=TriadCount-1 then nGender := 2; { род женский } if N > 2 then Result := Result + arr001[N] else Result := Result + arr000[nGender, N]; end; end; end; { добавление названий триад } if (N01 = 0) or (N01 > 4) or (N10 = 1) then idx := 3 else if (N01 > 1) and (N01 < 5) then idx := 2 else idx := 1; { idx - для 1, 2 или 5} Val(Triad, N, Err); tmpS := arrName[TriadCount-1-i]; { название триады } case TriadCount-i of { настроим окончания } 1 : if N <> 0 then begin if idx = 3 then tmpS := tmpS + ' ' else if idx = 2 then tmpS := tmpS + 'и ' else tmpS := tmpS + 'а '; end; 2..6 : if N <> 0 then begin if idx = 3 then tmpS := tmpS + 'ов ' else if idx = 2 then tmpS := tmpS + 'а ' else tmpS := tmpS + ' '; end; else tmpS := ''; end; Result := Result + tmpS; end; if Result = '' then Result := 'ноль'; NumToStr := sSign + Result; end; var nS : LongInt; begin ReadLn(nS); WriteLn(nS, ' - ', NumToStr(nS)); Readln; end. должно работать 
Не нашли ответ?
Ответить на вопрос
Похожие вопросы