このプログラムの実行結果についてお助け下さい1
まずはじめに申しますが大変手間をとる回答になるのでそれでも協力してくれる方がいればの質問です・・・。
このプログラムを実行すると、upperのU1、U2と、lowerのU1、U2の結果において、最後のelseの中のプログラムが実行されていないせいで、「ここまでが~」が表示されるだけになり、「抜き出した~」の前の実行結果が初期値通り0になってしまっています。何故どれも最後のelse文が実行されないのか・・・お教え頂けると助かります。あまりにも長いので(コンパクトにできていないので)2回の質問に分けてしまいます・・・。そして非常に見にくくて済みません
#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,Hdip3,Hdip4,Hdip5,Hdip6,uB,fai,sita,RAD,a,b,c;
double Hdx3,Hdy3,Hdz3,Hdx4,Hdy4,Hdz4,Hdx5,Hdy5,Hdz5;
double Hdx6,Hdy6,Hdz6,Hdx7,Hdy7,Hdz7,Hdx8,Hdy8,Hdz8;
double Hdx9,Hdy9,Hdz9,Hdx10,Hdy10,Hdz10,Hdx11,Hdy11,Hdz11;
double Hdx12,Hdy12,Hdz12,Hdx13,Hdy13,Hdz13,Hdx14,Hdy14,Hdz14;
double Hdx15,Hdy15,Hdz15,Hdx16,Hdy16,Hdz16,Hdx17,Hdy17,Hdz17;
double Hdx18,Hdy18,Hdz18,Hdx19,Hdy19,Hdz19,Hdx20,Hdy20,Hdz20;
double Hdx21,Hdy21,Hdz21,Hdx22,Hdy22,Hdz22;
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;
Hdx5=0; Hdy5=0; Hdz5=0; Hdx6=0; Hdy6=0; Hdz6=0; Hdx7=0; Hdy7=0; Hdz7=0; Hdx8=0; Hdy8=0; Hdz8=0; Hdx9=0; Hdy9=0; Hdz9=0;
Hdx15=0; Hdy15=0; Hdz15=0; Hdx16=0; Hdy16=0; Hdz16=0; Hdx17=0; Hdy17=0; Hdz17=0; Hdx18=0; Hdy18=0; Hdz18=0; Hdx19=0; Hdy19=0; Hdz19=0;
THDX11=0; THDY11=0; THDZ11=0; THDX12=0; THDY12=0; THDZ12=0; Hdx4=0; Hdy4=0; Hdz4=0; Hdx10=0; Hdy10=0; Hdz10=0;
THDX21=0; THDY21=0; THDZ21=0; THDX22=0; THDY22=0; THDZ22=0; Hdx14=0; Hdy14=0; Hdz14=0; Hdx20=0; Hdy20=0; Hdz20=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){
if(L==0&&M==0&&N==0){
Hdx1=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdy1=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdz1=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
}
else if(L==0&&M==0&&N==1){
Hdx2=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdy2=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdz2=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
}
else if(L==0&&M==0&&N==-1){
Hdx3=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdy3=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
Hdz3=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5));
}
else{
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\n",L,M,N,r);
}
}
}
}
}
Hdx4=Hdx1+Hdx2+Hdx3;
Hdy4=Hdy1+Hdy2+Hdy3;
Hdz4=Hdz1+Hdz2+Hdz3;
printf("ここまでがupperのU1の時のL,M,N、それぞれの値\n");
続きを2に載せます。
お礼
そうですね、式で得られる値はスカラーだから配列に関する質問はおかしいですね。納得しました。ありがとうございました。