NemBen Posted Március 30, 2008 Share Posted Március 30, 2008 Hétvégén írtam egy unitot amivel LONGINTnél nagyobb (nemnegyatív, egész) számokat lehet kezelni. Lehet tanulmányzni és ötleteket adni a továbbfejlesztéshez Jelenlegi verzó: 1.0 unit nsz; interface function add(s,t:string):string; {=s+t} function kiv(s,t:string):string; {=s-t} function oszt(s,t:string):string; {=s div t} function mar(s,t:string):string; {=s mod t} function szor(s,t:string):string; {=s*t} function hatv(s,t:string):string; {=s**t} implementation function add(s,t:string):string; var a,b,c,d,e,f,g,i,j,k:integer; var u,v:string; begin a:=0; b:=0; c:=0; d:=0; e:=0; f:=0; g:=0; i:=0; j:=0; k:=0; u:=''; v:=''; i:=length(s); j:=length(t); if i>=j then begin for a:=i downto 1 do begin val(s[a],c,d); val(t[a-(i-j)],e,f); g:=c+e+k; if g>9 then begin k:=1; g:=g-10; end else k:=0; str(g,v); insert(v,u,1); end; end else begin for a:=j downto 1 do begin val(s[a-(j-i)],c,d); val(t[a],e,f); g:=c+e+k; if g>9 then begin k:=1; g:=g-10; end else k:=0; str(g,v); insert(v,u,1); end; end; if k>0 then insert('1',u,1); add:=u; end; function kiv(s,t:string):string; var a,b,c,d,e,f,g,i,j,k:integer; var u,v:string; begin a:=0; b:=0; c:=0; d:=0; e:=0; f:=0; g:=0; i:=0; j:=0; k:=0; u:=''; v:=''; i:=length(s); j:=length(t); if i>=j then begin for a:=i downto 1 do begin val(s[a],c,d); val(t[a-(i-j)],e,f); g:=c-e-k; if g<0 then begin k:=1; g:=g+10; end else k:=0; str(g,v); insert(v,u,1); end; end else begin for a:=j downto 1 do begin val(s[a-(j-i)],c,d); val(t[a],e,f); g:=c-e-k; if g<0 then begin k:=1; g:=g+10; end else k:=0; str(g,v); insert(v,u,1); end; end; repeat if u[1]='0' then delete(u,1,1); until (u[1]<>'0') or (u=''); if u='' then u:='0'; kiv:=u; end; function mar(s,t:string):string; var c,d,e,f,i,j:integer; begin if length(s) If length(s)=length(t) then begin for i:=1 to length(s) do begin val(s,c,d); val(t,e,f); if c begin mar:=s; j:=0; break; end else j:=1; end; end; if j=1 then mar:=kiv(s,szor(oszt(s,t),t)); end; function szor(s,t:string):string; var w,x:string; begin w:='0'; x:='0'; if length(s)>length(t) then begin repeat w:=add(s,w); x:=add(x,'1'); until x=t; end else begin repeat w:=add(t,w); x:=add(x,'1'); until x=s; end; szor:=w; end; function oszt(s,t:string):string; var x,y:string; var c,d,e,f,i,j:integer; begin x:='0'; if length(s) If length(s)=length(t) then begin for i:=1 to length(s) do begin val(s,c,d); val(t,e,f); if c begin j:=1; break; end else j:=0; end; end; if length(s)>length(t) then j:=0; if j=0 then begin repeat s:=kiv(s,t); x:=add(x,'1'); If length(s)=length(t) then begin for i:=1 to length(s) do begin val(s,c,d); val(t,e,f); if c begin j:=1; break; end else j:=0; end; end; until (length(s) end; oszt:=x; end; function hatv(s,t:string):string; var y,z:string; begin y:='1'; z:='0'; repeat y:=szor(s,y); z:=add(z,'1'); until z=t; hatv:=y; end; end. NSZ.zip Idézés Link to comment Share on other sites More sharing options...
Markeee Posted Március 31, 2008 Share Posted Március 31, 2008 Jó lehet, de nem tudom értelmezni a kódot, mert mindent egymás alá írtál Később ezt javítsd és akkor olvashatóbb a kódod és mások is megértik. Egyébként szerintem jó Idézés Link to comment Share on other sites More sharing options...
NemBen Posted Március 31, 2008 Author Share Posted Március 31, 2008 Najo.. elkezdtem optmalizálni valamennyire a kódot.. Ja igenm itt azért nem olvasható redesen mert idézetbe írtam és nem kódba) Az új összeadás: function add(s,t:string):string; var a,b,c,d,g,i,k:integer; var u,v:string; begin a:=0; b:=0; c:=0; d:=0; g:=0; i:=0; k:=0; u:=''; v:=''; if length(s)<length(t) then i:=length(t) else i:=length(s); for a:=i downto 1 do begin if i=length(s) then begin val(s[a],b,d); val(t[a-(length(s)-length(t))],c,d); end else begin val(s[a-(length(t)-length(s))],b,d); val(t[a],c,d); end; g:=b+c+k; if g>9 then begin k:=1; g:=g-10; end else k:=0; str(g,v); insert(v,u,1); end; if k>0 then insert('1',u,1); add:=u; end; Idézés Link to comment Share on other sites More sharing options...
Markeee Posted Április 1, 2008 Share Posted Április 1, 2008 Így már azért láthatóbb Délután megnézem, hátha tanulok tőled valamit Idézés Link to comment Share on other sites More sharing options...
wer003 Posted Április 6, 2008 Share Posted Április 6, 2008 Üdv! Volna egy kérésem. Hallotam a "Barátságos számok"-ról. Azt mondják hogy ha ezt megcsinákljuk pascal-ba akkor a gép telejesen belassul, mert ő is lassan tudja kiszámolni. Valaki megtudja csinálni? Idézés Link to comment Share on other sites More sharing options...
NemBen Posted Április 6, 2008 Author Share Posted Április 6, 2008 Van barátságos számokra is programom. Majd felteszem azt is. De az nagy számokra tényleg nagyon lassú. Ezt a unitot szerintem nem érdemes hozzá használni, mivel valószínűleg csak lassítaná... Idézés Link to comment Share on other sites More sharing options...
Maister007 Posted November 24, 2010 Share Posted November 24, 2010 Én is csinálok most hasonló programit amihez kell a nagy szám csak én magam nak csináltam a programba ojat ami kezeli és nem unite és mellékesen 2 a 200 milliomodik hatványra is emeli de ez még csak az alap lessz az több isxDxD de ha már itt tartok ha írok egy programot mindegy hogy milyen ha van mondjuk egy integer változó benne és valaki nagyobb számot ad meg mint az amennyit bír akkor ugye kilép a program. nincs valami megoldás rá ijen rendesz szintű parancs vagy valami hogy ne zárjun be hanem írja ki hogy nagy és kérdeztessem újra vagy alami? mint a fájl kezelésnél a {$I} vagy mi amivel ugye meg lehet vizsgálni hogy van e hiba a fájl beolvasásánál tehát létezik e vagy nem. Idézés Link to comment Share on other sites More sharing options...
chiefa Posted December 19, 2010 Share Posted December 19, 2010 http://www.delphibasics.co.uk/RTL.asp?Name=Except Nézz körül a try except környékén Idézés Link to comment Share on other sites More sharing options...
jedlikp Posted Szeptember 18, 2018 Share Posted Szeptember 18, 2018 Hello ha a maximalis szamhoz ami (32 bit) integernel 32767, hozza adsz +1 akkor tulcsordul es maxilmalis negativ szam jon ki ami -32768. Ez alap beilittasnal nem okoz futasi hibat; Be lehet allitani hogy okkozzon: deplhi 10-re Project -> Options -> DElphi Compiler -> Compiling -> Runtime errors -> Overflow Checking -> true; oregeb delphire Project -> Options -> Compiler -> Overflow Checking Ebben az estben futas kozben hibakiiras jon letre. Ha a programba akarja kezelni akkor jo a try a:=b+c; except //hiba eseten ide kerul a vezerles end Idézés Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.