Перейти к содержимому

razrabotchik

razrabotchik

Регистрация: 20.06.2007, 10:54
Offline Активность: 01.03.2010, 14:04
-----

В теме: ПРОФЕССИОНАЛЬНЫЙ ПРОГРАММИСТ РАЗРАБОТЧИК

10.08.2009, 10:02:39

Разработаю программное обеспечение

В теме: Сумма прописью

02.07.2009, 11:47:38

//
// Функция MoneyToString по значению вещественного числа
// генерирует строковое представление денежной суммы.


unit sumprops;

interface

function MoneyToString(S:Currency; kpk:boolean; usd:boolean):string;
// Функция по значению вещественного числа класса Currency
// генерирует строковое представление денежной суммы, типа:
// '90235.03' -> 'девяносто тысяч двести тридцать пять тенге 03 тиын' .
// Причем строковое представление денежной суммы может произовидиться
// либо в тенге и тиынах, либо в долларах США и центах США.
// Параметры :
// S - вещественное число, по значению которого надо сгенерировать
// сумму прописью;
// kpk =True - печать копеек цифрой,
// =False - печать копеек прописью;
// usd =True - печать суммы в долларах США и центах США ,
// =False - печать суммы в тенге и тиынах.

function Line2Win(Line: string; WinLen: byte): string;


implementation

uses SysUtils, inifiles;

const m1: array [1..9] of string
=('один ','две ','три ','четыре ','пять ','шесть ','семь ','восемь ','девять ');
const f1: array [1..9] of string
=('одна ','две ','три ','четыре ','пять ','шесть ','семь ','восемь ','девять ');
const n10: array [1..9] of string
=('десять ','двадцать ','тридцать ','сорок ','пятьдесят ','шестьдесят ',
'семьдесят ','восемьдесят ','девяносто ');
const first10: array [11..19] of string
=('одиннадцать ','двенадцать ','тринадцать ','четырнадцать','пятнадцать ',
'шестнадцать ','семнадцать ','восемнадцать ','девятнадцать ');
const n100: array [1..9] of string
= ('сто ','двести ','триста ', 'четыреста ','пятьсот ','шестьсот ','семьсот ',
'восемьсот ','девятьсот ');
const kop: array [1..3] of string = ('тиын','тиын','тиын');//'копейка','копейки','копеек'
rub: array [1..3] of string = ('тенге ','тенге ','тенге ');//'рубль ','рубля ','рублей '
tsd: array [1..3] of string = ('тысяча ','тысячи ','тысяч ');
mln: array [1..3] of string = ('миллион ','миллиона ','миллионов ');
mrd: array [1..3] of string = ('миллиapд ','миллиаpдa ','миллиapдoв');
trl: array [1..3] of string = ('триллион ','триллионa ','триллионoв');
cnt: array [1..3] of string = ('тысяча ','тысячи ','тысяч ');

const cent: array [1..3] of string = ('десятых','десятых','десятых');//('цент США','цента США','центов США');
doll: array [1..3] of string = ('','целых ','');//('доллар ','доллара ','долларов ');

function Triada(I,n:Integer;k:boolean;usd:boolean):string;
var a,gender,sfx:integer;
begin
Result:='';
sfx:=3;
if n=2 then gender:=0 else gender:=1;

a:= I div 100;
if (a>0)
then begin
Result:=Result+n100[a];
I:=I-a*100;
end;

if (I>19)
then begin
a:= I div 10;
if (a>0)
then begin
Result:=Result+n10[a];
I:=I-a*10;
if I>0 then
begin
if k then gender:=0;
if gender=1 then Result:=Result+m1[I]
else Result:=Result+f1[I];
case I of
1: sfx:=1;
2..4: sfx:=2;
5..9: sfx:=3;
end;
end;
end;
end
else begin
case I of
1:begin
if k then gender:=0;
if gender=1 then Result:=Result+m1[I]
else Result:=Result+f1[I];
sfx:=1;
end;
2..4:begin
if k then gender:=0;
if gender=1 then Result:=Result+m1[I]
else Result:=Result+f1[I];
sfx:=2;
end;
5..9:begin
if k then gender:=0;
if gender=1 then Result:=Result+m1[I]
else Result:=Result+f1[I];
sfx:=3;
end;
10:begin
Result:=Result+n10[1];
sfx:=3;
end;
11..19:begin
Result:=Result+first10[I];
sfx:=3;
end;
end;
end;


//Продолжение кода
case n of
1: if not k then
if usd then
result:=result+doll[sfx]
else
Result:=Result+rub[sfx]
else
if usd then
result:=result+cent[sfx]
else
Result:=Result+kop[sfx];
2: if not k then
Result:=Result+tsd[sfx]
else
if usd then
result:=result+cent[sfx]
else
Result:=Result+kop[sfx];
3: if not k then
Result:=Result+mln[sfx]
else
if usd then
result:=result+cent[sfx]
else
Result:=Result+kop[sfx];
4: if not k then
Result:=Result+mrd[sfx]
else
if usd then
result:=result+cent[sfx]
else
Result:=Result+kop[sfx];
5: if not k then
Result:=Result+trl[sfx]
else
if usd then

