プログラムのエラー原因教えてください

このQ&Aのポイント
  • このプログラムを実行すると、Hdx3no2が宣言なしで使われているとエラーが出るのですが理由がわかりません。
  • プログラムは非常に長く、コンパクトになっていないため、質問を3回に分けます。
  • また、プログラムの見やすさについてもお詫び申し上げます。
回答を見る
  • ベストアンサー

このプログラムのエラーの原因を教えて下さい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に挙げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

あと、そこが解決すれば終り、では無いと思われます。 期待通りかどうか、ちゃんと確認しましょう。 計算結果が出ていることと、それが正しいかどうかは、無関係です。 Hdx3no2=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); や、同様の箇所ですが、例えば if(L==0&&M==0&&N==-1||L==0&&M==0&&N==0||L==0&&M==0&&N==1) だと、ループ中 L==0, M==0, N==-1 L==0, M==0, N==0 L==0, M==0, N==1 の3回実行されます。 その最後の結果だけが記録され、他は上書きされています。 よって Hdx3=Hdx3no1+Hdx3no2; で使われるのは、最後の値だけです。 それって、正しいのでしょうか?

scottish1246
質問者

お礼

回答有難うございます!正に指摘された通りの間違いでした!更に計算結果の間違いの指摘も大助かりでした! おかげで正しい結果を出せる実行ができました! 後コピー等の事は原因ではありませんでしたが過去にその事でミスがあったりしたので、今回はそれがなかっただけですけど、以後気を付けようと、肝に命じようと思います・・・。 他の方々も有難うございました! 気持ちよく全て解決しました!

その他の回答 (4)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

