BCC Developerのエラーについて

このQ&Aのポイント
  • C言語の初心者がBCC Developerでプログラミングをしている際にエラーが出る問題について
  • 質問文のプログラムは、コサインのテイラー展開による収縮を見極めるものである
  • エラーメッセージは「Error 3-10.rc 4 10: Expecting filename or BEGIN」と表示される
回答を見る
  • ベストアンサー

BCC Devaloper のエラーについて

C言語の初心者で、BCC Developerで自習しているのですが 参考書に書いてあるプログラミングを打ってもエラーが出てその原因が分かりません 本文は /* 3-10 */ #include<math.h> float EPS=1e-8 float s,d,e,x=60*3.14159/180; int k, flag=0; s=1.0;e=1.0; for(k=1;k<=200;k=k+2){ d=s; e=-e*x*x/(k=k+2){ s=s+e; if(fabs(s-d)<=EPS*fabs(d)){ flag=1; break; } } if(flag==1) printf("%f\n",s); else printf("収束しない\n"); } というもので、コサインのテイラー展開が収縮するかを見極めるものです エラー内容は Error 3-10.rc 4 10: Expecting filename or BEGIN ** error 20018 ** deleting Debug\3-10.res Build End !! (Elapsed time 0:00.791) です  よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.2

よくみるとこれはプログラムの一部ですね。 コンパイルできる単位ではないでしょう。 BCCは知らないのですが void main(){ } などが必要でしょう。 場所的にはincludeの次に2行目でしょうね。 }は最後です。 なお、 e=-e*x*x/(k=k+2){ ここの{はプログラム的に意味が無いですね。 何かのミスかもしれません。当然閉じる方の }とペアで、あっても無くても同じ意味でしょ う。 ただプログラムの意味を考えると、 void main(){ に対する}は存在しているように思います。 現在、forの閉じ括弧は最後になっていますが、 収束したかどうかがforの中に入っているのは おかしいです。 従って void main(){ // 追加 e=-e*x*x/(k=k+2){ → e=-e*x*x/(k=k+2); // 修正 かな?と考えられます。

gensuke06
質問者

お礼

やって見たのですが出来ませんでした 又同じエラー内容です エラー内容から初期の設定ミスなのだと思うのですが…

その他の回答 (2)

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.3

e=-e*x*x/(k=k+2){ これは良く見ると、いけない訳ではありませ んが、一般的な書き方ではないですね。 後半の括弧の部分が、for文のようにも思えます。 とにかくヘンです。

gensuke06
質問者

補足

具体的にはどうするべきでしょうか?

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

コピーだから大体あっていると思いますが、 >#include<math.h> > >float EPS=1e-8 ここで「;」が無いのが原因かな? 質問へのコピーミスでなければ。

gensuke06
質問者

お礼

回答が送れてすみません。 やって見ましたがそれでも無理でした。 エラー内容が同じです。 BCC Devaloperの設定が間違っているのでしょうか? そっちは学校の授業でダウンロードとセットアップをし、普通にC言語が使えていたので大丈夫だと思ったのですが…

関連するQ&A

  • プログラム エラー BCC Developer

     BCC DeveloperでC言語のプログラミングの勉強をしようとしているのですが、エラーの原因が分かりません  初心者で、この文に関しても本の丸写しなのですが(”河西メソッド C言語プログラミング学習の方程式”という本です)  エラー内容は Error 3-10.rc 4 10: Expecting filename or BEGIN ** error 20018 ** deleting Debug\\3-10.res Make End !! (Elapsed time 0:00.120) というものです 本文は /* 3-10 */ #include<math.h> float EPS=1e-8 float s,d,e,x=60*3.14159/180; int k, flag=0; s=1.0;e=1.0; for(k=1;k<=200;k=k+2){ d=s; e=-e*x*x/(k=k+2){ s=s+e; if(fabs(s-d)<=EPS*fabs(d)){ flag=1; break; } } if(flag==1) printf(\"%f\\n\",s); else printf(\"収束しない\\n\"); } です cos(X)のテーラー展開に関するものです この原因をご指摘いただければ幸いです

  • このグラフが書きたいんですが。。

    #include <stdio.h> #include <math.h> #define KMAX 20 void eval(float x,float *f,float *df) { float e; e= exp(-x); *f= x-e; *df= 1+e; return; } void main() { float x, eps, f, df, d; int k; scanf("%g%g", &x, &eps); printf("Solution of f(x)=x-eps(-x)=0\n"); printf("Convergence criterion |f(x)|<%G\n\n", eps); printf(" k\tx\t\tf(x)\t\tf'(x)\t\tcorrection\n"); for(k=0;k<KMAX;k++){ eval(x, &f, &df); d= -f/df; printf("%2d %15.6e %15.6e %15.6e %15.6e\n", k, x, f, df, d); x += d; if(fabs(f)<eps) break; } if(k>=KMAX) printf("divergent?\n"); printf("\nroot=%g\n", x); } この解における収束状況をグラフを書いて確かめたいのですがどうやって、何で書いたらいいのかわかりません。教えてください!このプログラムはC++で書いたNewton法です。

  • sinのプログラム

    #include<stdio.h> #include<math.h> #define NMAX 100 main(){ float eps,x,t,s; int n; printf("Taylor series\n"); scanf("%g",&eps); printf("eps=%g\n",&x); for(;scanf("%g",&x)!=EOF;){ printf("\nx=%g\n n\tt\t\ts\n",x); t=s=1; for(n=1;n<NMAX;n++){ t*=X/n; s+=t; printf("%2d %15.6e %15.6e\n",n,t,s); if(fabs(t)<eps) break; } if(n>=NMAX) printf("---not converged ---\n); printf("exp(%g)=%g\tn=%d\n",x,s,n); } return(0); } これはeの級数展開をもとめるプログラムなのでが、これをsinの級数展開のプログラムに改造しろという問題があります。 sinのn乗の項を求めてeの部分と置き換えてやってみたのですができません。 どなたかわかる方がいましたら、教えてください。

  • どこがおかしいのでしょうか??

    下のプログラムはsinの級数展開を求めるプログラム…を書いたつもりなんですが計算機と違う値がでてしまい困っています。どこをどう直せばいいのか教えてもらえませんでしょうか??それともこのプログラムではうまくいかないのでしょうか?返答をお願いします。 #include <stdio.h> #include<math.h> #define NMAX 100 main() { float eps,x,t,s; int n; printf("Taylor series\n"); scanf("%g", &eps); printf("eps=%g\n", eps); for(;scanf("%g", &x)!=EOF;){ printf("\nx=%g\n n\tt\t\ts\n", x); t=s=x; for(n=1;n<NMAX;n++){ t*=-x*x/((2*n+1)*(2*n)); s+=t; printf("%2d %15.6e %15.6e\n", n, t, s); if(fabs(t)<eps) break; } if(n>=NMAX) printf("--- not converged ---\n"); printf("exp(%g)=%g\tn=%d\n", x, s, n); } return(0); }

  • C言語で表記についの質問です

    C言語です。 exp(x)のテイラー展開を数値計算で求めるプログラムですが、 プログラムでは相対打ち切り誤差をEPSと定義しています。 具体的には double myexp(double x){ double EPS=1e-08; double s=1.0,e=1.0,d; int k; for(k=1;k<=200;k++){ d=s; e=e*x/k; s=s+e; if(fabs(s-d)<EPS*fabs(d)) return s; } と上の様に書かれています。 わからない点は上記のプログラムでEPS=1e-08のeは10の意味をしているでしょうか?EPS=10^-8理解 してよろしいでしょうか? またEPSのeと二つ目のe=1.0は全く異なるものでしょうか。 ご教授よろしくお願いします。

  • 二分法のプログラム

    関数x^3-7x^2-6x+2を二分法で解くプログラムを作ったのですが、エラーが出てコンパイルできません。訂正箇所を教えて下さい。 宜しくお願い致します。 #include<stdio.h> #include<math.h> #define EPSILON 0.1E-5 #define TURE 1 #define FALSE 0 int kansu(int x); void Nibunho(left,right,sol,flag); double left,right; int flag; int main(void) { printf("区間の左端と右端は?\n"); scanf("%lf %lf",&left,&right); flag=FALSE; Nibunho(left,right,&root,&flag); if(flag) printf("解 = %e (繰り返し回数 = %d)\n",root,k); else { printf("入力した範囲で解は求まりませんでした。\n"); printf("f(%e) = %e \n",root,k); } return 0; } int kansu(int x) { int f(double x) f(x)=x*x*x-7.0*x*x-6.0*x+2.0; return(f(x)); } void Nibunho(left,right,sol,flag) { double left,right,*sol; int *flag; double a,b,c,fa,fb,fc; k=0; a=left; b=right; do { k++; c=(a+b)/2.0; fc=f(c); fa=f(a); fb=f(b); if(fabs(fc)<1.0e-10) { a=c; b=c; *flag=TRUE; } else { if( (fa * fc < 0.0) || (fb * fc < 0.0) ) { *flag = TRUE; if( (fa*fc) < 0.0 ) b=c; else a=c; } else { if( fabs(fa) > fabs(fb) ) a=c; else b=c; } } } while((b-a)>EPSILON) *sol=(a+b)/2.0; }

  • 掃出法で連立一次方程式の解を求める

    掃出法で連立一次方程式の解を求めるプログラムを作ってみたのですが、ポインタと浮動小数点のエラーが出てしまい、実行できません。どこが間違っているのかさえ分からず困っています。訂正箇所を教えてください。宜しくお願い致します。 #include<stdio.h> #include<math.h> #include <float.h> #define N 3 #define EPSILON 1.0E-5 #define TRUE 1 #define FALSE 0 void sweep(int *flag); void swap(float *wk1,float *wk2); float a[N][N]={{ 2, 6, 3}, {-1, 5,-2}, {-2,-1, 6}}; float x[N],b[N]={6,3,14}; int flag; void main() { int i,j; for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%10.4f",a[i][j]); printf("%10.4f\n",b[i]); } flag=TRUE; sweep(&flag); if(flag==TRUE) { printf("連立方程式の解\n"); for(i=0;i=N;i++) printf("x[%d]=%10.4f\n",i+1,x[i]); } else printf("解なし\n"); } void swap(float *wk1,float *wk2) { float w; w=*wk1; *wk1=*wk2; *wk2=w; } void sweep(int *flag) { int i,j,k,ik; float ak,aik; for(k=0;k<N;k++) { ak=a[k][k]; if(fabs(ak)<=EPSILON) { ik=k+1; while((ik<N)&&(fabs(a[ik][k])<EPSILON)) ik++; if(ik<N) { for(j=k;j<N;j++) swap(&a[k][j],&a[ik][j]); swap(b[k],b[ik]); ak=a[k][k]; } else { printf("ピボットが零です\n"); *flag=FALSE; goto end; } } for(j=k;j<N;j++) a[k][j]=a[k][j]/ak; b[k]=b[k]/ak; for(i=0;i<N;i++) { if(i!=k) { aik=a[i][k]; for(j=k;j<N;j++) a[k][j]=a[i][j]-aik*a[k][j]; b[i]=b[i]-aik*b[k]; } } for(k=0;k<N;k++) x[k]=b[k]; end:; } }

  • このプログラムがうまく作動しないのですが・・・

    #include <stdio.h> #include <math.h> #include <stdlib.h> float f(float x); float f(float x) { return (float)(x-sin(x)/cos(x)); } void main() { float x1,x2,eps,f1,f2,xm,ff; int i; printf("Bisection method\n\n"); for(;scanf("%g%g%g",&x1,&x2,&eps)!=EOF;){ f1= f(x1); f2= f(x2); if(f1>0){ xm= x1; x1= x2; x2=xm; ff= f1; f1= f2; f2=ff; } printf("\nFinding a root between x1=%g and x2=%g\n", x1, x2); printf("f(x1)=%g f(x2)=%g eps=%g\n", f1, f2, eps); printf("\tx1\t\tx2\t\txm\t\tf(xm)\n"); if(f2<0){ printf("????\n"); continue; } i= 0; for(;fabs(x1-x2)>=eps;){ xm=(x1+x2)*((float)rand()/(float)RAND_MAX) ff= f(xm); i++; printf("%2d %15.6e %15.6e %15.6e %15.6e\n",i, x1, x2, xm, ff); if(ff<0) x1= xm; else x2= xm; } printf("A root found between %g and %g\n", x1, x2); } } f(x)=x-tanx=0の解のうち3つを表示させるためにランダムサーチのプログラムを上記のように書いたつもりなんですがうまく作動しません。どこをどう直したらいいのでしょうか、教えてください。

  • ランダムサーチ!!

    #include <stdio.h> #include <math.h> float f(float x); float f(float x) { return (float)(x-sin(x)/cos(x)); } void main() { float x1,x2,eps,f1,f2,xm,ff; int i; printf("Bisection method\n\n"); for(;scanf("%g%g%g",&x1,&x2,&eps)!=EOF;){ f1= f(x1); f2= f(x2); if(f1>0){ xm= x1; x1= x2; x2=xm; ff= f1; f1= f2; f2=ff; } printf("\nFinding a root between x1=%g and x2=%g\n", x1, x2); printf("f(x1)=%g f(x2)=%g eps=%g\n", f1, f2, eps); printf("\tx1\t\tx2\t\txm\t\tf(xm)\n"); if(f2<0){ printf("????\n"); continue; } i= 0; for(;fabs(x1-x2)>=eps;){ xm= (x1+x2)/2; ff= f(xm); i++; printf("%2d %15.6e %15.6e %15.6e %15.6e\n",i, x1, x2, xm, ff); if(ff<0) x1= xm; else x2= xm; } printf("A root found between %g and %g\n", x1, x2); } } 上のプログラムはf(x)=x-tanx=0の解のうち3つを表示するプログラムです。この方法をランダムサーチのプログラムと比較したいのですが、プログラムがうまく書けず悩んでいます。よろしければどちらがどのようなメリット、あるいはデメリットがあるのかも教えてほしいです。お願いします。

  • Cプログラミングについて

    私はBorlandのコンパイラを使ってCプログラミングをやっているのですが、以下のプログラムが実行できません。 どのようにすればコンパイラできるのか教えてください。 非線型方程式f(x)=x^3-x+1の根をニュートン法により求めよ。 /* *-------------------------- *   ニュートン法 * *-------------------------- */ #include <stdio.h> #include <math.h> #define f(x) ((x)*(x)*(x)-(x)+1) #define g(x) (3*(x)*(x)-1) #define EPS 1e-8 #define LIMIT 50 int main(void) { double x=-2.0,dx;   int k; for (k=1;k<=LIMIT;k++){ dx=x; x=x-f(x)/g(x); if(fabs(x-dx)<fabs(dx)*EPS){ printf("iteration=%d\n",k); printf("x=%f\n",x); break; } } if (k>LIMIT) printf("収束しない\n"); } コンパイルしようとすると以下のようなエラーが出ます。 エラー E2206 sample.c 18: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 sample.c 18: 不正な文字 ' ' (0x8140)(関数 main ) 警告 W8070 sample.c 32: 関数は値を返すべき(関数 main ) *** 2 errors in Compile *** お答えよろしくお願いします。

専門家に質問してみよう