From: alex@alex.mhti.msk.su (Alex!)
Subj: "Cумма прописью". Претендент на лаконичность.
Если кому интересно - предлагаю самую короткую процедуру для выполнения
операции "сумма прописью", называется Sum2text, сумма - типа comp в копейках.
(Мож в сырце и не очень короткая, но вот то, что получается - весьма и весьма!
Будет время - перепишу на ASM. Мне это, правда, не нужно, но по приколу...)
Потом эту сумму удобно расколоть на строки вызовом типа:
var s:string;
...
s:=Sum2text(99999999999);
while s<>'' do
writeln(lSplit(s));
Я прогнал по ней вот этот тест.
uses Common;
var a:comp;
s:string;
f:text;
i:word;
begin
a:=0;
assign(f,'test');
rewrite(f);
for i:=1 to 1000 do begin
writeln(f,a:19:0,' ',sum2text(a));
write(#13,a:19:0);
a:=a+100100100100100.;
end;
close(f);
end.
Кстати, тест этот отлетел за 2 секунды (с мелочью) на 486DX-50
---
Звиняйте, если не сказал ничего умного.
P.S.
Тут вот вопросы из зала поступили:
Ruslan Nurislamow пишет:
> > Если кому интересно
> Даже очень интересно !
О! Хоть кому-то интересно!
> но вот чего я не понял - вызываются несколько процедур, которых нет в
> примере. LowCaseR (или что-то вроде того) - это я понял, а вот еще одна...
^^^^^^^^
Точнее UpCaseR - чтоб первую букву строки заглавной сделать.
> убейте, не помню как ее зовут... нет ее и я не понял кто она такая
> если не трудно - скажи-а ?
TRIM() - пролезла, зараза! Убью нафиг! Это из TPRO - обрезает пробелы в начале
и в конце строки. Нужна для проверки, не пустая ли это строка. Но можно и без
нее обойтись. Доберусь до текста - перепишу нафиг!
---
А вообще-то мне спать пора. А если че надо, так мылом.
Алексей А. Громак =>> alex@alex.mhti.msk.su, 2:5020/18.28
Звонить бесполезно когда я не дома.
А вообще-то мне спать пора. А если че надо, так мылом.
|