抵抗R、コイルL、コンデンサCの値を与え、これらRLC直列回路の複素インピーダンス....Mon, 25 Jan 2010 10:42:30 +0900
抵抗R、コイルL、コンデンサCの値を与え、これらRLC直列回路の複素インピーダンスを共振周波数の1/10~10倍程度の範囲で数値計算し、データの組として出力するプログラムを作成するために、#include <stdio.h>double resonance(double x,double y){ return(1/2*3.14*(x*y)^(1/2);}int main(void) { double r,l,c; double r_abs,l_abs,c_abs; double R; double f0; printf("put r"); fflush(stdout); scanf("%lf",&r); printf("put l"); fflush(stdout); scanf("%lf",&l); printf("put c"); fflush(stdout); scanf("%lf",&c); if(l==0||c==0){ R=0,X=0; } if(l<0){ r_abs=r; l_abs=-l; c_abs=c; } if(c<0){ r_abs=r; l_abs=l; c_abs=-c; } if(r<0&&c<0){ r_abs=r; l_abs=-l; c_abs=-c; } f0=resonance(l_abs,c_abs); double n[]={f0/10,f0*2/10,f0*3/10,f0*4/10,f0*5/10,f0/10,f0*6/10,f0*7/10,f0*8/10,f0*9/10,f0,f0*2,f0*3,f0*4,f0*5,f0*6,f0*7,f0*8,f0*9,f0*10}; R=r_abs; double X[]=(n[]*2*3.14*l_abs)-1/(l_abs*)*c_abs; printf("周波数%d,Z=%lf+j%lf",n[],R,X[]); return 0;}のようなプログラムを書いたのですが、if(l==0||c==0){ R=0,X=0; }double n[]={f0/10,f0*2/10,f0*3/10,f0*4/10,f0*5/10,f0/10,f0*6/10,f0*7/10,f0*8/10,f0*9/10,f0,f0*2,f0*3,f0*4,f0*5,f0*6,f0*7,f0*8,f0*9,f0*10};double X[]=(n[]*2*3.14*l_abs)-1/(l_abs*)*c_abs;printf("周波数%d,Z=%lf+j%lf",n[],R,X[]);return(1/2*3.14*(x*y)^(1/2);にエラーが出てしまうのですがなぜだかわからないので、教えていただけませんか?
再び質問します。抵抗R、コイルL、コンデンサCの値を与え、これらRLC直列回路の複....Mon, 25 Jan 2010 22:01:33 +0900
再び質問します。抵抗R、コイルL、コンデンサCの値を与え、これらRLC直列回路の複素インピーダンスを共振周波数の1/10~10倍程度の範囲で数値計算し、データの組として出力するプログラムを作成するプログラムで、#include <stdio.h>#include <ctype.h>double resonance(double x,double y){ double f=(1/2)*3.14*(x*y);return f;}int main(void) {double r,l,c;double r_abs,l_abs,c_abs;double R;double f0;int i,p;printf("put r");fflush(stdout);scanf("%lf",&r);printf("put l");fflush(stdout);scanf("%lf",&l);printf("put c");fflush(stdout);scanf("%lf",&c);if(isdigit(r) !=0||isdigit(l)!=0||isdigit(c)!=0){ printf("error"); return 0;}if(l==0||c==0){printf("error");return 0;}if(l<0){r_abs=r;l_abs=-l;c_abs=c;}if(c<0){r_abs=r;l_abs=l;c_abs=-c;}if(r<0&&c<0){r_abs=r;l_abs=-l;c_abs=-c;}else{ r_abs=r; l_abs=l; c_abs=c;}f0=resonance(l_abs,c_abs);double n[19];n[1]=f0/10;n[2]=f0*2/10;n[3]=f0*3/10;n[4]=f0*4/10;n[5]=f0*5/10;n[6]=f0*6/10;n[7]=f0*7/10;n[8]=f0*8/10;n[9]=f0*9/10;n[10]=f0;n[11]=f0*2;n[12]=f0*3;n[13]=f0*4;n[14]=f0*5;n[15]=f0*6;n[16]=f0*7;n[17]=f0*8;n[18]=f0*9;n[19]=f0*10;R=r_abs;double X[19];for (i = 1; i < 20; i++){X[i] = n[i]*2*3.14*l_abs - 1/n[i]*c_abs;}for (p = 1; p < 20; p++){printf("周波数%lf,Z=%lf+j%lf\¥n",n[p],R,X[p]);}return 0;}で、関数でfを返すときに、なぜか計算した値でなくて、0を返してるから計算が狂うので、なぜそうなるか教えもらえませんか?それと(x*y)^(1/2)とする方法と、ifで数字以外をはじいているつもりなのになぜかはじけないのはなぜか教えていただけませんか?