このプログラムのエラーの原因を教えて下さいNo.1
まずはじめに申しますが大変手間をとる回答になるのでそれでも協力してくれる方がいればの質問です・・・。
このプログラムを実行すると、Hdx3no2が宣言なしで使われているとエラーが出るのですが理由がわかりません。どこがおかしいのか教えてもらえると助かります。あまりにも長いので(コンパクトにできていないので)3回の質問に分けてしまいます・・・。そして非常に見にくくて済みません。
#include<stdio.h>
#include<math.h>
int main(void)
{
int L,M,N,A,B,C;
double U1,U2,x,y,z,X,Y,Z,r,ux1,uy1,uz1,ux2,uy2,uz2,Hdx,Hdy,Hdz;
double Hdx1,Hdy1,Hdz1,Hdx2,Hdy2,Hdz2,Hdip1,Hdip2,uB,fai,sita,RAD,a,b,c;
double Hdx3,Hdy3,Hdz3,Hdx3no1,Hdy3no1,Hdz3no1,Hdx3no2,Hdy3no2,Hdz3no2;
double Hdx4,Hdy4,Hdz4,Hdx4no1,Hdy4no1,Hdz4no1,Hdx4no2,Hdy4no2,Hdz4no2;
double Px1,Py1,Pz1,Px2,Py2,Pz2,THDX11,THDY11,THDZ11;
double THDX12,THDY12,THDZ12,THDX21,THDY21,THDZ21;
double THDX22,THDY22,THDZ22,R,gamma,Beta,CPA,CPB,CPC,upper,lower;
uB=9.274;
U1=3.41*uB; U2=-U1;
RAD=3.14159265358979/180;
a=7.256; b=8.575; c=3.544;
Beta=7.55*RAD;
CPA=0.0604; CPB=0.3; CPC=0.156;
//プロトンの位置
Px1=CPA*a*cos(Beta); Py1=CPB*b; Pz1=CPC*c-CPA*a*sin(Beta);
Px2=-Px1; Py2=Py1; Pz2=-Pz1;
sita=90*RAD;
fai=90*RAD;
THDX11=0; THDY11=0; THDZ11=0; THDX12=0; THDY12=0; THDZ12=0;
THDX21=0; THDY21=0; THDZ21=0; THDX22=0; THDY22=0; THDZ22=0;
R=6;
gamma=4.25775;
A=(R/a)+1; B=(R/b)+1; C=(R/c)+1;
ux1=U1*sin(sita)*cos(fai);
uy1=U1*sin(sita)*sin(fai);
uz1=U1*cos(sita);
ux2=U2*sin(sita)*cos(fai);
uy2=U2*sin(sita)*sin(fai);
uz2=U2*cos(sita);
//upper
//U1のとき
for(L=-A;L<=A;L++)
{
for(M=-B;M<=B;M++)
{
for(N=-C;N<=C;N++)
{
x=L*a*cos(Beta); y=M*b; z=N*c-L*a*sin(Beta);
X=x-Px1; Y=y-Py1; Z=z-Pz1;
r=sqrt((X*X)+(Y*Y)+(Z*Z));
if(r<R&&L!=0&&M!=0&&N!=-1||L!=0&&M!=0&&N!=0||L!=0&&M!=0&&N!=1){
Hdx=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdy=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdz=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
THDX11=THDX11+Hdx;
THDY11=THDY11+Hdy;
THDZ11=THDZ11+Hdz;
printf("L=%d M=%d N=%d R=%lf\nAAA\n",L,M,N,r);
}
else if(L==0&&M==0&&N==-1||L==0&&M==0&&N==0||L==0&&M==0&&N==1){
Hdx3no1=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdy3no1=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdz3no1=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
}
else{
continue;
}
}
}
}
//U2のとき
for(L=-A;L<=A;L++)
{
for(M=-B;M<=B;M++)
{
for(N=-C;N<=C;N++)
{
x=(2*L+1)*a*cos(Beta)/2; y=M*b+b/2; z=N*c-((2*L+1)*a*sin(Beta))/2;
X=x-Px1; Y=y-Py1; Z=z-Pz1;
r=sqrt((X*X)+(Y*Y)+(Z*Z));
if(r<R&&L!=-1&&M!=0&&N!=-1||L!=-1&&M!=0&&N!=0||L!=-1&&M!=0&&N!=1){
if(L!=0&&M!=0&&N!=-1||L!=0&&M!=0&&N!=0||L!=0&&M!=0&&N!=1){
Hdx=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2+Z)/pow(r,5));
Hdy=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2+Z)/pow(r,5));
Hdz=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2+Z)/pow(r,5));
THDX12=THDX12+Hdx;
THDY12=THDY12+Hdy;
THDZ12=THDZ12+Hdz;
printf("L=%d M=%d N=%d R=%lf\nBBB\n",L,M,N,r);
}
}
else if(L==-1&&M==0&&N==-1||L==-1&&M==0&&N==0||L==-1&&M==0&&N==1){
if(L==0&&M==0&&N==-1||L==0&&M==0&&N==0||L==0&&M==0&&N==1){
Hdx3no2=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5));
Hdy3no2=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5));
Hdz3no2=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5));
}
}
else{
continue;
}
}
}
}
これをNo.1として続きのプログラムをNo.2に挙げます。
お礼
そうですね、doループを実行した結果nが求まるといった表現が正しいですね。勉強不足ですみません。ご指摘ありがとうございました。