Hdx3no2に値を代入しているのは Hdx3no2=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); この一箇所だけですが、実際には、この行は実行されていません。 ここにブレークポイントを置いてデバッグ実行すれば、素通りしているのがわかるはずです。 よって、変数Hdx3no2には何が入っているか不定です。 本来のCでは、そういう「不定」の状態でも関係無く動作します。おそらく、正しい結果は得られません。 GCCを使った方々が「実行」できているのは、そういう理由からです。 Visual Studioのデバッグモードでは、そういう初期化されていない変数を使おうとすると、エラーか警告になったと記憶しています。 ここに来るのは 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){ という2つのifがともに真のときだけです。 ですが、前者はL==-1である必要があり、後者はL==0である必要があるので、矛盾するので、常に偽です。 よって、実行されない、ということです。 コンパイラでエラーと判断できるのは、文法間違い等の表面的なものだけです。 内容のチェックはできません。 コンパイルエラーが無いことと、プログラムが正しいこととは、別次元だと考えてください。 プログラムを正しく作るコツは 「コピペしない」 「面倒くさいことはしない」 「楽するための努力は惜しまない」 です。 おそらく、U1のときのものをコピーして使ったのではないか、と思われますが、そのとき余計な「if(L==0....」まで一緒にしてしまったとかではないでしょうか? コピペは便利なのですが、つい「自分は正しく修正した」と思いこんでしまって、間違いに気付きにくいものです。 コピペ禁止にすれば、全部手で入力することになります。 そうすると「同じものばっかり入力して面倒くさい」と思えてくるでしょう。 それが正しい反応です。 そういう時に、マジメにこなすのではなく、「楽する方法」を考えます。 例えば  if(L==-1&&M==0&&N==-1||L==-1&&M==0&&N==0||L==-1&&M==0&&N==1){ ですが、論理式の法則を使って  if( (L==-1)&&(M==0) &&((N==-1)||(N==0)||(N==1)) ){ と書けます。さらに、Nが整数であることを使えば  if( (L==-1)&&(M==0) &&(abs(N)<=1) ){ となります。同様に  if(L==0&&M==0&&N==-1||L==0&&M==0&&N==0||L==0&&M==0&&N==1){ は  if( (L==0)&&(M==0) &&(abs(N)<=1) ){ となります。 これだけでも、大分入力が楽になりました。 さらに。 前のifが成立しているのなら、 (M==0) &&(abs(N)<=1) が成立していることは明白です。よって、   if(L==0){ だけでよくなります。 続けると  if( (L==-1)&&(M==0) &&(abs(N)<=1) ){   if(L==0){ となります。 これだと、入力が1/3以下になってるし、ちょっと見ただけで「おかしいぞ」と気付くのでは? 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; も、構造体と関数とを使って keisan(&Hd, r, u1, xyz); addVector(&THD11,Hd); などとすれば、例えば THDY11=THDY11+Hdx; // Hdyへの変更忘れ 等の間違いを防ぐことができます。 こうやっていけば、このプログラムは1/4くらいになります。 そうすれば、今回みたいに分割しないでも済みます。

  • honor
  • ベストアンサー率35% (25/71)
回答No.3

releaseでデバッグしようとしているとかではないですか。

scottish1246
質問者

お礼

回答有難うございます!解決しました!

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

わたしも正常に動作しました。 (Windows MinGW gcc 4.7.2) 以下、実行時の内容です。ファイル名はgoo1.cです。 C:\goo>gcc --version gcc (GCC) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. C:\goo>gcc goo1.c コンパイルエラーなし。 実行結果 ----------------------------------- C:\goo>goo1.exe L=-1 M=-1 N=-2 R=15.046662 AAA L=-1 M=-1 N=-1 R=13.855295 AAA L=-1 M=-1 N=0 R=13.515038 AAA L=-1 M=-1 N=1 R=14.087695 AAA L=-1 M=-1 N=2 R=15.472232 AAA L=-1 M=1 N=-2 R=11.754373 AAA L=-1 M=1 N=-1 R=10.184913 AAA L=-1 M=1 N=0 R=9.716969 AAA L=-1 M=1 N=1 R=10.498877 AAA L=-1 M=1 N=2 R=12.294438 AAA L=1 M=-1 N=-2 R=15.582694 AAA L=1 M=-1 N=-1 R=13.959673 AAA L=1 M=-1 N=0 R=13.116572 AAA L=1 M=-1 N=1 R=13.203648 AAA L=1 M=-1 N=2 R=14.203805 AAA L=1 M=1 N=-2 R=12.433165 AAA L=1 M=1 N=-1 R=10.326457 AAA L=1 M=1 N=0 R=9.154655 AAA L=1 M=1 N=1 R=9.278986 AAA L=1 M=1 N=2 R=10.654169 AAA L=1 M=-1 N=-2 R=15.346977 BBB L=1 M=-1 N=-1 R=13.572143 BBB L=1 M=-1 N=0 R=12.569657 BBB L=1 M=-1 N=1 R=12.526348 BBB L=1 M=-1 N=2 R=13.451482 BBB L=1 M=1 N=-2 R=17.156754 BBB L=1 M=1 N=-1 R=15.589341 BBB L=1 M=1 N=0 R=14.724836 BBB L=1 M=1 N=1 R=14.687882 BBB L=1 M=1 N=2 R=15.484407 BBB L=-1 M=-1 N=-2 R=14.203805 CCC L=-1 M=-1 N=-1 R=13.203648 CCC L=-1 M=-1 N=0 R=13.116572 CCC L=-1 M=-1 N=1 R=13.959673 CCC L=-1 M=-1 N=2 R=15.582694 CCC L=-1 M=1 N=-2 R=10.654169 CCC L=-1 M=1 N=-1 R=9.278986 CCC L=-1 M=1 N=0 R=9.154655 CCC L=-1 M=1 N=1 R=10.326457 CCC L=-1 M=1 N=2 R=12.433165 CCC L=1 M=-1 N=-2 R=15.472232 CCC L=1 M=-1 N=-1 R=14.087695 CCC L=1 M=-1 N=0 R=13.515038 CCC L=1 M=-1 N=1 R=13.855295 CCC L=1 M=-1 N=2 R=15.046662 CCC L=1 M=1 N=-2 R=12.294438 CCC L=1 M=1 N=-1 R=10.498877 CCC L=1 M=1 N=0 R=9.716969 CCC L=1 M=1 N=1 R=10.184913 CCC L=1 M=1 N=2 R=11.754373 CCC L=1 M=-1 N=-2 R=15.407958 DDD L=1 M=-1 N=-1 R=13.896029 DDD L=1 M=-1 N=0 R=13.187644 DDD L=1 M=-1 N=1 R=13.410747 DDD L=1 M=-1 N=2 R=14.522473 DDD L=1 M=1 N=-2 R=17.211324 DDD L=1 M=1 N=-1 R=15.872118 DDD L=1 M=1 N=0 R=15.255768 DDD L=1 M=1 N=1 R=15.449034 DDD L=1 M=1 N=2 R=16.423359 DDD THDX11は2.886494e-002です。 THDY11は1.145482e-001です。 THDZ11は-3.674307e-003です THDX12は2.208966e-002です。 THDY12は-2.489449e-003です THDZ12は-5.727889e-006です THDX21は-2.886494e-002です THDY21は1.145482e-001です。 THDZ21は3.674307e-003です。 THDX22は1.595915e-002です。 THDY22は5.632938e-003です。 THDZ22は-3.403878e-004です Hdx1は5.095460e-002です。 Hdy1は1.120588e-001です。 Hdz1は-3.680034e-003です。 Hdx2は-1.290579e-002です。 Hdy2は1.201812e-001です。 Hdz2は3.333919e-003です。 Hdip1は1.231547e-001です。 Hdip2は1.209181e-001です。 upperは5.243620e-001です。 lowerは5.148391e-001です。 upperは3.158141e+000です。 lowerは1.#INF00e+000です。 -------------------------------- 以上。

scottish1246
質問者

お礼

まさに出したかった結果です!・・・なぜかこちらは、コンパイルでは正常に終了するのにデバッグするとHdx3no2が宣言なしで使われていると言われ正常に実行できないです・・・ともあれ回答有難うございます。 (最後のインフィニはプログラムとしてミスですけど)

  • f272
  • ベストアンサー率46% (8010/17118)
回答No.1

gcc 4.8.2 でコンパイルしてみたけどエラーはなく動くみたいだよ。

scottish1246
質問者

お礼

回答有難うございます。エラー・・・出ませんでしたか。Visual Studio 2010でコンパイルした結果正常終了はするのですがその後デバッグするとHdx3no2が宣言なしで使われていると言ってくるのですが・・・ そもそもそんなエラーが出るはずはないですし・・・ちょっとエラーの正体が不明ですね・・・

関連するQ&A

  • このプログラムの実行結果についてお助け下さい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に載せます。

  • このプログラムの実行結果についてお助け下さい2

    //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-Px2; Y=y-Py2; Z=z-Pz2; r=sqrt((X*X)+(Y*Y)+(Z*Z)); if(r<R){ if(L==0&&M==0&&N==0){ Hdx15=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy15=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz15=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==-1&&M==0&&N==0){ Hdx16=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy16=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz16=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==0&&M==0&&N==1){ Hdx17=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy17=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz17=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==-1&&M==0&&N==1){ Hdx18=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy18=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz18=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L=-1&&M==0&&N==-1){ Hdx19=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy19=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz19=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else{ 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)); THDX22=THDX22+Hdx; THDY22=THDY22+Hdy; THDZ22=THDZ22+Hdz; printf("L=%d M=%d N=%d R=%lf\n",L,M,N,r); } } } } } Hdx20=Hdx15+Hdx16+Hdx17+Hdx18+Hdx19; Hdy20=Hdy15+Hdy16+Hdy17+Hdy18+Hdy19; Hdz20=Hdz15+Hdz16+Hdz17+Hdz18+Hdz19; printf("ここまでがlowerのU2の時のL,M,N、それぞれの値\n"); printf("THDX11は%eです。\n",THDX11); printf("THDY11は%eです。\n",THDY11); printf("THDZ11は%eです。\n",THDZ11); printf("THDX12は%eです。\n",THDX12); printf("THDY12は%eです。\n",THDY12); printf("THDZ12は%eです。\n",THDZ12); printf("THDX21は%eです。\n",THDX21); printf("THDY21は%eです。\n",THDY21); printf("THDZ21は%eです。\n",THDZ21); printf("THDX22は%eです。\n",THDX22); printf("THDY22は%eです。\n",THDY22); printf("THDZ22は%eです。\n",THDZ22); printf("\n"); Hdx21=THDX11+THDX12; Hdy21=THDY11+THDY12; Hdz21=THDZ11+THDZ12; Hdx22=THDX21+THDX22; Hdy22=THDY21+THDY22; Hdz22=THDZ21+THDZ22; printf("Hdx21は%eです。\n",Hdx21); printf("Hdy21は%eです。\n",Hdy21); printf("Hdz21は%eです。\n",Hdz21); printf("Hdx22は%eです。\n",Hdx22); printf("Hdy22は%eです。\n",Hdy22); printf("Hdz22は%eです。\n",Hdz22); Hdip1=sqrt((Hdx21*Hdx21)+(Hdy21*Hdy21)+(Hdz21*Hdz21)); Hdip2=sqrt((Hdx22*Hdx22)+(Hdy22*Hdy22)+(Hdz22*Hdz22)); printf("Hdip1は%eです。\n",Hdip1); printf("Hdip2は%eです。\n",Hdip2); upper=Hdip1*gamma; lower=Hdip2*gamma; printf("upperは%eです。\n",upper); printf("lowerは%eです。\n",lower); upper=0; lower=0; Hdip3=sqrt((Hdx4*Hdx4)+(Hdy4*Hdy4)+(Hdz4*Hdz4)+(Hdx10*Hdx10)+(Hdy10*Hdy10)+(Hdz10*Hdz10)); Hdip4=sqrt((Hdx14*Hdx14)+(Hdy14*Hdy14)+(Hdz14*Hdz14)+(Hdx20*Hdx20)+(Hdy20*Hdy20)+(Hdz20*Hdz20)); printf("抜き出した8個の原子の総合の磁場は、upperの方のHdip3は、%lf、\nlowerの方のHdip4は%lfです。\n",Hdip3,Hdip4); printf("これらを、また元の結晶に戻した時、\n"); upper=0;lower=0; Hdip5=sqrt((Hdx21*Hdx21)+(Hdy21*Hdy21)+(Hdz21*Hdz21)+(Hdx4*Hdx4)+(Hdy4*Hdy4)+(Hdz4*Hdz4)+(Hdx10*Hdx10)+(Hdy10*Hdy10)+(Hdz10*Hdz10)); Hdip6=sqrt((Hdx22*Hdx22)+(Hdy22*Hdy22)+(Hdz22*Hdz22)+(Hdx14*Hdx14)+(Hdy14*Hdy14)+(Hdz14*Hdz14)+(Hdx20*Hdx20)+(Hdy20*Hdy20)+(Hdz20*Hdz20)); upper=Hdip5*gamma; lower=Hdip6*gamma; printf("upperは%eです。\n",upper); printf("lowerは%eです。\n",lower); 以上です・・・。

  • このプログラムの実行結果についてお助け下さい2

    2、続きです。 ちなみに以前に同じ質問を投稿し、回答を頂いてそこを直すと正しく実行できたと勘違いして質問を終わらせてしまいました・・・。 //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-Px2; Y=y-Py2; Z=z-Pz2; r=sqrt((X*X)+(Y*Y)+(Z*Z)); if(r<R){ if(L==0&&M==0&&N==0){ Hdx15=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy15=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz15=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==-1&&M==0&&N==0){ Hdx16=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy16=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz16=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==0&&M==0&&N==1){ Hdx17=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy17=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz17=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==-1&&M==0&&N==1){ Hdx18=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy18=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz18=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L=-1&&M==0&&N==-1){ Hdx19=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy19=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz19=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else{ 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)); THDX22=THDX22+Hdx; THDY22=THDY22+Hdy; THDZ22=THDZ22+Hdz; printf("L=%d M=%d N=%d R=%lf\n",L,M,N,r); } } } } } Hdx20=Hdx15+Hdx16+Hdx17+Hdx18+Hdx19; Hdy20=Hdy15+Hdy16+Hdy17+Hdy18+Hdy19; Hdz20=Hdz15+Hdz16+Hdz17+Hdz18+Hdz19; printf("ここまでがlowerのU2の時のL,M,N、それぞれの値\n"); printf("THDX11は%eです。\n",THDX11); printf("THDY11は%eです。\n",THDY11); printf("THDZ11は%eです。\n",THDZ11); printf("THDX12は%eです。\n",THDX12); printf("THDY12は%eです。\n",THDY12); printf("THDZ12は%eです。\n",THDZ12); printf("THDX21は%eです。\n",THDX21); printf("THDY21は%eです。\n",THDY21); printf("THDZ21は%eです。\n",THDZ21); printf("THDX22は%eです。\n",THDX22); printf("THDY22は%eです。\n",THDY22); printf("THDZ22は%eです。\n",THDZ22); printf("\n"); Hdx21=THDX11+THDX12; Hdy21=THDY11+THDY12; Hdz21=THDZ11+THDZ12; Hdx22=THDX21+THDX22; Hdy22=THDY21+THDY22; Hdz22=THDZ21+THDZ22; printf("Hdx21は%eです。\n",Hdx21); printf("Hdy21は%eです。\n",Hdy21); printf("Hdz21は%eです。\n",Hdz21); printf("Hdx22は%eです。\n",Hdx22); printf("Hdy22は%eです。\n",Hdy22); printf("Hdz22は%eです。\n",Hdz22); Hdip1=sqrt((Hdx21*Hdx21)+(Hdy21*Hdy21)+(Hdz21*Hdz21)); Hdip2=sqrt((Hdx22*Hdx22)+(Hdy22*Hdy22)+(Hdz22*Hdz22)); printf("Hdip1は%eです。\n",Hdip1); printf("Hdip2は%eです。\n",Hdip2); upper=Hdip1*gamma; lower=Hdip2*gamma; printf("upperは%eです。\n",upper); printf("lowerは%eです。\n",lower); upper=0; lower=0; Hdip3=sqrt((Hdx4*Hdx4)+(Hdy4*Hdy4)+(Hdz4*Hdz4)+(Hdx10*Hdx10)+(Hdy10*Hdy10)+(Hdz10*Hdz10)); Hdip4=sqrt((Hdx14*Hdx14)+(Hdy14*Hdy14)+(Hdz14*Hdz14)+(Hdx20*Hdx20)+(Hdy20*Hdy20)+(Hdz20*Hdz20)); printf("抜き出した8個の原子の総合の磁場は、upperの方のHdip3は、%lf、\nlowerの方のHdip4は%lfです。\n",Hdip3,Hdip4); printf("これらを、また元の結晶に戻した時、\n"); upper=0;lower=0; Hdip5=sqrt((Hdx21*Hdx21)+(Hdy21*Hdy21)+(Hdz21*Hdz21)+(Hdx4*Hdx4)+(Hdy4*Hdy4)+(Hdz4*Hdz4)+(Hdx10*Hdx10)+(Hdy10*Hdy10)+(Hdz10*Hdz10)); Hdip6=sqrt((Hdx22*Hdx22)+(Hdy22*Hdy22)+(Hdz22*Hdz22)+(Hdx14*Hdx14)+(Hdy14*Hdy14)+(Hdz14*Hdz14)+(Hdx20*Hdx20)+(Hdy20*Hdy20)+(Hdz20*Hdz20)); upper=Hdip5*gamma; lower=Hdip6*gamma; printf("upperは%eです。\n",upper); printf("lowerは%eです。\n",lower); 以上です・・・。

  • 方向微分係数の説明が理解できません

     48歳の会社員です。裳華房の「基礎解析学コース ベクトル解析」を使って ベクトル解析を勉強しているのですが、22頁にある方向微分係数の説明がどう しても理解できません。  理解できない部分の画像を添付しましたが、(1)の式が(2)の式になる過程と (2)の式の [ ]t=0 (鍵括弧と鍵括弧の外にある「t=0」)の意味が分かりません。  (2)の [ ] (鍵括弧)の中の式は d/dt φ(x + t * ux, y + t * uy, z + t * uz) = lim h→0 (φ(x + (t + h) * ux, y + (t + h) * uy, z + (t + h) * uz) - φ(x + t * ux, y + t * uy, z + t * uz)) / h と考えたのですが、下の(1)の式にすることができません。 dφ/du = lim t→0 (φ(x + t * ux, y + t * uy, z + t * uz) - φ(x, y, z)) / t  (1)の式を(2)の式にすることができれば、 X = x + t * ux, Y = y + t * uy, Z = z + t * uz として、 φ(x + t * ux, y + t * uy, z + t * uz) を φ(X, Y, Z) に置き換え、 dφ/du = ∂φ/∂X * dX/dt + ∂φ/∂Y * dY/dt + ∂φ/∂Z * dZ/dt = ∂φ/∂X * ux + ∂φ/∂Y * uy + ∂φ/∂Z * uz = ∂φ/∂x * ux + ∂φ/∂y * uy + ∂φ/∂z * uz と(3)の式にすると理解しているのですが、この流れで合っているでしょうか ?  独学で勉強しており周りに聞ける人がいないため、ご教示いただければ幸いです。

  • 複素関数の質問です。

    問題の(1)と(2)はこれであっていますか? (3)と(4)が分からなかったので教えていただきたいです。 よろしくお願いします。 (1) f(z)=u(x,y)+iv(x,y)とする。 コーシーリーマンの関係式より ux=vy, uy=-vx-(1) またf(z~)=u(x,v)-iv(x,y)より ux=-vy, uy=vx よってux=uy=vx=vy=0となるので、u(x,y)とv(x,y)は定数となり、f(z)は定数。 (2) |f(z)|=√u^2(x,y)+v^2(x,y) g(x,y)=|f(z)|=√u^2(x,y)+v^2(x,y)とすると gx=(ux+uy)/g(x,y) gy=(vx+vy)/g(x,y) g(x,y)は定数なので ux=-uy, vx=-vy これらと(1)からux=uy=vx=vy=0となるので、u(x,y)とv(x,y)は定数となり、f(z)は定数。

  • ベクトル解析(独学)、∇fの定義

    z=f(x、y)に対し、対応する地点(x、y、f(x、y))の傾斜を考える。 xy平面上で、(x、y)を通る単位方向ベクトルu=(ux,xy)の方向を向いた直線l (x+s(ux),y+s(uy))(sはパラメーター)を考え、この直線を含むxy平面に垂直な平面とfが交わって出来る曲線に沿って、(x,y,f(x,y))から、(x+s(ux),y+s(uy)、f(x+s(ux),y+s(uy))まで動いたとき、この間の平均傾斜は {f(x+s(ux),y+s(uy))-f(x,y)}/sだから、(x,y)での傾斜は(画像の6.1)であり、 6.1は(u内積V)と画像にあるのですが、6.1から(u内積V)を導いている式変形がよくわかりません。これはどういう意味なのでしょうか?

  • ラグランジュの・・・

    お世話になります。 変数x、y、zは条件φ(x、y、z)=0を満たして変化する時、3変数関数U=f(x,y,z)について次のことを証明せよ。 Ux=fx-fz・φx/φz、Uy=fy-fz・φy/φz 三変数関数になったらわかりません。よろしくお願いしますm(--)m

  • FDTD 遠方界のプログラム

    FDTD法で遠方界を計算するプログラムを作ったのですがコンパイルはうまくいっても実行結果がちゃんと表示されません。プログラムに問題があるのか、大きな値を与えるとbus errorになってしまいます。どなたか遠方界のプリグラムに詳しい方がいらっしゃったら教えて下さい。よろしくお願いします。 プログラム内容 ubroutine far_field implicit none call far_field_yz_plane call far_field_zx_plane call far_field_xy_plane return end subroutine !=================================================================================== ! y-z 平面に対して !=================================================================================== subroutine far_field_yz_plane use consts use fdtd implicit none integer :: i, j, k,ie real(8) :: plane_yz, fac_yz plane_yz = dy*dz fac_yz = plane_yz/(4.0d0*pi*c*dt) ie = nx-6 i = ie+1 do j = 5, ny-5 do k = 5, nz-5 x = (i-0.5d0-ic)*dx y = (j-jc)*dy z = (k-kc)*dz eys = 0.5d0*(ey(i,j,k)+ey(i,j,k+1)) ezs = 0.5d0*(ez(i,j,k)+ez(i,j+1,k)) hys = 0.25d0*(hy(i,j,k)+hy(i,j+1,k)+hy(i-1,j,k)+hy(i-1,j+1,k)) hzs = 0.25d0*(hz(i,j,k)+hz(i,j,k+1)+hz(i-1,j,k)+hz(i-1,j,k+1)) do l = 1, nang time_e = time-dt time_h = time-dt/2.0d0 timesh = -(dirs(l,1)*x+dirs(l,2)*y+dirs(l,3)*z)/c+rf/c tc_e = time_e+timesh tc_h = time_h+timesh m_e = int(tc_e/dt+0.5d0) m_h = int(tc_h/dt+0.5d0) a_e = (0.5d0+tc_e/dt-m_e)*fac_yz b_e = (0.5d0-tc_e/dt+m_e)*fac_yz ab_e = a_e-b_e a_h = (0.5d0+tc_h/dt-m_h)*fac_yz b_h = (0.5d0-tc_h/dt+m_h)*fac_yz ab_h = a_h-b_h wy(l,m_h-1) = wy(l,m_h-1)-hzs*b_h wz(l,m_h-1) = wz(l,m_h-1)+hys*b_h uy(l,m_e-1) = uy(l,m_e-1)+ezs*b_e uz(l,m_e-1) = uz(l,m_e-1)-eys*b_e wy(l,m_h) = wy(l,m_h)-hzs*ab_h wz(l,m_h) = wz(l,m_h)+hys*ab_h uy(l,m_e) = uy(l,m_e)+ezs*ab_e uz(l,m_e) = uz(l,m_e)-eys*ab_e wy(l,m_h+1) = wy(l,m_h+1)+hzs*a_h wz(l,m_h+1) = wz(l,m_h+1)-hys*a_h uy(l,m_e+1) = uy(l,m_e+1)-ezs*a_e uz(l,m_e+1) = uz(l,m_e+1)+eys*a_e enddo enddo enddo ie = 5 i = ie do j = 5, ny-5 do k = 5, nz-5 x = (i-0.5d0-ic)*dx y = (j-jc)*dy z = (k-kc)*dz eys = 0.5d0*(ey(i,j,k)+ey(i,j,k+1)) ezs = 0.5d0*(ez(i,j,k)+ez(i,j+1,k)) hys = 0.25d0*(hy(i,j,k)+hy(i,j+1,k)+hy(i-1,j,k)+hy(i-1,j+1,k)) hzs = 0.25d0*(hz(i,j,k)+hz(i,j,k+1)+hz(i-1,j,k)+hz(i-1,j,k+1)) do l = 1, nang time_e = time-dt time_h = time-dt/2.0d0 timesh = -(dirs(l,1)*x+dirs(l,2)*y+dirs(l,3)*z)/c+rf/c tc_e = time_e+timesh tc_h = time_h+timesh m_e = int(tc_e/dt+0.5d0) m_h = int(tc_h/dt+0.5d0) a_e = (0.5d0+tc_e/dt-m_e)*fac_yz b_e = (0.5d0-tc_e/dt+m_e)*fac_yz ab_e = a_e-b_e a_h = (0.5d0+tc_h/dt-m_h)*fac_yz b_h = (0.5d0-tc_h/dt+m_h)*fac_yz ab_h =a_h-b_h wy(l,m_h-1) = wy(l,m_h-1)-hzs*b_h wz(l,m_h-1) = wz(l,m_h-1)+hys*b_h uy(l,m_e-1) = uy(l,m_e-1)+ezs*b_e uz(l,m_e-1) = uz(l,m_e-1)-eys*b_e wy(l,m_h) = wy(l,m_h)-hzs*ab_h wz(l,m_h) = wz(l,m_h)+hys*ab_h uy(l,m_e) = uy(l,m_e)+ezs*ab_e uz(l,m_e) = uz(l,m_e)-eys*ab_e wy(l,m_h+1) = wy(l,m_h+1)+hzs*a_h wz(l,m_h+1) = wz(l,m_h+1)-hys*a_h uy(l,m_h+1) = uy(l,m_e+1)-ezs*a_e uz(l,m_e+1) = uz(l,m_e+1)+eys*a_e enddo enddo enddo return end subroutine zx平面、xy平面についても同様に書きました。

  • 三次元の井戸型ポテンシャルについて

    量子力学の質問です。 三次元の井戸型ポテンシャル(一辺Lの立方体)についてなのですが、 (I)箱の端の波動関数を0とする条件 つまりψ(L,y,z,)=ψ(x,L,z,)=ψ(x,y,L)=0 のとき (II)周期的境界条件を条件にした場合 つまりψ(x,y,z,)=ψ(x+L,y,z,)=ψ(x,y+L,z)=ψ(x,y,z+L) という条件のとき とでエネルギー固有値を求めました。 すると(I)は E=h^2/(8πm)・(π/L)^2・{(n_x)^2+(n_y)^2+(n_z)^2} ただしn_x,y,zは0を含まない自然数。 (II)は E=h^2/(8πm)・(2π/L)^2・{(n_x)^2+(n_y)^2+(n_z)^2} ただしn_x,y,z=0,±1,±2... となりました。明らかに(I)と(II)ではエネルギー固有値がちがってきます。 これはなぜなのでしょうか? このほかのフェルミ波数等は同じ値をとるのにエネルギー固有値だけちがうというのはいいのでしょうか?

  • 実行すると if文 に矛盾

    #include <stdio.h> #include <math.h> int main(void) { /* */ double c, l, m, n, w=1, x[4]={1,2,3,4}, y[4]={1,2,3,4}; /* */ int j, k, u, v; /* */ for(j=0; j<3; j++){ /*   */ for(k=j+1; k<4; k++){ /*     */ l = sqrt( pow(x[j]-x[k], 2) + pow(y[j]-y[k], 2) ); /*     */ m = sqrt( pow(x[j], 2) + pow(y[j], 2) ); /*     */ n = sqrt( pow(x[k], 2) + pow(y[k], 2) ); /*     */ c = ( pow(m, 2) + pow(n, 2) - pow(l, 2) ) / (2*m*n); /*☆    */ /* if(c=w) ; */ /*※    */ if(c<=w){ /*       */ w = c; /*       */ u = j; /*       */ v = k; /*●    */ } else if(c>w){ /*       */ if(c=w) /*         */ printf("no way\n"); /*     */ } /*   */ } /* */ } /* */ printf("[ P%d P%d ]\n", u, v); /* */ return(0); } -------------------------------------------------------------------------------- 上記プログラムなのですが、Visual C++ でこれを実行すると、 ------------------------------ no way no way no way no way [ P0 P2 ] Press any key to continue ------------------------------ と出力されてしまいました。 ☆行のif文のコメントを外して直前で c=w を評価すると、※の部分が正常に処理されました。 なぜこのような矛盾が生じているのでしょうか? 何かご意見いただければ幸いです。 ※今回 Visual C++ でしか実行できるものがなかったため、他では確認できておりません。恐縮です。 ※この投稿の文字量の制限のため、プログラムの解説は割愛しました; ※補足などでお伝えできればよいのですが…。

専門家に質問してみよう