新しく発言する  EXIT  インデックスへ

fornext制御


  for next 制御 島村1243 2008/03/20 07:39:07 
  複素数は2進小数(倍精度)の組で表現します。... 白石 和夫 2008/03/20 08:29:21 
   ├有効数字の数を変えて表示してみると, 白石 和夫 2008/03/20 08:49:52 
   └分かりました。 島村1243 2008/03/20 08:57:18 
    └FORq=1.5TO1.0-.001STEP-0.1!過電圧係数をセ... SECOND 2008/03/20 12:29:23 
     └なるほど! 島村1243 2008/03/21 22:35:36 

  for next 制御 島村1243 2008/03/20 07:39:07   ツリーへ
for next 制御  返事を書く  ノートメニュー
島村1243 <bjllmpcujp> 2008/03/20 07:39:07
qをパラメータとして円を描く下記プログラムで
FOR q=1.5 TO 1.0 STEP -0.1
の動作について2点お尋ねです。

質問(1)
このループでは1.5 , 1.4 ... ,1.0までqが変化するので円が6個描かれると
思っていたのですが、5個しか描かれません。For Next制御は、終端値を越えると
ループから抜け出るのでは無いでしょうか?

質問(2)
FOR q=1.5 TO 1.0 STEP -0.1 を
FOR q=1.0 TO 1.5 STEP 0.1 に変えると、描かれる円の大きさが小さくなって
しまいます。プログラムロジック上は変わらない筈だと思うのですが。

十進BASICのバージョンは
Win版:708
Linux版:6.4.5
でいずれも動作は同じです。よろしくお願い致します。

!-------- プログラムの内容 -------------
OPTION ARITHMETIC complex

LET j=SQR(-1)

SET WINDOW -4,10,-4,10

draw grid



! a相地絡時のb相過電圧特性図を描く

SET LINE COLOR "black"

FOR q=1.5 TO 1.0 STEP -0.1 !過電圧係数をセット

LET kc=3*1.732/2/(3-q^2)

LET mc=-(3-4*q^2)/2/(3-q^2)

LET R=3*q/(3-q^2)

For i=0 to 360

LET rad=pi/180*i

LET m=R*COS(RAD)+mc !m値=X0/x1をセット

LET k=R*SIN(RAD)+kc !k値=R0/x1をセット

PLOT LINES:m,k;

NEXT i

PLOT LINES

NEXT q



! a相地絡時のc相過電圧特性図を描く

! b相地絡特性はa相地絡の特性円を、(-2,0)点を中心に-60°

! 回転させたものに等しい事を利用。

SET LINE COLOR "red"

FOR q=1.5 TO 1.0 STEP -0.1

LET kc=3*1.732/2/(3-q^2)

LET mc=-(3-4*q^2)/2/(3-q^2)

LET R=3*q/(3-q^2)

For i=0 to 360

LET RAD=PI/180*i

LET m=R*COS(RAD)+mc

LET k=R*sin(rad)+kc

LET z=m+2+j*k

LET z1=z*EXP(-j*PI/3)

LET z2=z1-2

PLOT LINES:Re(z2),Im(z2);

NEXT i

PLOT LINES

NEXT q

! 有効接地系の条件範囲を表示。

SET LINE COLOR "green"

PLOT LINES:0,0;3,0

PLOT LINES:3.0,0;3.0,1.0

PLOT LINES:3.0,1.0;0,1

PLOT LINES:0,1;0,0

END
  複素数は2進小数(倍精度)の組で表現します。... 白石 和夫 2008/03/20 08:29:21   ツリーへ
Re: for next 制御  返事を書く  ノートメニュー
白石 和夫 <fbdfvqwhki> 2008/03/20 08:29:21
複素数は2進小数(倍精度)の組で表現します。
したがって,2進モードと同様に小数の0.1は正確に扱えません。

10 OPTION ARITHMETIC COMPLEX
20 FOR q=1.5 TO 1.0 STEP -0.1
30 PRINT USING "-%.##################":q
40 NEXT q
50 PRINT USING "-%.##################":q
60 END

   ├有効数字の数を変えて表示してみると, 白石 和夫 2008/03/20 08:49:52   ツリーへ
Re: 複素数は2進小数(倍精度)の組で表現します。...  返事を書く  ノートメニュー
白石 和夫 <fbdfvqwhki> 2008/03/20 08:49:52
有効数字の数を変えて表示してみると,
10 OPTION ARITHMETIC COMPLEX
20 FOR q=1.5 TO 1.0 STEP -0.1
30 PRINT USING "-%.################## -%.#######":q,q
40 NEXT q
50 PRINT USING "-%.################## -%.#######":q,q
60 END

実行結果
1.500000000000000000 1.5000000
1.399999999999999911 1.4000000
1.299999999999999822 1.3000000
1.199999999999999733 1.2000000
1.099999999999999644 1.1000000
0.999999999999999667 1.0000000
最終行はFOR〜NEXTを抜けた後(50行)の出力です。
FOR〜NEXT内では,およその数でいいと,1.5から1.1までしか変化していません。
実行順を逆にして
20 FOR q=1.0 TO 1.5 STEP 0.1
にすると,実行結果は
1.000000000000000000 1.0000000
1.100000000000000088 1.1000000
1.200000000000000177 1.2000000
1.300000000000000266 1.3000000
1.400000000000000355 1.4000000
1.500000000000000444 1.5000000
で,これも最終行はループを抜けた後の結果なので,ループ内では1.0から1.4までしか変化していません。


   └分かりました。 島村1243 2008/03/20 08:57:18   ツリーへ
Re: 複素数は2進小数(倍精度)の組で表現します。...  返事を書く  ノートメニュー
島村1243 <bjllmpcujp> 2008/03/20 08:57:18
分かりました。

白石先生、早速のご教授有難うございました。
先生ご指摘の内容に沿って
For iq=0 to 5
q=0.1*iq+1.0
.
.
Next iq
と修正して実行したら、希望の動作が行われました。
    └FORq=1.5TO1.0-.001STEP-0.1!過電圧係数をセ... SECOND 2008/03/20 12:29:23   ツリーへ
Re: 分かりました。  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2008/03/20 12:29:23
FOR q=1.5 TO 1.0-.001 STEP -0.1 !過電圧係数をセット
私も、たびたび遭遇しますが、いつもこうしています。
     └なるほど! 島村1243 2008/03/21 22:35:36   ツリーへ
Re: FORq=1.5TO1.0-.001STEP-0.1!過電圧係数をセ...  返事を書く  ノートメニュー
島村1243 <bjllmpcujp> 2008/03/21 22:35:36
なるほど!

SECONDさん、久方のご教示有難う御座います。
STEP -xx の場合は終端値を少し減らし、
STEP +xx の場合は終端を少し増やす。
と言う発想ですか。なるほどなーっと思いました
整数パラメータを追加するよりもプログラムが短く簡単になっていいですね!利用させていただきます。


 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。