banjalukaforum.com

Dobrodošli na banjalukaforum.com
Danas je 19 Jul 2025, 22:46

Sva vremena su u UTC [ DST ]




Započni novu temu Odgovori na temu  [ 5 Posta ] 
Autoru Poruka
 Tema posta: Dijeljenje...
PostPoslato: 20 Jan 2005, 16:32 
OffLine
Početnik
Početnik

Pridružio se: 20 Jan 2005, 00:43
Postovi: 49
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.


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 21 Jan 2005, 02:28 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 12 Jul 2001, 01:00
Postovi: 457
Lokacija: Banjaluka
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 ;)

_________________
Ivan M.


Vrh
 Profil  
 
 Tema posta: Pa...
PostPoslato: 21 Jan 2005, 12:30 
OffLine
Početnik
Početnik

Pridružio se: 20 Jan 2005, 00:43
Postovi: 49
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 :)


Vrh
 Profil  
 
 Tema posta: Divider+ za DOS
PostPoslato: 29 Jan 2005, 01:33 
OffLine
Početnik
Početnik

Pridružio se: 20 Jan 2005, 00:43
Postovi: 49
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.


Vrh
 Profil  
 
 Tema posta: ...
PostPoslato: 30 Jan 2005, 10:50 
OffLine
Početnik
Početnik

Pridružio se: 20 Jan 2005, 00:43
Postovi: 49
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.


Vrh
 Profil  
 
Prikaži postove u poslednjih:  Poređaj po  
Započni novu temu Odgovori na temu  [ 5 Posta ] 

Sva vremena su u UTC [ DST ]


Ko je OnLine

Korisnici koji su trenutno na forumu: Nema registrovanih korisnika i 1 gost


Ne možete postavljati nove teme u ovom forumu
Ne možete odgovarati na teme u ovom forumu
Ne možete monjati vaše postove u ovom forumu
Ne možete brisati vaše postove u ovom forumu
Ne možete slati prikačene fajlove u ovom forumu

Pronađi:
Idi na:  
Powered by phpBB® Forum Software © phpBB Group
Hosting BitLab
Prevod - www.CyberCom.rs