PDA

View Full Version : افزایش حافظه برنامه تبدیل عدد به نوشتار



computer-mag
سه شنبه 30 بهمن 1386, 22:04 عصر
برنامه ای در این سایت پیدا کردم که عدد را به نوشتار تبدیل می کرد که برنامه رو در ادامه گذاشتم ولی چون برنامه از نوع int64 استفاده می کنه تا عدد 2 میلیارد و خوره ای را بیشتر نمی تونه تبدیل کنه در صورتی که برنامه تا تریلیون رو پضتیبانی می کنه می خواستم ببینم چجوری میشه برنامه را ظرقیتش را بالا برد یعنی حتی بیشتر از تریلیون!من اصلا چیزی در این باره و این کار نمی دونم اگه لطف کنید کد رو اصلاح کنید و بزارید فکر کنم این کد وقتی اصلاح بشه به درد همه برنامه نویسای دلفی بخوره!پیشاپیش ممنون



function Add2Harf(i:int64):string;
const v=' æ ';
var
ok:boolean;
{___________________________________}
function yekan(y:byte):string;
begin
case y of
0:result:='';
1:result:='íß';
2:result:='Ïæ';
3:result:='Óå';
4:result:='åÇÑ';
5:result:='äÌ';
6:result:='ÔÔ';
7:result:='åÝÊ';
8:result:='åÔÊ';
9:result:='äå';
enD;
if result=''then ok:=false else ok:=true;
end;
{___________________________________}
function dahgan(y:byte):string;
begin
case y of
0:result:='';
1:result:='Ïå';
2:result:='ÈíÓÊ';
3:result:='Óí';
4:result:='åá';
5:result:='äÌÇå';
6:result:='ÔÕÊ';
7:result:='åÝÊÇÏ';
8:result:='åÔÊÇÏ';
9:result:='äæÏ';
enD;
if result=''then ok:=false else ok:=true;
end;
{___________________________________}
function sadgan(y:byte):string;
begin
case y of
0:result:='';
1:result:='íßÕÏ';
2:result:='ÏæíÓÊ';
3:result:='ÓíÕÏ';
4:result:='åÇÑÕÏ';
5:result:='ÇäÕÏ';
6:result:='ÔÔÕÏ';
7:result:='åÝÊÕÏ';
8:result:='åÔÊÕÏ';
9:result:='äåÕÏ';
enD;
if result=''then ok:=false else ok:=true;
end;
{___________________________________}
function dah(y:byte):string;
begin
case y of
0:result:='';
10:result:='Ïå';
11:result:='íÇÒÏå';
12:result:='ÏæÇÒÏå';
13:result:='ÓíÒÏå';
14:result:='åÇÑÏå';
15:result:='ÇäÒÏå';
16:result:='ÔÇäÒÏå';
17:result:='åÝÏå';
18:result:='åÌÏå';
19:result:='äæÒÏå';
enD;
if result=''then ok:=false else ok:=true;
end;
{___________________________________}
function seragham(si:smallint):string;
begin
result:='';
result:=sadgan(si div 100);
if ok then result:=result+v;
if((si mod 100)div 10) <> 1 then begin
result:=result+dahgan((si mod 100)div 10);
if ok then result:=result+v;
result:=result+yekan(si mod 10);
if not ok then result:=copy(result,1,length(result)-3);
End
else begin
result:=result+dah(si mod 100);
end;
if result='' then ok:=false else ok:=true;
end;
{___________________________________}
const
tr=' ÊÑíáíæä';
mr=' ãíáíÇÑÏ';
ml=' ãíáíæä';
hz=' åÒÇÑ';
begin
ok:=false;
result:=seragham(i div 1000000000000);
if ok then result:=result+tr+v;
result:=result+seragham((i mod 1000000000000)div 1000000000);
if ok then result:=result+mr+v;
result:=result+seragham((i mod 1000000000)div 1000000);
if ok then result:=result+ml+v;
result:=result+seragham((i mod 1000000)div 1000);
if ok then result:=result+hz+v;
result:=result+seragham(i mod 1000);
if not ok then result:=copy(result,1,length(result)-3);
if i=0 then result:='ÕÝÑ';
end;

champion
چهارشنبه 01 اسفند 1386, 00:01 صبح
اگه منظور شما نوعی بزرگتر از Int64 هست میتونید از LongLong استفاده کنید

computer-mag
جمعه 03 اسفند 1386, 20:16 عصر
خوب نوع Longlong هم مثل قبل شد!چون اگه دقت کنید LongLongهم از نوع int64 درست شده!حالا من موندم چه کار کنم کمککککککککککککککککککککککک کککککک:عصبانی++:

