banjalukaforum.com https://banjalukaforum.com/ |
|
Dijeljenje... https://banjalukaforum.com/viewtopic.php?f=18&t=11655 |
Stranica 1 od 1 |
Autoru: | [KS] [ 20 Jan 2005, 16:32 ] |
Tema posta: | Dijeljenje... |
Hajde malo prokomentarisite ovaj kod (Pascal). Ovo je program za dijeljenje na beskonacno decimala (ja sam ga testirao na milijardu decimala). Znam da ima mana ali zato prokomentarisite. Jedino sto mi se ne svidja sto je brojac longint (moze brojati do 3*10^9 i jos nesto i onda se resetuje na -3*10^9 i broji dalje do 3*10^9). Ali ako bi se radile neke vece matematicke kalkulacije moglo bi se i to prepraviti ![]() Kod: program divider;
uses wincrt; var x1,x2,l1,l2,l3,z,l:integer; b,d,x,xf:longint; resultat:string; fin:boolean; begin { X je broj decimala rezultatnog broja B je broj koji se dijeli D je broj s kojim se dijeli X1 je broj ispisanih decimala X2 je takodje broj ispisanih decimala XF je ciljni broj decimala } x:=0; x1:=0; x2:=0; l1:=-1000; l2:=-1001; l3:=-1002; Write('Broj koji zelite da dijelite: '); readln(b); Write('Broj sa kojim zelite da dijelite: '); readln(d); { Write('Broj decimala: '); readln(xf); } l:=(b mod d)*10; if (b mod d)*d=b then fin:=true; z:=l div d; l:=(l-(z*d))*10; inc(x); writeln; writeln(b div d,'.'); writeln; write(z); inc(x1); inc(x2); while (fin<>true) { and (x<=xf) } do begin l3:=l2; l2:=l1; l1:=l; z:=l div d; l:=(l-(z*d))*10; inc(x); write(z); inc(x1); inc(x2); if x1=10 then begin write(' '); x1:=0; end; if x2=60 then begin write(' - ',x); writeln; x2:=0; end; if (l3=l2) and (l2=l1) and (l1=l) then begin writeln; writeln; writeln('Izracunavanje broja zavrseno!'); writeln('Zadnja decimala se vjerovatno ponavlja u beskonacnost!'); writeln('Broj izracunatih decimala: ',x); fin:=true; end; if l=0 then begin writeln; writeln; writeln('Izracunavanje broja zavrseno!'); writeln('Broj izracunatih decimala:',x); fin:=true; end; end; end. |
Autoru: | Vertygo [ 21 Jan 2005, 02:28 ] |
Tema posta: | |
Kod: <[KS]> unesi 22/7
<[KS]> stalno se ponavljaju cifre <Vertygo> koliko mu treba <[KS]> ja sam napravio da prepozna ako se ponavlja jedna cifra <[KS]> npr 10/3 <[KS]> 3.333333 <[KS]> ali 22/7 <[KS]> 3.147851478514785 <[KS]> tako nesto <Vertygo> za 22/7 <Vertygo> ;) ? <[KS]> meni trebalo skoro 48 sati <[KS]> da ga izracunam na milijardu cifara ehehe 48 saaati ![]() ![]() |
Autoru: | [KS] [ 21 Jan 2005, 12:30 ] |
Tema posta: | Pa... |
Pa dobro testirao sam program ![]() Ako neko zna neka dva broja koja kad se podijele imaju milijardu ili milion ili sto hiljada i bilo koji veci broj decimala. Neka proba da ih podijeli s ovim programom, ili neka ih postuje ovde ja cu ih podijelit ![]() |
Autoru: | [KS] [ 29 Jan 2005, 01:33 ] |
Tema posta: | Divider+ za DOS |
Ovaj program se koristi iz DOS prompta i NEKOLIKO puta je brzi od originalnog. Takodje sam ga ja napisao i kompajlirao pod Turbo Pascal 7 for Dos. Koristi se kao div djeljenik djelilac file Zaboravio sam reci da ovaj program pise izlaz u fajl. (npr. div 10 3 fajl.txt ce podijeliti 10/3 i ispisati izlaz u C:\fajl.txt) Kod: program divider;
uses crt; var x1,x2,l1,l2,l3,z,l,code:integer; b,d,x,xf:longint; resultat:string; fin:boolean; fajl:text; begin { X je broj decimala rezultatnog broja B je broj koji se dijeli D je broj s kojim se dijeli X1 je broj ispisanih decimala X2 je takodje broj ispisanih decimala XF je ciljni broj decimala } x:=0; x1:=0; x2:=0; l1:=-1000; l2:=-1001; l3:=-1002; val(ParamStr(1),b,code); val(ParamStr(2),d,code); Assign(fajl,'C:\'+ParamStr(3)); Rewrite(fajl); { Write('Broj decimala: '); readln(xf); } l:=(b mod d)*10; if (b mod d)*d=b then fin:=true; z:=l div d; l:=(l-(z*d))*10; inc(x); writeln(fajl,''); writeln(fajl,b div d,'.'); writeln(fajl,''); write(fajl,z); inc(x1); inc(x2); while (fin<>true) { and (x<=xf) } do begin l3:=l2; l2:=l1; l1:=l; z:=l div d; l:=(l-(z*d))*10; inc(x); write(fajl,z); inc(x1); inc(x2); if x1=10 then begin write(fajl,' '); x1:=0; end; if x2=60 then begin write(fajl,' - ',x); writeln(fajl,''); x2:=0; end; if (x mod 5000000=0) then writeln('Decimala: ',x); if (l3=l2) and (l2=l1) and (l1=l) then begin writeln(fajl,''); writeln(fajl,''); writeln('Izracunavanje broja zavrseno!'); writeln('Zadnja decimala se vjerovatno ponavlja u beskonacnost!'); writeln('Broj izracunatih decimala: ',x); fin:=true; end; if l=0 then begin writeln; writeln; writeln('Izracunavanje broja zavrseno!'); writeln('Broj izracunatih decimala: ',x); fin:=true; end; end; close(fajl); end. 70 miliona decimala je izracunao za manje od minute ali je fajl tezak 89 MB! Ebiga ja tu nemogu nista. Hajde ako neko testira ili ima ideju, ili pronadje nesto, zeli da izmjeni, nek javi. |
Autoru: | [KS] [ 30 Jan 2005, 10:50 ] |
Tema posta: | ... |
Najnoviji breaktrough. Prvom programu je trebalo 48 sati za milijardu decimala a ovaj radi milijardu na 20 minuta sto ce reci 3 milijarde na sat vremena!!! Jesam pametaaaaan ![]() Kod: program divider;
uses crt,windos; var ti,tl,t,x1,x2,l1,l2,l3,z,l,code,code1,fs:integer; b,d,x,xf:longint; resultat,o,o1:string; fin:boolean; fajl:text; fsajz: file of byte; begin { X je broj decimala rezultatnog broja B je broj koji se dijeli D je broj s kojim se dijeli X1 je broj ispisanih decimala X2 je takodje broj ispisanih decimala XF je ciljni broj decimala } x:=0; x1:=0; x2:=0; l1:=-1000; l2:=-1001; l3:=-1002; val(ParamStr(1),b,code); val(ParamStr(2),d,code); Assign(fajl,ParamStr(3)); Assign(fsajz,ParamStr(3)); Rewrite(fajl); Reset(fsajz); { Write('Broj decimala: '); readln(xf); } l:=(b mod d)*10; if (b mod d)*d=b then fin:=true; z:=l div d; l:=(l-(z*d))*10; inc(x); writeln(fajl,''); writeln(fajl,b div d,'.'); writeln(fajl,''); write(fajl,z); inc(x1); inc(x2); while (fin<>true) { and (x<=xf) } do begin l3:=l2; l2:=l1; l1:=l; z:=l div d; l:=(l-(z*d))*10; inc(x); write(fajl,z); inc(x1); inc(x2); if x1=10 then begin write(fajl,' '); x1:=0; end; if x2=60 then begin write(fajl,' - ',x); writeln(fajl,''); x2:=0; end; if (x mod 1000000=0) then begin str(x,o); tl:=length(o); o1:=''; for ti:=tl downto 1 do o1:=o1+o[ti]; o:=o1; o1:=''; for ti:=1 to tl do begin o1:=o1+o[ti]; if ti mod 3=0 then o1:=o1+'.'; end; o:=o1; o1:=''; tl:=length(o); if o[tl]='.' then o[tl]:=' '; for ti:=tl downto 1 do o1:=o1+o[ti]; clrscr; writeln('Decimala: ',o1); writeln('Fajl: ',FileSize(fsajz)/1024/1024:0:2,' MB.'); end; if (l3=l2) and (l2=l1) and (l1=l) then begin writeln(fajl,''); writeln(fajl,''); writeln('Izracunavanje broja zavrseno!'); writeln('Zadnja decimala se vjerovatno ponavlja u beskonacnost!'); writeln('Broj izracunatih decimala: ',x); fin:=true; end; if l=0 then begin writeln; writeln; writeln('Izracunavanje broja zavrseno!'); writeln('Broj izracunatih decimala: ',x); fin:=true; end; end; close(fajl); end. |
Stranica 1 od 1 | Sva vremena su u UTC [ DST ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |