まずはじめに申しますが大変手間をとる回答になるのでそれでも協力してくれる方がいればの質問です・・・。

このプログラムを実行すると、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に載せます。

A 回答 (1件)

> 何故どれも最後のelse文が実行されないのか



それはそのようにプログラムされているから。
for (L = -A; L <= A; L++){for (M = -B; M <= B; M++){for (N = -C; N <= C; N++){
の3重ループで合計45回回るようだけど,そのうち
if (r < R){
を満たすのは
L == -1 && M == 0 && N == -1
L == -1 && M == 0 && N == 0
L == -1 && M == 0 && N == 1
L == 0 && M == 0 && N == -1
L == 0 && M == 0 && N == 0
L == 0 && M == 0 && N == 1
の場合しかないのだからelseにはひっかからない。
    • good
    • 0
この回答へのお礼

もう一度実行してみるとTHD〇12とTHD〇22のみ値が出て、THD〇11とTHD〇21が0になりました。12と22の値のみでその後のHd〇やHdip、upper、lowerの値が出てしまい、結果的に低くなってしまいました。Rを6から10へ変えてみました。すると11も21も出ました。しかしHdipやupper、lowerは値が変化しませんでした。おそらく間違った数値になりました。
Rの範囲を広げた所でelseにおいてのループでやはりひっかかっていない計算があるようです・・・。
解決には至りませんでしたが回答有難うございます。

お礼日時:2014/11/10 12:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!

  • 基本情報技術者試験の言語ってどうやって選ぶ?

    SEを目指す場合、基本情報技術者試験を経て実務に就いた人も多いのではないでしょうか。教えて!gooにはSEを目指している質問者からこんな質問が寄せられました。 「基本情報技術者試験のC言語とJavaの違い?」 将...

  • エルフ田さん:第70話「絵と向き合うということ」

    エルフ(ファンタジーとかに出てくる長寿の種族)の「エルフ田」と、ただの人間である女子社員2人による日常ギャグ。エルフならではのズレたツッコミでバシバシ人間界の話題を斬っていきます。

  • たまランチ:第46話「エビチリ」

    外ランチを愛してやまない元気な女子社員・たまちゃん(26)。オシャレなお店より「安くておいしい」お店が大好き! そんな女子力低めなたまちゃんの、色気より食い気な日々をつづります。

  • 女子必見!2016年のトレンド水着最新ナビ

    夏目前、今年もデパートでは水着がお目見えするようになった。「教えて!goo」には、スタイルに自信の無いという女性から「どんな水着を買えばいいのか わかりません」という質問が。これに対し、「ワンピースは、生...

  • ポイっと捨てる前に…卵の殻でふきんを漂白できるか実験してみた

    毎日のように出るゴミのひとつに卵の殻がある。捨てるたびにこれが何かに使えないかと思っていた。そこで「教えて!goo」で「卵の殻の処分について」という質問を発見。さっそく、のぞいてみると卵の殻の再利用につ...

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