champion
جمعه 03 اسفند 1386, 21:48 عصر
در این صورت اگه اینقدر برات مهمه باید خودت دوباره بنویسی پیشنهاد میکنم خودت عدد وارد شده رو به صورت رشته دربیاری و بعد تعداد اون رو بشمار و نهایتا به حروف بنویس زیاد زمان نمیبره

computer-mag
جمعه 03 اسفند 1386, 23:44 عصر
اوه خدای من چرا به فکر خودم نرسید !!!!سعی می کنم بنویسم وقتی نوشتم میزارم اینجا تا همه هم کدشو بردارن!

mortezakiaee
شنبه 04 اسفند 1386, 11:09 صبح
من اینو قبلا نوشتم ببین این به دردت می خوره؟

ارقام منفی رو هم مینویسه

function ntt(var number:integer):string;
var s:string;
w:int64;
a,b,c:integer;
begin
w:=number;
a:= w mod 10;
b:= floor((w mod 100)/10);
c:= floor((w mod 1000)/100);

case a of
0: s:='';
1: s:='í˜';
2: s:='Ïæ';
3: s:='Óå';
4: s:='åÇÑ';
5: s:='äÌ';
6: s:='ÔÔ';
7: s:='åÝÊ';
8: s:='åÔÊ';
9: s:='äå';
end;
if (b<>0)and(a<>0) then s:= ' æ '+s;
case b of
0: s:=''+s;
1:begin
case a of
0: s:='Ïå';
1: s:='íÇÒÏå';
2: s:='ÏæÇÒÏå';
3: s:='ÓíÒÏå';
4: s:='åÇÑÏå';
5: s:='ÇäÒÏå';
6: s:='ÔÇäÒÏå';
7: s:='åÝÏå';
8: s:='åÌÏå';
9: s:='äæÒÏå'; end;
end;
2: s:='ÈíÓÊ'+s;
3: s:='Óí'+s;
4: s:='åá'+s;
5: s:='äÌÇå'+s;
6: s:='ÔÕÊ'+s;
7: s:='åÝÊÇÏ'+s;
8: s:='åÔÊÇÏ'+s;
9: s:='äæÏ'+s;
end;
if (c<>0)and ((b<>0) or (a<>0)) then s:=' æ '+ s;
case c of
0: s:=''+s;
1: s:='í˜ ÕÏ'+s;
2: s:='ÏæíÓÊ'+s;
3: s:='ÓíÕÏ'+s;
4: s:='åÇÑÕÏ'+s;
5: s:='ÇäÕÏ'+s;
6: s:='ÔÔÕÏ'+s;
7: s:='åÝÊÕÏ'+s;
8: s:='åÔÊÕÏ'+s;
9: s:='äåÕÏ'+s;
end;
result:=s;
end;

function NumberToText(Number:int64):string ;
var s:string;
w:Int64;
a:integer;
begin
w:=Number;
if w<0 then begin
Result:='˜ÓÑ ';
w:=-1*w; end;
a:=w mod 1000;
s:=ntt(a);
w:=floor(w/1000);
if w <> 0 then begin
a:=w mod 1000;
if (a <> 0) then
if s <> '' then
s:=ntt(a)+' åÒÇÑ æ '+s
else s:= ntt(a)+' åÒÇÑ ';
end;
w:=floor(w/1000);
if w <> 0 then begin
a:=w mod 1000;
if a <> 0 then
if s <> '' then
s:=ntt(a)+' ãíáíæä æ '+s
else s:= ntt(a)+' ãíáíæä ';
end;
w:=floor(w/1000);
if w <> 0 then begin
a:=w mod 1000;
if a <> 0 then
if s <> '' then
s:=ntt(a)+' ãíáíÇÑÏ æ '+s
else s:= ntt(a)+' ãíáíÇÑÏ ';
end;
w:=floor(w/1000);
if w <> 0 then begin
a:=w mod 1000;
if a <> 0 then
if s <> '' then
s:=ntt(a)+' åÒÇÑ ãíáíÇÑÏ æ '+s
else s:= ntt(a)+' åÒÇÑ ãíáíÇÑÏ ';
end;


result:=Result+s;

mortezakiaee
شنبه 04 اسفند 1386, 11:10 صبح
شرمنده مثل این که فونت فارسیش یکم بهم ریخته:اشتباه:. ولی منطقش خیلی ساده تر از اون اولیه. فانکشن اول اعداد سه رقمی رو مینویسه. فانکشن دوم سه تا سه تا جدا می کنه و موقعیتشو تشخیص می ده