PDA

Просмотр полной версии : программка


tokitofamily
02.04.2010, 15:00
вобшем нужно написать программку
вводиш число (цифрами )
а выводит значения словами
буду рад любому совету:)

Добавлено через 1 минуту
забыл сказать что язык С++

Developer
02.04.2010, 16:32
Это как то так?
Ввод: 1
Вывод: один

Ввод: 10
Вывод: десять

NewBorn
02.04.2010, 17:33
в экселе есть такой скрипт

tokitofamily
02.04.2010, 18:13
Это как то так?
Ввод: 1
Вывод: один

Ввод: 10
Вывод: десять

именно так но значения до 3*********

Proto
02.04.2010, 18:28
где то в инете скачивал для дела програмку для бух учета , попробуй погуглить

tokitofamily
02.04.2010, 20:06
тока как правильно задать параметры поиска

Добавлено через 1 час 24 минуты
не помогает мне гугль:(

J-Fobos
02.04.2010, 21:34
У меня тоже когда то была надобность в таком коде. Пару лет уже прошло, но получилось найти его у себя в записях. Код не мой, но где нашел уже не помню, автора к сожалению указать не могу.
Код легко расширяется под любые диапазоны чисел.
const
Mas1: array['0'..'9', 1..3] of string =
(('', '', ''),
('сто ', '', 'один '),
('двести ', 'двадцать ', 'два '),
('триста ', 'тридцать ', 'три '),
('четыреста ', 'сорок ', 'четыре '),
('пятьсот ', 'пятьдесят ', 'пять '),
('шестьсот ', 'шестьдесят ', 'шесть '),
('семьсот ', 'семьдесят ', 'семь '),
('восемьсот ', 'восемьдесят ', 'восемь '),
('девятьсот ', 'девяносто ', 'девять '));
Mas2: array['0'..'9'] of string =
('десять ', 'одиннадцать ', 'двенадцать ', 'тринадцать ',
'четырнадцать ', 'пятнадцать ', 'шестнадцать ', 'семнадцать ',
'восемнадцать ', 'девятнадцать ');
Mas3: array['1'..'2'] of string = ('одна ', 'две ');
Mas4: array['0'..'9', 1..4] of string =
(('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяча ', 'миллион ', 'миллиард '),
('', 'тысячи ', 'миллиона ', 'миллиарда '),
('', 'тысячи ', 'миллиона ', 'миллиарда '),
('', 'тысячи ', 'миллиона ', 'миллиарда '),
('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяч ', 'миллионов ', 'миллиардов '));

function GetRepresentationInWords(S: string): string;
var
i: Byte;
Str: PChar;
begin

Result := '';
if S = '' then
Exit;
for i := 1 to Length(S) do
if S[i] <> '0' then
Break;
if i = Length(S) + 1 then
begin
Result := 'Ноль';
Exit
end;
Str := @S[1];
while Length(S) mod 3 <> 0 do
Insert('0', S, 1);
for i := Length(S) div 3 downto 1 do
begin
if (Str[0] = '0') and (Str[1] = '0') and (Str[2] = '0') then
begin
Inc(Str, 3);
Continue;
end;
Result := Result + Mas1[Str[0], 1];
if Str[1] = '1' then
Result := Result + Mas2[Str[2]] + Mas4['0', i]
else
begin
Result := Result + Mas1[Str[1], 2];
if (i = 2) and (Str[2] in ['1'..'2']) then
Result := Result + Mas3[Str[2]]
else
Result := Result + Mas1[Str[2], 3];
Result := Result + Mas4[Str[2], i];
end;
Inc(Str, 3)
end;
SetLength(Result, Length(Result) - 1)

end;
Ну и пример использования
Memo1.Lines.Text := GetRepresentationInWords(IntToStr(2006));

зы: на с++ думаю переделать проблемы не составит?)

tokitofamily
02.04.2010, 23:55
J-Fobos, спасиб огромное попробую переделать:)