[ BlackSnake @ 22.12.2003. 12:27 ] @
Pozdrav, Ja sam početnik u C++ i imam problem sa prevođenjem koda za izračunavanje broja Pi na broj decimala prema želji. Koristim Dev-C++ ver.4.9.8.0 Prvo otvaram novu source datoteku u nju umetnem tj. kopiram priloženi source, pa zatim sa F9 pokrenem compile and run. Nakon nekog vremena dobijem poruku da imam greške i pominju se linije 31, 5, 2, 23 i 40. Primjetio sam da kod mene, u poddirektoriju sys, ne postoje datoteka times.h nego postoji time.h i još neke slične. Takođe, odmah mi se otvori idatoteka iostream.h i pokazuje na redak gdje se poziva datoteka backward_warning.h PS: Molio bih da mi se Leka ne javlja Evo source slijedi: //////////////////////////////////////////////////////////////////////////////// // pi 2.26 Dec 14 1999 // author: elephant <elephant AT linux DOT net DOT cn> #include <iostream.h> #include <math.h> #include <sys/times.h> void outputvalue(long long *value,long number) { long a,i,j; cout<<value[0]<<".\n"; cout.fill('0'); for (i=1;i<=number/12;i++) { cout.width(12); cout<<value; if (!(i%8)) cout<<"\n"; } cout.width(1); for (j=1;j<=number%12;j++) { long long last=value; for (a=0;a<12-j;a++) last=last/10; cout<<last%10; } cout<<"\n"; } int main(int argc,char **argv) { long number; cout<<"digits of pi you are expecting: "; cin>>number; if ((number>1000000)||(number<100)) { cout<<"sorry, but I expect it between 100 and 1000000.\n"; return(-1); } clock_t runtime=times(0); long a,i,j; long array=number/12+3; long long *base=new long long[array+1]; long long *calc=new long long[array+1]; long long *total=new long long[array+1]; for (long i=0;i<=array;i++) total=0; for (long step=0;step<2;step++) { long long remain; long head; long devide=(!step)?5:239; long devidedouble=devide*devide; remain=1; for (i=0;i<=array;i++) { base=remain/devide; // remain=(remain%devide)*1000000000000LL; /**/ remain=(remain-base*devide)*1000000000000LL; } long loop=long(number*log(10)/log(devide)+1); double ratio=log(devide)/log(10)/12; long start; for (i=0;i<=array;i++) calc=0; for (j=1;j<=loop;j++,j++) { start=long(j*ratio); remain=0; if (!(j&2)) for (i=start;i<=array;) { a=i; // calc+=remain/j; // remain=(remain%j)*1000000000000LL+base[++i]; /**/ long long q=remain/j; /**/ calc+=q; /**/ remain-=q*j; /**/ remain=remain*1000000000000LL+base[++i]; while (calc[a]>=1000000000000LL) { calc[a]-=1000000000000LL; calc[--a]++; } } else for (i=start;i<=array;) { a=i; // calc-=remain/j; // remain=(remain%j)*1000000000000LL+base[++i]; /**/ long long q=remain/j; /**/ calc-=q; /**/ remain-=q*j; /**/ remain=remain*1000000000000LL+base[++i]; while (calc[a]<0) { calc[a]+=1000000000000LL; calc[--a]--; } } remain=0; if (!step) { head=j/12+2; for (i=start;(i<=array)&&(i<=head);) { base=remain/devidedouble; // remain=(remain%devidedouble)*1000000000000LL+base[++i]; /**/ remain-=base*devidedouble; /**/ remain=remain*1000000000000LL+base[++i]; } } else for (i=start;i<=array;) { base=remain/devidedouble; // remain=(remain%devidedouble)*1000000000000LL+base[++i]; /**/ remain-=base*devidedouble; /**/ remain=remain*1000000000000LL+base[++i]; } } if (!step) { total[array]+=calc[array]*16; for (i=array-1;i>=0;i--) { total+=total[i+1]/1000000000000LL+calc*16; total[i+1]%=1000000000000LL; } } else { long long tail; total[array]-=calc[array]*4; for (i=array-1;i>=0;i--) { tail=total[i+1]%1000000000000LL; total+=total[i+1]/1000000000000LL-((tail<0)?1:0)-calc*4; total[i+1]=tail+((tail<0)?1000000000000LL:0); } } } runtime=times(0)-runtime; cout<<"I'm glad to tell you that pi is "; outputvalue(total,number); cout<<"after calculated for "<<(float)runtime/100<<" seconds.\n"; return(0); } |