Составить проект, который при введении числа будет генерировать его текстовое
представление, например, 2035 – «две тысячи тридцать пять».
Составить проект, который при введении числа будет генерировать его текстовое
представление, например, 2035 – «две тысячи тридцать пять».
Это называется “прописью”.
Гугл выдает кучу вариантов, например,
Запись числа прописью - Программирование на языке Паскаль - Каталог статей - Неверов Евгений Викторович
выдрал откуда-то из тьмы веков такое решение
function currency2Str (value: double): string;
const hundreds: array [0..9] of string = ('',' сто',' двести',' триста',' четыреста',' пятьсот',' шестьсот',' семьсот',' восемьсот',' девятьсот');
tens: array [0..9] of string = ('','',' двадцать',' тридцать',' сорок',' пятьдесят',' шестьдесят',' семьдесят',' восемьдесят',' девяносто');
ones: array [0..19] of string = ('','','',' три',' четыре',' пять',' шесть',' семь',' восемь',' девять',' десять',' одиннадцать',' двенадцать',
' тринадцать',' четырнадцать',' пятнадцать',' шестнадцать',' семнадцать',' восемнадцать',' девятнадцать');
razryad: array [0..6] of string = ('',' тысяч',' миллион',' миллиард',' триллион',' квадриллион',' квинтиллион');
var s: string; i: integer; val: int64;
function shortNum(s: string; raz: integer): string;
begin
Result:=hundreds[StrToInt(s[1])]; if StrToInt(s)=0 then Exit;
if s[2]<>'1' then begin
Result:=Result+tens[StrToInt(s[2])];
case StrToInt(s[3]) of
1: if raz=1 then Result:=Result+' одна' else Result:=Result+' один';
2: if raz=1 then Result:=Result+' две' else Result:=Result+' два';
else Result:=Result+ones[StrToInt(s[3])];
end;
Result:=Result+razryad[raz];
case StrToInt(s[3]) of
0,5,6,7,8,9: if raz>1 then Result:=Result+'ов';
1: if raz=1 then Result:=Result+'а';
2,3,4: if raz=1 then Result:=Result+'и' else if raz>1 then Result:=Result+'а';
end;
end else begin
Result:=Result+ones[StrToInt(Copy(s,2,2))];
Result:=Result+razryad[raz];
if raz>1 then Result:=Result+'ов';
end;
end;
begin
val:=Trunc(value);
if val=0 then begin Result:='ноль'; Exit; end;
s:=IntToStr(val); Result:=''; i:=0;
while Length(s)>0 do begin
Result:=shortNum(Copy('00'+s,Length('00'+s)-2,3),i)+Result;
if Length(s)>3 then s:=Copy(s,1,Length(s)-3) else s:='';
inc(i);
end;
Result := Trim(Result)
end;
для проверки киньте Button1, Edit1 и Label1
в на клик кнопки код:
Код:
Label1.Caption := currency2Str( StrToFloat(edit1.Text) );
p.s. копирайт на код не мой. откуда-то выдрал. откуда, сорри, уже не помню…
суть в том что на делфи, а значит интерфейс и до 4-х значного числа
Так просто поле ввода добавить и по кнопке вызвать функцию )
@Dokar , выше я привёл функцию. И даже описал как её использовать в Delphi
поле ввода и кнопку не сложно кинуть на форму.
правда, судя по коду, там и до квинтиллиона числа поддерживаются (ну, т.е. больше, чем четыре разряда ;))
Благодарю, позже проверю просто поздно уже
Да да я всё вижу. Ещё раз спасибо!