result:=result+cent[sfx]
else
Result:=Result+kop[sfx];
end;
end; // function Triada(I,n:Integer;k:boolean;usd:boolean):string;

function TriadaK(I:integer;kpk:boolean;usd:boolean):string;
var sfx,H:integer;
begin
if kpk then
begin
Result:='';
sfx:=3;
H:=(I mod 10);
case H of
1: sfx:=1;
2..4: sfx:=2;
end;
if (I in [11..19]) then sfx:=3;
if usd then
begin
if I<10 then Result:='0'+IntToStr(I)+' '+cent[sfx]
else Result:=IntToStr(I)+' '+cent[sfx];
end
else
begin
if I<10 then Result:='0'+IntToStr(I)+' '+kop[sfx]
else Result:=IntToStr(I)+' '+kop[sfx];
end;
end
else
begin
if i=0 then
if usd then
result:='' //result:='00 центов США' Я заменил
else
result:='00 копеек'
else
result:=triada(i,1,true,usd);
end;
end; // function TriadaK(I:integer;kpk:boolean;usd:boolean):string;


function MoneyToString(S:Currency; kpk:boolean; usd:boolean):string;
var I,H:LongInt;
V:string;
f,l:String;
s1:Currency;
dH: Currency;
begin
V:='';
s1:=S;

dH:=1e12;
I:=Trunc(S/dH);
if (I>0)
then begin
V:=Triada(I,5,false,usd);
S:=S-Trunc(S/dH)*dH;
end;

dH:=1000000000;
I:=Trunc(S/dH);
if (I>0)
then begin
V:=V+Triada(I,4,false,usd);
S:=S-Trunc(S/dH)*dH;
end;

H:=1000000;
I:=Trunc(S/H);
if (I>0)
then begin
V:=V+Triada(I,3,false,usd);
S:=S-Trunc(S/H)*H;
end;

H:=1000;
I:=Trunc(S/H);
if (I>0)
then begin
V:=V+Triada(I,2,false,usd);
S:=S-Trunc(S/H)*H;
end;

H:=1;
I:=Trunc(S/H);
if (I>0)
then begin
V:=V+Triada(I,1,false,usd);
S:=S-Trunc(S/H)*H;
end
else
if usd then
v:=v+doll[3]
else
V:=V+rub[3];

I:=Trunc(S*100);
V:=V+TriadaK(I,kpk,usd);
if s1 < 1 then V:='ноль '+V;
f:=AnsiUpperCase(Copy(V,1,1));
l:=Copy(V,2,256);
V:=f+l;
Result:=V;
end; // function MoneyToString(S:Currency; kpk:boolean; usd:boolean):string;

function Line2Win(Line: string; WinLen: byte): string;
Var
LineStart, LineEnd: string;

function LastPos(SS, S: string): byte;
Var TempPos: byte;
Begin
// TempPos:=0;
Repeat
TempPos:=Pos(SS, S);
FillChar(S[TempPos], Length(SS), '_');
Until Pos(SS, S)=0;
LastPos:=TempPos;
End; // function LastPos(SS, S: string): byte;

Begin
If Length(Line)<=WinLen then Line2Win:=Line
Else
Begin
LineStart:=Copy(Line, 1, 3);
LineEnd:=Copy(Line, LastPos('\', Line), Length(Line)-LastPos('\',
Line)+1);
If (Length(LineStart)+Length(LineEnd)+2) >= WinLen then
Line2Win:=LineStart+'..'+LineEnd
Else
Line2Win:=LineStart+
Copy(Line, 4,
Trunc((WinLen-(Length(LineStart)+Length(LineEnd)))/2)-1)+'..'+
Copy(Line, LastPos('\',
Line)-Trunc((WinLen-(Length(LineStart)+Length(LineEnd)))/2),
Trunc((WinLen-(Length(LineStart)+
Length(LineEnd)))/2)-1)+LineEnd;
end;
End; // function Line2Win(Line: string; WinLen: byte): string;

end.

В теме: Требуется программисты по совместительству или удалено

22.05.2009, 14:48:24

Знание eMbedded Visual C++ 4.0.

Знание eMbedded Visual C++ 4.0.

В теме: Требуется программисты по совместительству или удалено

21.05.2009, 16:41:37

Если имеете опыт разработки eMbedded Visual C++ 4.0.
Звоните или скидывайте данные на e-mail. я могу сам перезвонить
Оплата гарантируется тех.задания готово.

Знание eMbedded Visual C++ 4.0.


В теме: Требуется программисты по совместительству или удалено

21.05.2009, 16:32:52

e-mail: at_developer@mail.ru

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.