2

Iいくつかの変数に関するブール式を、を操作するTI-BASICプログラムに渡しますIが、ブール式は、プログラムの実行の開始時に1回だけ評価されます。

サンプルプログラムは次のとおりです。

Prompt J
0 -> I

Lbl 1
1 + I -> I
Disp I

If J
Then
Goto 2

Else
Goto 1
End

Lbl 2
End

(これは私が書いている実際のプログラムではなく、より複雑であるためforループを使用できません。上記のプログラムは明らかにforループを使用してよりエレガントに書くことができます。)

I数値0から始めて1ずつインクリメントします。インクリメントするたびに、trueかどうかを確認Jし、trueの場合は停止します。

渡すとJ=I≠5、印刷後にプログラムが停止します1

渡した場合J=I=5、結果は期待できません。trueのときにプログラムを停止するつもりですI=5が、代わりにプログラムが無期限に続行されます。これはJ、プログラムの開始時にのみ評価されることを意味します。

そのループを実行するたびに再評価Jすることは可能ですか?


私はそれJがに置き換えられ、渡される01すぐに置き換えられると思います。私の質問を言い換えると、ブール式を未評価の文字列/リテラル​​として入力/保持することは可能ですか?eval(J)次に、プログラム内のようなものを呼び出します。

4

3 に答える 3

2

更新の前提は正しいです。J は数値に置き換えられています。

言い換えた質問への答えはイエスです。式を渡すことはできますが、実際の変数の代わりに関数変数を使用する必要があります。

Prompt Y1

が呼び出されるたびY1に再評価されるため、 に格納I=5するとY1Y1I≠5 の場合は 0 が返され、I=5 の場合は 1 が返されます。

于 2014-05-02T16:30:59.173 に答える
0
DelVar IPrompt J

はい、そこに改行を入れないつもりでした。必要ありません。私を信じて。

While not(J
I+1->I
Disp I
End

これが最適化されたあなたのプログラムです。あなたの問題は、元のプロンプトの後に J が変更されないため、ループが永遠に繰り返されることです。はい、繰り返しごとに J を再評価できますが、プログラムを機能させたい場合は、実際に再評価する必要があります。

于 2013-06-18T18:23:59.727 に答える
0

ここで Lbl/Goto ループを使用している理由がわかりません。For ループが機能しない場合は、代わりに While または Repeat ループを使用することをお勧めします。彼らはよりきちんとしていて速いです。

それはさておき、

1ずつインクリメントし、毎回Iチェックしています。とはまったく異なる変数であり、それらを相互作用させない限り、互いに相互作用することはありません。最初の入力がの場合、プログラムは永久に実行されます。J≠0IJJ=0

I=5 が true のときにプログラムを停止するつもりですが、プログラムは無期限に続行します。

しかし、かどうかをチェックするコードには何もありませんI=5If I=5これを実現したい場合は、どこかに配置する必要があります。

そのループの実行ごとに J を再評価することは可能ですか?

はい。ただし、電卓に手動で指示する必要があります。

J が渡されるとすぐに 0 と 1 に置き換えられると仮定します。

これはそうではありません。むしろ、If Jコード内の は の場合は FALSE を出力J=0し、 のその他の値の場合は TRUE を出力しますJ

Endまた、プログラムの最後に は必要ありません。TI-BASIC では、コマンドは条件文や/ /ループEndなどのコード ブロックの終了を示します。If:ThenForWhileRepeat

ここを読むことをお勧めします: http://tibasicdev.wikidot.com

于 2014-12-02T22:39:14.250 に答える