ПОМОЩ! СПЕШНО

8 отговора 328 прегледа
#1

ПОМОЩ! СПЕШНО

Здравейте колеги Моля Ви кажете как ще стане в едно поле от тип tEdit да напишем число и в друго поле от тип Tedit да се визуализира числото с думи???
Благодаря предварително

Отговор
в отговор на Nikolai #2

Re: ПОМОЩ! СПЕШНО

Мии... с функция която има входен параметър Integer, а изходния резултат е String. А самата функция трябва да я напишеш. Примери можеш да намериш в нета. Аз такава функция я писах първо няколко дена, а после я дооправях още много. Така че не ми се дава, а и правата са на фирмата. Виждал съм примери дори и за английски, така че потърси. Мисля, че дори във форума имаше подоби теми.

Редактирано от vido на

Отговор
в отговор на vido #3

Re: ПОМОЩ! СПЕШНО

Много ми помогна няма що!!! Благодаря

Отговор
в отговор на Nikolai #4

Re: ПОМОЩ! СПЕШНО

Сажалявам, но мога да ти помогна само с идея:

разделям числото (цялата част) на сотици (N mod 1000),
стохилядни ((N div 1000) mod 1000) и т.н. Отделните числа ( < 1000), си правиш функция която прави текста. Там идеята е подобна - разделяш на единици, десетици и стотици. Особенно е с 11 - 19. Проблем е и каде да сложиш "И", а също и множественото число. С дробната част е аналогично.

Отговор
в отговор на Nikolai #5

Re: ПОМОЩ! СПЕШНО

Можеш да дръпнеш това. Преди няколко години я правих за текстово показване на парични стойности, ако ти харесва, можеш да я поправяш както си искаш. Аз също съм работил доста по нея, но все пак съм ползвал и готов код от други.

Отговор
в отговор на TRN #6

Re: ПОМОЩ! СПЕШНО

Здравей TRN Благодаря ти сърдечно само че нямам достъп до Data.bg
Моля те публикувай го в отговора си!!!

Отговор
в отговор на Nikolai #7

Re: ПОМОЩ! СПЕШНО

Може да погледнеш и това:[линк]
Понеже нямаш достъп до Data.bg ето го и тук:
[code]
function Slovom(R:Real):string;
var Lv,St:integer;
const Ed:array[1..9]of string=('един','два','три','четири','пет','шест','седем','осем','девет');

function DesSlov(I:integer):string;
const Des='десет';
begin
If I<10 then begin Result:=Ed[ i ];Exit;end;
If I=10 then begin Result:=Des;Exit;end;
If I=11 then begin Result:=Concat('едина',Des);Exit;end;
If I<20 then begin Result:=Concat(Ed[ I mod 10],'на',Des);Exit;end;
If ((I mod 10)=0)
then Result:=Concat(Ed[I div 10],Des,' ')
else Result:=Concat(Ed[I div 10],Des,' и ',Ed[I mod 10]);
end;

function StoSlov(I:integer):string;
const Sto='сто';
begin
If I<100 then begin Result:=DesSlov(I);Exit;end;
If I<200 then Result:=Sto else
If I<300 then Result:='двеста 'else
If I<400 then Result:='триста 'else
Result:=Concat(Ed[I div 100],Sto,'тин ');
If ((I mod 100)=0)then Exit;
If ((I mod 10)=0)or((I mod 100)<20)
then Result:=Concat(Result,' и ',DesSlov(I mod 100))
else Result:=Concat(Result,' ',DesSlov(I mod 100));
end;

function HilSlov(I:integer):string;
var Hil,Sto:integer;
begin
If I<1000 then begin Result:=StoSlov(I);Exit;end;
Hil:=I div 1000;Sto:=I mod 1000;
If Hil=1
then begin
If Sto=0 then begin Result:='хиляда';Exit;end;
If (((Sto mod 10)=0)or(Sto<20))and((Sto<=100)or((Sto mod 100)=0))
then begin Result:=Concat('хиляда и ',StoSlov(Sto));Exit;end;
Result:=Concat('хиляда ',StoSlov(Sto));
Exit;
end;
If Hil=2
then begin
If Sto=0 then begin Result:=Concat('две хиляди');Exit;end;
If (((Sto mod 10)=0)or(Sto<20))and((Sto<=100)or((Sto mod 100)=0))
then begin Result:=Concat('две хиляди и ',StoSlov(Sto));Exit;end;
Result:=Concat('две хиляди ',StoSlov(Sto));
Exit;
end;
If Sto=0 then begin Result:=Concat(StoSlov(Hil),' хиляди');Exit;end;
If (((Sto mod 10)=0)or(Sto<20))and((Sto<=100)or((Sto mod 100)=0))
then begin Result:=Concat(StoSlov(Hil),' хиляди и ',StoSlov(Sto));Exit;end;
Result:=Concat(StoSlov(Hil),' хиляди ',StoSlov(Sto));
end;

function MilSlov(I:integer):string;
var Mil,Hil:integer;
begin
If I<1000000 then begin Result:=HilSlov(I);Exit;end;
Mil:=I div 1000000;Hil:=I mod 1000000;
If Mil=1
then begin
If Hil=0
then Result:='един милион '
else Result:=Concat('един милион и ',HilSlov(Hil));
Exit;
end;
If Hil=0 then begin Result:=Concat(StoSlov(Mil),' милиона ');Exit;end;
If ((Hil div 1000)>0)
then Result:=Concat(StoSlov(Mil),' милиона ',HilSlov(Hil))
else Result:=Concat(StoSlov(Mil),' милиона и ',HilSlov(Hil));
end;

begin
If Abs(R)>=1000000000 then begin Str(R:16:2,Result);Result:=Result+' лв.';Exit;end;
Lv:=Trunc(Abs(R)); St:=Round((Abs(R)-Trunc(Abs(R)))*100);
Result:=' лв. '+Format('%2.2d',[St])+' ст.';
If Lv=0 then begin Result:='нула'+Result;Exit;end;
If R>0
then Result:=MilSlov(Lv)+Result
else Result:='минус '+MilSlov(Lv)+Result;
end;

[/code]

Не съм го писал аз и ако има проблеми ще трябва сам да си ги оправяш.

Редактирано от SAGE_BS на

Отговор
в отговор на Nikolai #8

Re: ПОМОЩ! СПЕШНО

Напиши поне дин email за връзка, или се регистрирай и си въведи данните.
Не ми се иска форума да го пълним с код.

Отговор
в отговор на Nikolai #9

Re: ПОМОЩ! СПЕШНО

Ако не си се оправил, дай майл да ти пратя нещо примерно...

Отговор