このプログラムのエラーの原因を教えて下さい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に挙げます。
お礼
返答ありがとうございます。 何を見て判断していたか、プログラムの資料がほとんどないので わからないかもしれませんがそのあたりも今一度見直して見ます。 再び回答ありがとうございます。 調べてみたところ着座の確認のようなのでそのあたり わかる方(電気等)に調べてもらいます。