C++総和の質問です

このQ&Aのポイント
  • Microsoft Visual Basic 6.0の質問です.色々試してもうまくいかない箇所があるので質問させていただきます.
  • この式の中で,am=1となっているものをam=1からam=x(xはscanfで入力)とし,最後のRRR上で1からxまでのRRRの総和を計算させることは可能でしょうか?
  • 基本的な総和と違い,RRRより前に計算しているKmやKn上にそれぞれのamを代入し,最終的にRRRの総和を計算するという形にするやりかたがわからない状態です.
回答を見る
  • ベストアンサー

C++総和の質問です

Microsoft Visual Basic 6.0の質問です. 色々試してもうまくいかない箇所があるので質問させていただきます. この式の中で,am=1となっているものをam=1からam=x(xはscanfで入力) とし,最後のRRR上で1からxまでのRRRの総和を計算させることは可能でしょうか? 基本的な総和と違い,RRRより前に計算しているKmやKn上にそれぞれのamを代入し,最終的にRRRの総和を計算するという形にするやりかたがわからない状態です. プログラムが無駄に長くて申し訳ありませんが,わかる方いらっしゃいましたらよろしくお願いいたします. 以下プログラムです //hello2.cpp #define _COMPLEX_DEFINED #include <iostream> #include <string> #include "complex.h" #include "bessel.h" #include <math.h> #include <cmath> #include <stdio.h> #define RADIAN(ARC) ((ARC) * 3.14159 / 180) using namespace std; int main(void) { const double pi=3.141592654; const double I0=2829; const double r0=0; const double z=0; const double B1=6.07*pow(10,7); int k; double omega,freq,x; double R,Rk; double lambdag,ag; double lambda1,a1,l1; double lambda2,a2,l2; double p,p2,pg; double a11,a21,ag1,Rk1,l11,l21,p11,p21; double Km,Kn,Kg,am; complex r1,g,S2; complex sigma1,sigma2,sigmag; complex G,P,B,H; complex RR,NI,NI2,NI3,BE,RRR; double r,r00,r001,r01; double imag(),real(); printf("接触熱抵抗"); scanf("%lf",&R); printf("加熱光半径(10^-6)×"); scanf("%lf",&Rk1); Rk=Rk1*pow(10,-6); printf("1層目熱伝導率"); scanf("%lf",&lambda1); printf("1層目温度伝導率(10^-6)×"); scanf("%lf",&a11); a1=a11*pow(10,-6); printf("1層目厚み(10^-6)×"); scanf("%lf",&l11); l1=l11*pow(10,-6); printf("2層目熱伝導率"); scanf("%lf",&lambda2); printf("2層目温度伝導率(10^-6)×"); scanf("%lf",&a21); a2=a21*pow(10,-6); printf("2層目厚み(10^-6)×"); scanf("%lf",&l21); l2=l21*pow(10,-6); printf("バッキング熱伝導率"); scanf("%lf",&lambdag); printf("バッキング温度伝導率(10^-6)×"); scanf("%lf",&ag1); ag=ag1*pow(10,-6); printf("1層目半径境界(10^-6)×"); scanf("%lf",&p11); p=p11*pow(10,-6); printf("2層目半径境界(10^-6)×"); scanf("%lf",&p21); p2=p21*pow(10,-6); printf("バッキング半径境界"); scanf("%lf",&pg); x=2; freq=pow(10,x); omega=2*pi*freq; am=1; Km=am/p; Kn=am/p2; Kg=am/pg; sigma1=cpow(pow(Km,2)+complex(0,omega/a1),0.5); sigma2=cpow(pow(Kn,2)+complex(0,omega/a2),0.5); sigmag=cpow(pow(Kg,2)+complex(0,omega/ag),0.5); r1=B1/sigma1; g=(lambdag*sigmag)/(lambda1*sigma1); S2=(lambda2*sigma2)/(lambda1*sigma1); G = (1/(2*(S2+g)))*((S2-g)*(-1+R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(1+R*lambda2*sigma2+S2)); P = (1/(2*(S2+g)))*((S2-g)*(1-R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1-R*lambda2*sigma2+S2)); B = (1/(2*(S2+g)))*((S2-g)*((1-R*lambda2*sigma2)*r1+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1*(1+R*lambda2*sigma2)*r1+S2)); H = ((g+r1)*cexp(sigma1*l1)*G+(1-g)*cexp(-1*B1*l1)*B)/((1-g)*cexp(-1*sigma1*l1)*P+(1+g)*cexp(sigma1*l1)*G); r=0; r00=0; r001=1; r01=0.00005; BE=1; NI= exp(-1*(2*pow(r01,2)/pow(Rk,2)))*j0(Km*r)*r01; NI2=2*pi*r001*j0(Km*r00); NI3=cpow(j1(am),-2); RR= (B1*I0/(2*lambda1*(cpow(sigma1,2)-pow(B1,2))))*2*pow(p,-2)*cpow(BE,-2)*NI*(1/(1-g))*(-2*H+r1+1)*NI2*cexp(sigmag*z); RRR=-atan(((RR.imag())/(RR.real()))*(180/pi)); printf("%e\n",R*Rk); printf("%e\n",Rk); printf("%e\n",lambda1); printf("%e\n",B1); printf("%e\n",sigma1); printf("%e\n",sigmag); printf("%e\n",g); printf("%e\n",r1); printf("%e\n",j0(am)); printf("%e\n",G); printf("%e\n",P); printf("%e\n",B); printf("%e\n",H); printf("%e\n",NI3); printf("%e",RR.real()); printf("+"); printf("%e",RR.imag()); printf("i""\n"); printf("%e\n",RRR); scanf("%d",&k);// return 0; }

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8010/17118)
回答No.2

