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 :) Da cujem vase komentare....

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 :P ovo moze dobro doci nekom fizicaru ili slicno ;)

Autoru:  [KS] [ 21 Jan 2005, 12:30 ]
Tema posta:  Pa...

Pa dobro testirao sam program :) Ali 22/7 iznosi 3.142857142857.... dakle 142857 se stalno ponavlja tako da taj broj ima beskonacno cifara, ali ja sam testirao samo do milijardu...
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/