/*******************************************************/ /* This program computes root(2)=1.41421356..... */ /*******************************************************/ /* This program creates automatically the following */ /* files: A.txt = m digits of root(2) (backward) */ /* D.txt = ( 2 - A*A ) (backward) */ /* B.txt = scratch file */ /* C.txt = scratch file */ /* E.txt = scratch file */ /* F.txt = scratch file */ /* G.txt = scratch file */ /* R.txt = m digits of root(2) <--ANSWER */ /*******************************************************/ /******* *******/ /******* 出力 File は R.txt です。 *******/ /******* *******/ /*******************************************************/ /******************************************************* Type 1 to compute 10 digit. Type 2 to compute 100 digit. Type 3 to compute 1000 digit. Type 4 to compute 10000 digit. Type 5 to compute 100000 digit. Type 0 to compute any digit. /*******************************************************/ #include #include /* for windows OS */ time_t tstart,tnow; int m=0; int x;int dtime; /* Function 01 A=1 */ int AONE(void){ char j;FILE *fpA;fpA=fopen("A.txt","w"); j='1';fputc(j,fpA);fclose(fpA);return 0;} /* Function 02 D=1 */ int DONE(void){ char j;FILE *fpD;fpD=fopen("D.txt","w"); j='1';fputc(j,fpD);fclose(fpD);return 0;} /* Function 03 E=0 */ int EZERO(void){ char j;FILE *fpE;fpE=fopen("E.txt","w"); j='0';fputc(j,fpE);fclose(fpE);return 0;} /* Function 04 C=10*A */ int A10C(void){ char j;FILE *fpA;FILE *fpC; fpA=fopen("A.txt","r");fpC=fopen("C.txt","w"); j='0';fputc(j,fpC); ONCEMORE: j=fgetc(fpA); if ( j == '1' ) goto NEXTSTEP;if ( j == '2' ) goto NEXTSTEP; if ( j == '3' ) goto NEXTSTEP;if ( j == '4' ) goto NEXTSTEP; if ( j == '5' ) goto NEXTSTEP;if ( j == '6' ) goto NEXTSTEP; if ( j == '7' ) goto NEXTSTEP;if ( j == '8' ) goto NEXTSTEP; if ( j == '9' ) goto NEXTSTEP;if ( j == '0' ) goto NEXTSTEP; fclose(fpA);fclose(fpC);return 0; NEXTSTEP: fputc(j,fpC);goto ONCEMORE;} /* Function 05 C=100*D */ int D100C(void){ char j;FILE *fpD;FILE *fpC; fpD=fopen("D.txt","r");fpC=fopen("C.txt","w"); j='0';fputc(j,fpC);fputc(j,fpC); ONCEMORE: j=fgetc(fpD); if ( j == '1' ) goto NEXTSTEP;if ( j == '2' ) goto NEXTSTEP; if ( j == '3' ) goto NEXTSTEP;if ( j == '4' ) goto NEXTSTEP; if ( j == '5' ) goto NEXTSTEP;if ( j == '6' ) goto NEXTSTEP; if ( j == '7' ) goto NEXTSTEP;if ( j == '8' ) goto NEXTSTEP; if ( j == '9' ) goto NEXTSTEP;if ( j == '0' ) goto NEXTSTEP; fclose(fpD);fclose(fpC);return 0; NEXTSTEP: fputc(j,fpC);goto ONCEMORE;} /* Function 06 A=C */ int CTOA(void){ char j;FILE *fpC;FILE *fpA; fpC=fopen("C.txt","r");fpA=fopen("A.txt","w"); ONCEMORE: j=fgetc(fpC); if ( j == '1' ) goto NEXTSTEP;if ( j == '2' ) goto NEXTSTEP; if ( j == '3' ) goto NEXTSTEP;if ( j == '4' ) goto NEXTSTEP; if ( j == '5' ) goto NEXTSTEP;if ( j == '6' ) goto NEXTSTEP; if ( j == '7' ) goto NEXTSTEP;if ( j == '8' ) goto NEXTSTEP; if ( j == '9' ) goto NEXTSTEP;if ( j == '0' ) goto NEXTSTEP; fclose(fpC);fclose(fpA);return 0; NEXTSTEP: fputc(j,fpA);goto ONCEMORE;} /* Function 07 D=C */ int CTOD(void){ char j;FILE *fpC;FILE *fpD; fpC=fopen("C.txt","r");fpD=fopen("D.txt","w"); ONCEMORE: j=fgetc(fpC); if ( j == '1' ) goto NEXTSTEP;if ( j == '2' ) goto NEXTSTEP; if ( j == '3' ) goto NEXTSTEP;if ( j == '4' ) goto NEXTSTEP; if ( j == '5' ) goto NEXTSTEP;if ( j == '6' ) goto NEXTSTEP; if ( j == '7' ) goto NEXTSTEP;if ( j == '8' ) goto NEXTSTEP; if ( j == '9' ) goto NEXTSTEP;if ( j == '0' ) goto NEXTSTEP; fclose(fpC);fclose(fpD);return 0; NEXTSTEP: fputc(j,fpD);goto ONCEMORE;} /* Function 08 E=C */ int CTOE(void){ char j;FILE *fpC;FILE *fpE; fpC=fopen("C.txt","r");fpE=fopen("E.txt","w"); ONCEMORE: j=fgetc(fpC); if ( j == '1' ) goto NEXTSTEP;if ( j == '2' ) goto NEXTSTEP; if ( j == '3' ) goto NEXTSTEP;if ( j == '4' ) goto NEXTSTEP; if ( j == '5' ) goto NEXTSTEP;if ( j == '6' ) goto NEXTSTEP; if ( j == '7' ) goto NEXTSTEP;if ( j == '8' ) goto NEXTSTEP; if ( j == '9' ) goto NEXTSTEP;if ( j == '0' ) goto NEXTSTEP; fclose(fpC);fclose(fpE);return 0; NEXTSTEP: fputc(j,fpE);goto ONCEMORE;} /* Function 09 F=C */ int CTOF(void){ char j;FILE *fpC;FILE *fpF; fpC=fopen("C.txt","r");fpF=fopen("F.txt","w"); ONCEMORE: j=fgetc(fpC); if ( j == '1' ) goto NEXTSTEP;if ( j == '2' ) goto NEXTSTEP; if ( j == '3' ) goto NEXTSTEP;if ( j == '4' ) goto NEXTSTEP; if ( j == '5' ) goto NEXTSTEP;if ( j == '6' ) goto NEXTSTEP; if ( j == '7' ) goto NEXTSTEP;if ( j == '8' ) goto NEXTSTEP; if ( j == '9' ) goto NEXTSTEP;if ( j == '0' ) goto NEXTSTEP; fclose(fpC);fclose(fpF);return 0; NEXTSTEP: fputc(j,fpF);goto ONCEMORE;} /* Function 10 E=D */ int DTOE(void){ char j;FILE *fpD;FILE *fpE; fpD=fopen("D.txt","r");fpE=fopen("E.txt","w"); ONCEMORE: j=fgetc(fpD); if ( j == '1' ) goto NEXTSTEP;if ( j == '2' ) goto NEXTSTEP; if ( j == '3' ) goto NEXTSTEP;if ( j == '4' ) goto NEXTSTEP; if ( j == '5' ) goto NEXTSTEP;if ( j == '6' ) goto NEXTSTEP; if ( j == '7' ) goto NEXTSTEP;if ( j == '8' ) goto NEXTSTEP; if ( j == '9' ) goto NEXTSTEP;if ( j == '0' ) goto NEXTSTEP; fclose(fpD);fclose(fpE);return 0; NEXTSTEP: fputc(j,fpE);goto ONCEMORE;} /* Function 11 D=F */ int FTOD(void){ char j;FILE *fpF;FILE *fpD; fpF=fopen("F.txt","r");fpD=fopen("D.txt","w"); ONCEMORE: j=fgetc(fpF); if ( j == '1' ) goto NEXTSTEP;if ( j == '2' ) goto NEXTSTEP; if ( j == '3' ) goto NEXTSTEP;if ( j == '4' ) goto NEXTSTEP; if ( j == '5' ) goto NEXTSTEP;if ( j == '6' ) goto NEXTSTEP; if ( j == '7' ) goto NEXTSTEP;if ( j == '8' ) goto NEXTSTEP; if ( j == '9' ) goto NEXTSTEP;if ( j == '0' ) goto NEXTSTEP; fclose(fpF);fclose(fpD);return 0; NEXTSTEP: fputc(j,fpD);goto ONCEMORE;} /* Function 12 E=G */ int GTOE(void){ char j;FILE *fpG;FILE *fpE; fpG=fopen("G.txt","r");fpE=fopen("E.txt","w"); ONCEMORE: j=fgetc(fpG); if ( j == '1' ) goto NEXTSTEP;if ( j == '2' ) goto NEXTSTEP; if ( j == '3' ) goto NEXTSTEP;if ( j == '4' ) goto NEXTSTEP; if ( j == '5' ) goto NEXTSTEP;if ( j == '6' ) goto NEXTSTEP; if ( j == '7' ) goto NEXTSTEP;if ( j == '8' ) goto NEXTSTEP; if ( j == '9' ) goto NEXTSTEP;if ( j == '0' ) goto NEXTSTEP; fclose(fpG);fclose(fpE);return 0; NEXTSTEP: fputc(j,fpE);goto ONCEMORE;} /* Function 13 C= B+x */ int BPXC(void){ char j; int carry,jj,xx; FILE *fpB;FILE *fpC; fpB=fopen("B.txt","r");fpC=fopen("C.txt","w"); carry=0;xx=x; ONCEMORE: j=fgetc(fpB); jj=-1; if ( j == '1' ) jj=1;if ( j == '2' ) jj=2;if ( j == '3' ) jj=3; if ( j == '4' ) jj=4;if ( j == '5' ) jj=5;if ( j == '6' ) jj=6; if ( j == '7' ) jj=7;if ( j == '8' ) jj=8;if ( j == '9' ) jj=9; if ( j == '0' ) jj=0; if ( jj < 0 ) goto STEP01; jj=jj+carry+xx;xx=0;carry=0;if ( jj > 9 ) { carry =1 ; jj=jj-10; } if ( jj==0 ) j='0'; if ( jj==1 ) j='1'; if ( jj==2 ) j='2'; if ( jj==3 ) j='3'; if ( jj==4 ) j='4'; if ( jj==5 ) j='5'; if ( jj==6 ) j='6'; if ( jj==7 ) j='7'; if ( jj==8 ) j='8'; if ( jj==9 ) j='9'; fputc(j,fpC);goto ONCEMORE; STEP01: if ( carry == 0 ) goto STEP03;j='1'; fputc(j,fpC); STEP03: fclose(fpB);fclose(fpC);return 0;} /* Function 14 A= C+x */ int CPXA(void){ char j; int carry,jj,xx; FILE *fpC;FILE *fpA; fpC=fopen("C.txt","r");fpA=fopen("A.txt","w"); carry=0;xx=x; ONCEMORE: j=fgetc(fpC); jj=-1; if ( j == '1' ) jj=1;if ( j == '2' ) jj=2;if ( j == '3' ) jj=3; if ( j == '4' ) jj=4;if ( j == '5' ) jj=5;if ( j == '6' ) jj=6; if ( j == '7' ) jj=7;if ( j == '8' ) jj=8;if ( j == '9' ) jj=9; if ( j == '0' ) jj=0; if ( jj < 0 ) goto STEP01; jj=jj+carry+xx;xx=0;carry=0;if ( jj > 9 ) { carry =1 ; jj=jj-10; } if ( jj==0 ) j='0'; if ( jj==1 ) j='1'; if ( jj==2 ) j='2'; if ( jj==3 ) j='3'; if ( jj==4 ) j='4'; if ( jj==5 ) j='5'; if ( jj==6 ) j='6'; if ( jj==7 ) j='7'; if ( jj==8 ) j='8'; if ( jj==9 ) j='9'; fputc(j,fpA);goto ONCEMORE; STEP01: if ( carry == 0 ) goto STEP03;j='1'; fputc(j,fpA); STEP03: fclose(fpC);fclose(fpA);return 0;} /* Function 15 B=C+E */ int CPEB(void){ char j,k; int carry,jj,kk;FILE *fpC;FILE *fpE;FILE *fpB; fpC=fopen("C.txt","r");fpE=fopen("E.txt","r"); fpB=fopen("B.txt","w");carry=0; ONCEMORE: j=fgetc(fpC); k=fgetc(fpE);kk=-1;jj=-1; if ( j == '1' ) jj=1;if ( j == '2' ) jj=2;if ( j == '3' ) jj=3; if ( j == '4' ) jj=4;if ( j == '5' ) jj=5;if ( j == '6' ) jj=6; if ( j == '7' ) jj=7;if ( j == '8' ) jj=8;if ( j == '9' ) jj=9; if ( j == '0' ) jj=0; if ( k == '1' ) kk=1;if ( k == '2' ) kk=2;if ( k == '3' ) kk=3; if ( k == '4' ) kk=4;if ( k == '5' ) kk=5;if ( k == '6' ) kk=6; if ( k == '7' ) kk=7;if ( k == '8' ) kk=8;if ( k == '9' ) kk=9; if ( k == '0' ) kk=0; if ( kk < 0 ) goto STEP03;if ( jj < 0 ) goto STEP01; STEP02:kk=kk+jj+carry;carry=0; if ( kk > 9 ) { carry =1 ; kk=kk-10; } if ( kk==0 ) k='0'; if ( kk==1 ) k='1'; if ( kk==2 ) k='2'; if ( kk==3 ) k='3'; if ( kk==4 ) k='4'; if ( kk==5 ) k='5'; if ( kk==6 ) k='6'; if ( kk==7 ) k='7'; if ( kk==8 ) k='8'; if ( kk==9 ) k='9'; fputc(k,fpB);goto ONCEMORE; STEP01: jj=0; goto STEP02; STEP03:if ( jj < 0 ) goto STEP04;kk=0; goto STEP02; STEP04:if ( carry == 0 ) goto STEP05;k='1';fputc(k,fpB); STEP05:fclose(fpC);fclose(fpE);fclose(fpB);return 0;} /* Function 16 G=E+C */ int EPCG(void){ char j,k; int carry,jj,kk;FILE *fpE;FILE *fpC;FILE *fpG; fpE=fopen("E.txt","r");fpC=fopen("C.txt","r"); fpG=fopen("G.txt","w");carry=0; ONCEMORE: j=fgetc(fpE); k=fgetc(fpC);kk=-1;jj=-1; if ( j == '1' ) jj=1;if ( j == '2' ) jj=2;if ( j == '3' ) jj=3; if ( j == '4' ) jj=4;if ( j == '5' ) jj=5;if ( j == '6' ) jj=6; if ( j == '7' ) jj=7;if ( j == '8' ) jj=8;if ( j == '9' ) jj=9; if ( j == '0' ) jj=0; if ( k == '1' ) kk=1;if ( k == '2' ) kk=2;if ( k == '3' ) kk=3; if ( k == '4' ) kk=4;if ( k == '5' ) kk=5;if ( k == '6' ) kk=6; if ( k == '7' ) kk=7;if ( k == '8' ) kk=8;if ( k == '9' ) kk=9; if ( k == '0' ) kk=0; if ( kk < 0 ) goto STEP03;if ( jj < 0 ) goto STEP01; STEP02:kk=kk+jj+carry;carry=0; if ( kk > 9 ) { carry =1 ; kk=kk-10; } if ( kk==0 ) k='0'; if ( kk==1 ) k='1'; if ( kk==2 ) k='2'; if ( kk==3 ) k='3'; if ( kk==4 ) k='4'; if ( kk==5 ) k='5'; if ( kk==6 ) k='6'; if ( kk==7 ) k='7'; if ( kk==8 ) k='8'; if ( kk==9 ) k='9'; fputc(k,fpG);goto ONCEMORE; STEP01: jj=0; goto STEP02; STEP03:if ( jj < 0 ) goto STEP04;kk=0; goto STEP02; STEP04:if ( carry == 0 ) goto STEP05;k='1';fputc(k,fpG); STEP05:fclose(fpE);fclose(fpC);fclose(fpG);return 0;} /* Function 17 E= x*C */ int CXE(void){ int ix; if( x > 0 ) goto STEP1;EZERO(); return 0; STEP1: CTOE();if( x == 1 ) return 0;ix=2; MOREX:EPCG(); GTOE(); if (ix == x ) return 0; ix=ix+1; goto MOREX;} /* Function 18 C=D-E and t=1 if C>0 */ int DSEC(void){ char j,k;int carry,jj,kk;int t=1; FILE *fpD;FILE *fpE;FILE *fpC; fpD=fopen("D.txt","r");fpE=fopen("E.txt","r"); fpC=fopen("C.txt","w"); carry=0; ONCEMORE: j=fgetc(fpD); k=fgetc(fpE);kk=-1;jj=-1; if ( j == '1' ) jj=1;if ( j == '2' ) jj=2;if ( j == '3' ) jj=3; if ( j == '4' ) jj=4;if ( j == '5' ) jj=5;if ( j == '6' ) jj=6; if ( j == '7' ) jj=7;if ( j == '8' ) jj=8;if ( j == '9' ) jj=9; if ( j == '0' ) jj=0; if ( k == '1' ) kk=1;if ( k == '2' ) kk=2;if ( k == '3' ) kk=3; if ( k == '4' ) kk=4;if ( k == '5' ) kk=5;if ( k == '6' ) kk=6; if ( k == '7' ) kk=7;if ( k == '8' ) kk=8;if ( k == '9' ) kk=9; if ( k == '0' ) kk=0; if ( kk < 0 ) goto STEP03;if ( jj < 0 ) goto STEP01; STEP02:kk=jj-kk-carry;carry=0;if ( kk < 0 ) { carry =1 ; kk=10+kk; } if ( kk==0 ) k='0';if ( kk==1 ) k='1';if ( kk==2 ) k='2'; if ( kk==3 ) k='3';if ( kk==4 ) k='4';if ( kk==5 ) k='5'; if ( kk==6 ) k='6';if ( kk==7 ) k='7';if ( kk==8 ) k='8'; if ( kk==9 ) k='9'; fputc(k,fpC);goto ONCEMORE; STEP01: jj=0; goto STEP02; STEP03:if ( jj < 0 ) goto STEP04;kk=0; goto STEP02; STEP04:if ( carry == 0 ) goto STEP05;t=-1;k='/';fputc(k,fpC); STEP05:fclose(fpD);fclose(fpE);fclose(fpC);return t;} /* Function 19 < Get Next x > */ int GETNEXTX(void){char s; int ix,t;x=0; D100C();CTOD(); /* C=100*D; D=C; --> C=100*C */ A10C();CTOE(); CPEB(); /* C=10*A;E=C;B=C+E; --> B=20*A */ NEXTTRY: BPXC(); /* C=B+x --> C= 20*A+x */ CXE(); /* E=x*C --> E= x*(20*A+x) */ t=DSEC(); /* C=D-E and t=1 if C>0 */ if (t < 0 ) goto XEND; CTOF();x=x+1;goto NEXTTRY; /* F=C --> F= D - E */ XEND: x=x-1; /* Finally obtained next x */ FTOD(); A10C(); CPXA(); /* D=F;C=10*A;A=C+x; --> A=10*A+x */ return 0;} /* Function 20 */ int main(void){char j; int istop ;int NJ; int m10; FILE *fpR;fpR=fopen("R.txt","w");j='1';fputc(j,fpR);j='.';fputc(j,fpR); printf("\n\n*************************************\n\n"); printf( " Type 1 to compute 10 digit. \n"); printf( " Type 2 to compute 100 digit. \n"); printf( " Type 3 to compute 1000 digit. \n"); printf( " Type 4 to compute 10000 digit. \n"); printf( " Type 5 to compute 100000 digit. \n"); printf( " Type 0 to compute any digit. \n\n"); printf( "*************************************\n\n"); printf("\n\n>>>>>"); tstart=time(NULL); AONE();DONE(); /* A=1;D=1; */ ONCEMOREJ:j=getchar(); if(j=='0') { printf("\n\n How many digits ? # of digits = "); scanf("%d",&NJ); NJ=NJ-1;} if ( j == '1' ) NJ =9;if ( j == '2' ) NJ =99;if ( j == '3' ) NJ =999; if ( j == '4' ) NJ = 9999;if ( j == '5' ) NJ = 99999; if ( j == 's' ) { fclose(fpR);return 0;} istop=m+NJ; ONCEMORE:if ( m == istop + 1 ) { j=getchar();if(j=='s') return 0; j=getchar();if(j=='s') return 0;fclose(fpR); return 0;} m=m+1;GETNEXTX(); tnow=time(NULL);dtime=tnow-tstart;printf("Time = %d sec ",dtime); if ( x ==0 ) j='0';if ( x ==1 ) j='1';if ( x==2 ) j='2'; if ( x ==3 ) j='3';if ( x ==4 ) j='4';if ( x==5 ) j='5'; if ( x ==6 ) j='6';if ( x ==7 ) j='7';if ( x==8 ) j='8'; if ( x ==9 ) j='9';fputc(j,fpR); m10=m-(m/10)*10; if( m10==0 ) fputc(' ',fpR) ; m10=m-(m/1000)*1000; if( m10==0 ) fputc('\n',fpR) ; m10=m-(m/100)*100; if( m10==0 ) {fputc('\n',fpR) ; fputc(' ',fpR) ;fputc(' ',fpR) ;} if ( m>9 ) goto II; printf("00000%d %d \n",m,x); goto ONCEMORE; II: if ( m>99 ) goto III; printf("0000%d %d \n",m,x); goto ONCEMORE; III: if ( m>999 ) goto IIII; printf("000%d %d \n",m,x); goto ONCEMORE; IIII: if ( m>9999 ) goto IIIII; printf("00%d %d \n",m,x); goto ONCEMORE; IIIII: if ( m>99999) goto IIIIII;printf("0%d %d \n",m,x); goto ONCEMORE; IIIIII: if ( m>999999) return 0; printf("%d %d \n",m,x); goto ONCEMORE; } /**********************************( Output Example of R.txt )*************************************************** 1.4142135623 7309504880 1688724209 6980785696 7187537694 8073176679 7379907324 7846210703 8850387534 3276415727 3501384623 0912297024 9248360558 5073721264 4121497099 9358314132 2266592750 5592755799 9505011527 8206057147 0109559971 6059702745 3459686201 4728517418 6408891986 0955232923 0484308714 3214508397 6260362799 5251407989 6872533965 4633180882 9640620615 2583523950 5474575028 7759961729 8355752203 3753185701 1354374603 4084988471 6038689997 0699004815 0305440277 9031645424 7823068492 9369186215 8057846311 1596668713 0130156185 6898723723 5288509264 8612494977 1542183342 0428568606 0146824720 7714358548 7415565706 9677653720 2264854470 1585880162 0758474922 6572260020 8558446652 1458398893 9443709265 9180031138 8246468157 0826301005 9485870400 3186480342 1948972782 9064104507 2636881313 7398552561 1732204024 5091227700 2269411275 7362728049 5738108967 5040183698 6836845072 5799364729 0607629969 4138047565 4823728997 1803268024 7442062926 9124859052 1810044598 4215059112 0249441341 7285314781 0580360337 1077309182 8693147101 7111168391 6581726889 4197587165 8215212822 9518488472 ----------------------------------------------------------------------------------------- ******************************************************************************************************************/