いくつか訂正。 よく見たらamもdoubleにしてるのね。 それなら for (ami=1; am<=x; i++) { この辺もこのままではまずいね。(ついでに言えば明らかな間違いもあるし...) ループの変数はint型にするようにして for (i=1; i<=x; i++) { am=(double)i; のようにするんだね。

ring624
質問者

お礼

ありがとうございます. ただ,書き間違いがありました!申し訳ありません. 1からxの総和のxはプログラム内で定義してあるxとは別物です… プログラムにあるのとは別に(仮に)x1として,x1をscanfで入力し,1からx1の総和を計算する形になります.

その他の回答 (1)

  • f272
  • ベストアンサー率46% (8010/17118)
回答No.1

am=1からam=xまでの総和を計算したいということはxは1以上の整数だと想定しているのかな? だとすればxはint型で定義しておくこと。 その場合 freq=pow(10,x); の部分もそれに合わせて書きなおすこと。 /* ループに入る前に和を0にしておく */ sumRRR=0.0; /* ここからループに入る */ for (ami=1; am<=x; i++) { /* ここでKm, Kn, ...やRRRを計算する */ /* 最後に和を計算する */ sumRRR+=RRR; } /* ループを抜けた時点でRRRの総和がsumRRRに入っている */

関連するQ&A

  • C++の繰り返し

    たびたび申し訳ありません.C++総和の質問です Microsoft Visual Basic 6.0の質問です. 以下の用に繰り返しの総和計算を書いたのですが,それぞれの総和が計算されず,例えば最もシンプルな総和sumも0となってしまう状態です.(他の総和も全て0になります) 何か間違いなどありますでしょうか? //hello2.cpp #define _COMPLEX_DEFINED #include <iostream> #include <string> #include "complex.h" #include "bessel.h" #include <math.h> #include <cmath> #include <stdio.h> #define RADIAN(ARC) ((ARC) * 3.14159 / 180) using namespace std; int main(void) { const double pi=3.141592654; const double I0=2829; const double r0=0; const double z=0; const double B1=6.07*pow(10,7); int k; double omega,freq,x; double R,Rk; double lambdag,ag; double lambda1,a1,l1; double lambda2,a2,l2; double p,p2,pg; double a11,a21,ag1,Rk1,l11,l21,p11,p21; double Km,Kn,Kg,am; complex r1,g,S2; complex sigma1,sigma2,sigmag; complex G,P,B,H; complex RR,NI,NI2,NI3,BE; double ANS,sumRIm,sumRRe,sumKm,sum; int x1; double r,r00,r001,r01; double imag(),real(); printf("接触熱抵抗"); scanf("%lf",&R); printf("加熱光半径(10^-6)×"); scanf("%lf",&Rk1); Rk=Rk1*pow(10,-6); printf("1層目熱伝導率"); scanf("%lf",&lambda1); printf("1層目温度伝導率(10^-6)×"); scanf("%lf",&a11); a1=a11*pow(10,-6); printf("1層目厚み(10^-6)×"); scanf("%lf",&l11); l1=l11*pow(10,-6); printf("2層目熱伝導率"); scanf("%lf",&lambda2); printf("2層目温度伝導率(10^-6)×"); scanf("%lf",&a21); a2=a21*pow(10,-6); printf("2層目厚み(10^-6)×"); scanf("%lf",&l21); l2=l21*pow(10,-6); printf("バッキング熱伝導率"); scanf("%lf",&lambdag); printf("バッキング温度伝導率(10^-6)×"); scanf("%lf",&ag1); ag=ag1*pow(10,-6); printf("1層目半径境界(10^-6)×"); scanf("%lf",&p11); p=p11*pow(10,-6); printf("2層目半径境界(10^-6)×"); scanf("%lf",&p21); p2=p21*pow(10,-6); printf("バッキング半径境界"); scanf("%lf",&pg); printf("am範囲"); scanf("%lf",&x1); x=2; freq=pow(10,x); omega=2*pi*freq; sum=0; sumRIm=0; sumRRe=0; sumKm=0; for (int i=1; i<=x1; i++) { sum+=i; am=(double)i; Km=am/p; Kn=am/p2; Kg=am/pg; sigma1=cpow(pow(Km,2)+complex(0,omega/a1),0.5); sigma2=cpow(pow(Kn,2)+complex(0,omega/a2),0.5); sigmag=cpow(pow(Kg,2)+complex(0,omega/ag),0.5); r1=B1/sigma1; g=(lambdag*sigmag)/(lambda1*sigma1); S2=(lambda2*sigma2)/(lambda1*sigma1); G = (1/(2*(S2+g)))*((S2-g)*(-1+R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(1+R*lambda2*sigma2+S2)); P = (1/(2*(S2+g)))*((S2-g)*(1-R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1-R*lambda2*sigma2+S2)); B = (1/(2*(S2+g)))*((S2-g)*((1-R*lambda2*sigma2)*r1+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1*(1+R*lambda2*sigma2)*r1+S2)); H = ((g+r1)*cexp(sigma1*l1)*G+(1-g)*cexp(-1*B1*l1)*B)/((1-g)*cexp(-1*sigma1*l1)*P+(1+g)*cexp(sigma1*l1)*G); r=0; r00=0; r001=1; r01=0.00005; BE=1; NI= exp(-1*(2*pow(r01,2)/pow(Rk,2)))*j0(Km*r)*r01; NI2=2*pi*r001*j0(Km*r00); NI3=cpow(j1(am),-2); RR= (B1*I0/(2*lambda1*(cpow(sigma1,2)-pow(B1,2))))*2*pow(p,-2)*cpow(BE,-2)*NI*(1/(1-g))*(-2*H+r1+1)*NI2*cexp(sigmag*z); sumKm+= Km; sumRIm+= RR.imag(); sumRRe+= RR.real(); } ANS=-atan((sumRIm/sumRRe)*(180/pi)); printf("%e\n",R*Rk); printf("%e\n",Rk); printf("%e\n",lambda1); printf("%e\n",B1); printf("%e\n",Km); printf("%e\n",sigmag); printf("%e\n",g); printf("%e\n",r1); printf("%e\n",j0(am)); printf("%e\n",G); printf("%e\n",P); printf("%e\n",B); printf("%e\n",H); printf("%e\n",NI3); printf("%e",RR.real()); printf("+"); printf("%e",RR.imag()); printf("i""\n"); printf("%e\n",sumKm); printf("%e\n",sumRRe); printf("%e\n",sum); printf("%e\n",ANS); scanf("%d",&k);// return 0; }

  • c++について質問です

    c++について質問です. 以下を実行するとerror C2601: 'f' : ローカル関数の定義が正しくありません。 と出てしまいます. 原因はmainの中に積分計算の関数を入れているせいだと思うのですが,どのように解決すればよいでしょうか? 計算の都合上,積分はmain関数内で行う必要があります. お時間のある方,よろしくお願いします. //hello2.cpp #define _COMPLEX_DEFINED #include <iostream> #include <string> #include "complex.h" #include "bessel.h" #include <math.h> #include <iostream.h> #include <cmath> #include <stdio.h> #define RADIAN(ARC) ((ARC) * 3.14159 / 180) using namespace std; int main(void) { const double pi=3.141592654; const double I0=2829; const double r0=0; const double z=0; const double B1=6.07*pow(10,7); int k; double omega,freq,x; double R,Rk; double lambdag,ag; double lambda1,a1,l1; double lambda2,a2,l2; double p,p2,pg; double a11,a21,ag1,Rk1,l11,l21,p11,p21; double Km,Kn,Kg,am; complex r1,g,S2; complex sigma1,sigma2,sigmag; complex G,P,B,H; complex RR,NI,NI2,NI3,BE; double ANS,sumRIm,sumRRe; int x1; double r,r00,r001,r01; double imag(),real(); printf("接触熱抵抗"); scanf("%lf",&R); printf("加熱光半径(10^-6)×"); scanf("%lf",&Rk1); Rk=Rk1*pow(10,-6); printf("1層目熱伝導率"); scanf("%lf",&lambda1); printf("1層目温度伝導率(10^-6)×"); scanf("%lf",&a11); a1=a11*pow(10,-6); printf("1層目厚み(10^-6)×"); scanf("%lf",&l11); l1=l11*pow(10,-6); printf("2層目熱伝導率"); scanf("%lf",&lambda2); printf("2層目温度伝導率(10^-6)×"); scanf("%lf",&a21); a2=a21*pow(10,-6); printf("2層目厚み(10^-6)×"); scanf("%lf",&l21); l2=l21*pow(10,-6); printf("バッキング熱伝導率"); scanf("%lf",&lambdag); printf("バッキング温度伝導率(10^-6)×"); scanf("%lf",&ag1); ag=ag1*pow(10,-6); printf("1層目半径境界(10^-6)×"); scanf("%lf",&p11); p=p11*pow(10,-6); printf("2層目半径境界(10^-6)×"); scanf("%lf",&p21); p2=p21*pow(10,-6); printf("バッキング半径境界"); scanf("%lf",&pg); printf("am範囲"); scanf("%d", &x1); FILE *file; file = fopen("test929.csv","w"); for (x=1; x<=7; x+=0.1) { freq=pow(10,x); omega=2*pi*freq; sumRIm=0; sumRRe=0; for (int i=1; i<=x1; i++) { am=(double)i; Km=am/p; Kn=am/p2; Kg=am/pg; sigma1=cpow(pow(Km,2)+complex(0,omega/a1),0.5); sigma2=cpow(pow(Kn,2)+complex(0,omega/a2),0.5); sigmag=cpow(pow(Kg,2)+complex(0,omega/ag),0.5); r1=B1/sigma1; g=(lambdag*sigmag)/(lambda1*sigma1); S2=(lambda2*sigma2)/(lambda1*sigma1); G = (1/(2*(S2+g)))*((S2-g)*(-1+R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(1+R*lambda2*sigma2+S2)); P = (1/(2*(S2+g)))*((S2-g)*(1-R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1-R*lambda2*sigma2+S2)); B = (1/(2*(S2+g)))*((S2-g)*((1-R*lambda2*sigma2)*r1+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1*(1+R*lambda2*sigma2)*r1+S2)); H = ((g+r1)*cexp(sigma1*l1)*G+(1-g)*cexp(-1*B1*l1)*B)/((1-g)*cexp(-1*sigma1*l1)*P+(1+g)*cexp(sigma1*l1)*G); r=0; r00=0; r001=1; r01=0.00005; BE=1; NI= exp(-1*(2*pow(r01,2)/pow(Rk,2)))*j0(Km*r)*r01; NI2=2*pi*r001*j0(Km*r00); NI3=cpow(j1(am),-2); RR= (B1*I0/(2*lambda1*(cpow(sigma1,2)-pow(B1,2))))*2*pow(p,-2)*cpow(BE,-2)*NI*(1/(1-g))*(-2*H+r1+1)*NI2*cexp(sigmag*z); sumRIm+= RR.imag(); sumRRe+= RR.real(); } ANS=-atan((sumRIm/sumRRe))*(180/pi); printf("%f\n",ANS); fprintf(file,"%f\n",ANS); } /* nを大きくすると精度が上がる */ const int n = 100000; const double Kmm=100; /* 積分する関数 f(w) */ double f(double w){ return 2*pi*w*j0(Kmm*w); } /* 積分の範囲 w0からw_max */ const double w0 = 0; // x0を0としないのは、xが0の時に発散するため const double w_max = 0.4; int kk; /* シンプソン法による積分計算 */ double simpson(double w0,double w_max){ double delta = (w_max - w0)/n; double a; a = f(w0); a += f(w0 + delta * n); int i; for(i=1; i<n; i+=2){ a += 4.0 * f(w0 + delta * i); } for(i=2; i<n; i+=2){ a += 2.0 * f(w0 + delta * i); } return a*delta/3.0; } printf("%f\n",simpson(w0,w_max)); scanf("%d",&k);// fclose(file); return 0; }

  • C++の質問です

    Microsoft Visual Basic 6.0の質問です.以下のエラーが出るのですがCとC++の言語の影響によるものでしょうか? 6273次元境界.obj : error LNK2001: 外部シンボル ""class complex __cdecl operator*(class complex,class complex)" (??D@YA?AVcomplex@@V0@0@Z)" は未解決です 6273次元境界.obj : error LNK2001: 外部シンボル ""class complex __cdecl operator/(class complex,class complex)" (??K@YA?AVcomplex@@V0@0@Z)" は未解決です 6273次元境界.obj : error LNK2001: 外部シンボル ""class complex __cdecl cpow(class complex,double)" (?cpow@@YA?AVcomplex@@V1@N@Z)" は未解決です 6273次元境界.obj : error LNK2001: 外部シンボル ""public: __thiscall complex::complex(double,double)" (??0complex@@QAE@NN@Z)" は未解決です 元の形です #include <iostream> #include <string> #include "complex.h" #include <math.h> #include <stdio.h> #define RADIAN(ARC) ((ARC) * 3.14159 / 180) using namespace std; int main(void) { const double pi=3.141592654; int k; double omega,freq; double I0,r0,z,R,Rk; double lambdag,ag; double lambda1,a1,B1,l1; double lambda2,a2,l2; double p,p2,pg; double a11,a21,ag1,Rk1,l11,l21,p11,p21; complex r1,g,S2; complex sigma1,sigma2,sigmag; printf("接触熱抵抗"); scanf("%lf",&R); printf("加熱光半径(10^-6)×"); scanf("%lf",&Rk1); Rk=Rk1*pow(10,-6); printf("1層目熱伝導率"); scanf("%lf",&lambda1); printf("1層目温度伝導率(10^-6)×"); scanf("%lf",&a11); a1=a11*pow(10,-6); printf("1層目厚み(10^-6)×"); scanf("%lf",&l11); l1=l11*pow(10,-6); printf("2層目熱伝導率"); scanf("%lf",&lambda2); printf("2層目温度伝導率(10^-6)×"); scanf("%lf",&a21); a2=a21*pow(10,-6); printf("2層目厚み(10^-6)×"); scanf("%lf",&l21); l2=l21*pow(10,-6); printf("バッキング熱伝導率"); scanf("%lf",&lambdag); printf("バッキング温度伝導率(10^-6)×"); scanf("%lf",&ag1); ag=ag1*pow(10,-6); printf("1層目半径境界(10^-6)×"); scanf("%lf",&p11); p=p11*pow(10,-6); printf("2層目半径境界(10^-6)×"); scanf("%lf",&p21); p2=p21*pow(10,-6); printf("バッキング半径境界"); scanf("%lf",&pg); I0=2829; r0=0; z=0; B1=6.07*pow(10,7); freq=100; omega=2*pi*freq; sigma1=cpow(complex(0,omega/a1),0.5); sigma2=cpow(complex(0,omega/a2),0.5); sigmag=cpow(complex(0,omega/ag),0.5); r1=B1/sigma1; g=(lambdag*sigmag)/(lambda1*sigma1); S2=(lambda2*sigma2)/(lambda1*sigma1); printf("%f\n",R*Rk); printf("%f\n",Rk); printf("%f\n",lambda1); printf("%f\n",a1); printf("%f\n",l1); printf("%f\n",B1); scanf("%d",&k);// return 0; } そしてcomplex.hです #include <iostream.h> #ifndef __COMPLEX_H__ #define __COMPLEX_H__ class complex{ double r,i,p,w; public: complex(double a=0,double b=0); double real(); double imag(); double omega(); double phai(); friend complex cpow(complex a,double b); friend complex cexp(complex a); friend complex operator +(complex a, complex b); friend complex operator -(complex a, complex b); friend complex operator *(complex a, complex b); friend complex operator /(complex a, complex b); friend int operator ==(complex a, complex b); friend ostream& operator <<(ostream& os, complex& c); friend istream& operator >>(istream& is, complex& c); }; #endif です. extern "C"を使えばよいのでしょうか?(やりかたが間違っているのか,うまくできません) よろしくお願いいたします.

  • γ関数のプログラム(初心者です)

    以下のようにγ関数のプログラムを組みました。 とりあえず整数値を入力すれば、正しい値は返しているということがprintfの4で確認できました。 もとはfortranで組んだプログラムをCに置き換えました。 ですが、実際走らせてみると、4で値は確認できますがsegmentation faultが出てしまいます。 ですからサブルーチンファイル(ユーザー関数?)として利用できません。 何がいけないのでしょうか? 正しくyが帰ってくるようにどうなおしたらよいのか教えてください。 #include <stdio.h> #include <math.h> double gamma(double x) { double c[8],y,a,r,b,s; int i; a=1.; r=1.; c[1]=5.771916e-01; c[2]=9.882058e-01; c[3]=8.970569e-01; c[4]=9.182068e-01; c[5]=7.567040e-01; c[6]=4.821993e-01; c[7]=1.935278e-01; c[8]=3.586834e-02; printf("0 %f\n",x); while(1){ if(x>2.){ x=x-1.; a=a*x; printf("1 %f %f\n",x,a); } else if(x<1.){ a=a/x; x=x+1.; printf("2 %f %f\n",x,a); } else{ break; } } x=x-1.; for(i=1;i<8;i++){ b=(double)(i); s=(c[i]*((double)(pow(-1,b))) *((double)(pow(x,b)))); printf("3 %d %f\n",i,c[i]); r=r+s; } y=a*(r+(0.03586834*((double)(pow(-1,8)))*((double)(pow(x,8))))); printf("4 %f\n",y); return y; } main() { double x,y; printf("数字を入力してください。"); scanf("%lf",&x); printf("メインプログラム %lf\n",x); y=gamma(x); printf("%f\n",y); }

  • 値の渡し方?(初心者)

    以前質問したプログラムについて、新たに質問です。 メインプログラムと、関数プログラムを組みました。 関数の中では、print文を使うと計算は正しく行われていて、結果が正しいことが分かりました。 でうが、メイン文の出力では、どこにも出てこない変な値が出てきてしまいます。 値の渡し方がおかしいのでしょうか? 誰か、アドバイスをお願いします。 ***以下プログラムです。*** #include <stdio.h> #include <math.h> double gamma(double x) { double c[9],y,a,r,b,s,z; int i; a=1.; r=1.; c[1]=5.771916e-01; c[2]=9.882058e-01; c[3]=8.970569e-01; c[4]=9.182068e-01; c[5]=7.567040e-01; c[6]=4.821993e-01; c[7]=1.935278e-01; c[8]=3.586834e-02; printf("0 %f\n",x); while(1){ if(x>2.){ x=x-1.; a=a*x; printf("1 %f %f\n",x,a); } else if(x<1.){ a=a/x; x=x+1.; printf("2 %f %f\n",x,a); } else{ break; } } x=x-1.; for(i=1;i<9;i++){ b=(double)(i); s=(c[i]*((double)(pow(-1.,b)))*((double)(pow(x,b)))); printf("3 %d %f\n",i,c[i]); r=r+s; } y=a*r; printf("4 %lf\n",y); return y; } main() { double x,y; printf("数字を入力してください。"); scanf("%lf",&x); printf("メインプログラム x= %lf \n",x); y=gamma(x); printf("x= %f y= %f\n",x,y); }

  • C++でのプログラムについての質問です

    このような二次関数の解を求めるプログラムを作成したのですが、自作関数solveをvoid solve(double, double, double)のように変更し同じ動作をするように変更したいです どのようにへんこうすればよいでしょうか #include<stdio.h> #include<stdlib.h> #include<math.h> int main(void) { double a, b, c; /*二次方程式の定数*/ double D, x1, x2, r1, r2; printf("ax^2 + bx + c = 0 の係数 a, b, c を入力してください---> \n"); scanf_s("%lf %lf %lf", &a, &b, &c); printf("2次方程式を解いた結果は次の通りとなる。\n"); if (a == 0.0) { if (b == 0.0) { printf("係数がおかしい\n"); exit(-1); } { x1 = -c / b; printf("解は%f です。\n", x1); exit(0); } } else { D = b * b - 4 * a * c; if (D >= 0) { x1 = (-b + sqrt(D)) / (2.0 * a); x2 = (-b - sqrt(D)) / (2.0 * a); if (D == 0.0) { printf("解は %f です。\n", x1); } else { printf("解は %f と %f です。¥n", x1, x2); } } else { r1 = -b / (2 * a); r2 = sqrt(-D) / (2 * a); printf("解は%.2f+%.2fi と%.2f-%.2fi \n", r1, r2, r1, r2); } } return 0; }

  • C言語のプログラムについてですが、

    #include <stdio.h> int main(void) { double r; printf("半径を入力してください:"); scanf("%lf", &r); printf("円周=%f\n", 2.0 * r * 3.14159); printf("円面積=%f\n", r * r * 3.14159); return 0; } 上のC言語のプログラムを参考にして 正三角形一辺を double値でキーボード入力し、次のように高さと 面積を計算するプログラムを教えてください。 よろしくお願いしますl_ω_l 3の平方根は1.73205とします。 [実行結果] ======= 一辺の値を入力してください: 20 高さ=17.320500 面積=173.205000

  • 初めてのC言語 

    半径rで円周をだすプログラムを作りたいのですが作ってみたところ答えが0.00しかでてきません。 どこが間違っているのでしょうか。 #include <stdio.h> #define PI 3.14159265358979 /* 円周率 */ int main(void) { double r,a; printf("r="); scanf("%lf",&r); a=r*2*PI; printf("r*2*PI=%5.2lf\n",a); return 0; }

  • C言語で関数を使う課題でわかりません。

    大学の課題で関数を使って計算したりするプログラムを作るのですが、エラーが出てしまって出来ません。 課題として 自分の学籍番号の末尾2桁の数字(r1)と生年末尾2桁の数字(r2)をキーボードから入力させ、 (1)それらを抵抗値として並列の合成抵抗を求める[R=(r1*r2)/(r1+r2)] (2)電圧100.0Vに対する端子電流値を求める[a=v/R v=100.0] (3)その電力を計算[p=a*v] (4)各抵抗値r1r2、合成抵抗R、電圧V、電流値a、電力値pを画面に表示させる。 上記のものをCで作ってみたところ、下記のようになりました。 ========== #include <stdio.h> double gousei_teikou(double r1,double r2); double get_current(double v,double r); double get_power(double v, double a); double display(double r1,double r2,double r,double v,double a,double p); int main(void) { double r1,r2,r; double v,a; double p; //入力させる printf("学籍番号末尾2桁入力(抵抗r1):"); scanf("%d",&r1); printf("生年(西暦)末尾2桁を入力(抵抗r2):"); scanf("%d",&r2); //合成抵抗を求める gousei_teikou(r1,r2,r); //端子電流値を求める get_current(v,r); //電力を求める get_power(v,a); //すべての結果を表示させる display(r1,r2,r,v,a,p); return 0; } double gousei_teikou(double r1,double r2) { double r; r=(r1*r2)/(r1+r2); return r; } double get_current(double v,double r) { double a; v=100.0; a=v/r; return a; } double get_power(double v, double a) { double p; p=a*v; return p; } double display(double r1,double r2,double r,double v,double a,double p) { printf("抵抗値r1="); printf("%lf",r1); printf("抵抗値r2="); printf("%lf",r2); printf("合成抵抗値r="); printf("%lf\n",r); printf("電圧v="); printf("%lf[V],, ",v); printf("電流値a="); printf("%lf[A],, ",a); printf("電力値p="); printf("%lf[W]\n",p); } ========== するとエラーで『Run-Time Check Failure #3 - The variable 'r' is being used without being initialized.』となります。 よろしくお願いします。

  • c プログラム 

    以下のプログラムは,第n項までのe^xのマクローリン展開をさせるものです. これを修正して,理論値と近似値の誤差がある値(自分で入力)になったときに,計算を終了させるにはどうしたらよいでしょうか.御教授いただければ幸甚 です. ---------------------------------------- #include <stdio.h> #include <math.h> int main(void) { int n; double x=1.0,y=1.0,e=1.0,err; int i; double f=1.0,p=1.0; printf("x="); scanf("%lf",&x); printf("n="); scanf("%d",&n); printf("Mclaurin展開によるn項までのexp(x)の\n n 理論値 近似値 誤差\n"); for(i=1;i<=n;i++){ f*=(double)i; p*=x; y+=p/f;近似値 e=exp(x);理論値 err=e-y;誤差 printf("%2d %12.8e %12.8e %12.8e\n",i,e,y,err); } return 0; }

専門家に質問してみよう