8

そのため、ファイルを読み取ってから再度出力するプログラムに取り組んでいますが、プログラムがファイルの最後で入力を停止するのに問題があります。「0」や「$」などの特定の文字で停止したいのですが、1 文字の NULL は頭のインタープリターに読み取れないためです。これまでのコードは次のとおりです。

>+[>,][<.]

入力が NULL になること[>,]はあり得ないため、このループは決して終了しません。

では、事前に指定された終了文字に到達した場合にこのループを終了する if ステートメントを挿入するにはどうすればよいでしょうか?

4

3 に答える 3

7

次のコードは、入力の値が 1 (ASCII では出力不可) の場合に停止する点を除いて、作成したコードと同等です。最後の<値が 0 であるため、ループ間の が必要です。

>+[+>,-]<[<.]

入力後に値をデクリメントし、0 かどうかをチェックし、0 でない場合はループバックします。ループバックした場合は、ポインターを再度インクリメントして、デクリメントを元に戻す必要があります。サンプル配列は次のようになります。

00  02  H  e  l  l  o  _  W  o  r  l  d  00
                                          ^

ただし、[<.]文字列の逆を印刷します (その後に印刷不可能な 1 が続きます)。次のコードに示すように、ポインターを先頭に移動し、そこから前方に移動することで、文字列自体を出力できます。

>+[+>,-]<[<]>>[.>]

このコードでは、[<]はインデックス 0 に到達すると停止し、 は>>インデックス 2 (文字列の開始) に移動し[.>]、最後に 0 に到達するまで文字を出力します。

スペース (32) などの別の ASCII 文字を使用する場合は、最初のループ内で+and-をその回数だけ繰り返します。(警告: 入力に 32 未満の文字がある場合、このコードは 0 未満の値になります)。

>+[++++++++++++++++++++++++++++++++>,--------------------------------]<[<]>>[.>]
于 2014-07-21T03:53:38.367 に答える
3

$ASCII 36 であるため、重要な文字から始めましょう。

++++++[->++++++<]>

入力を読み取り、入力と有効文字の両方を 2 回にわたってコピーし、2 番目の有効文字を最後にコピーします。

[[->+>>>>+<<<<<]>>,[->+>+<<]

このような構造の場合:

┌────┲━━━━━━━┱────────┬────────┬────┐
│ $ ┃空白┃ 入力 │ 入力 │ $ │
└────┺━━━━━━━┹────────┴────────┴────┘</pre>

$最初のから最初の を引きinputます:

<[->>-<<]>>

ゼロでない場合は、 のコピーの後の空のセルに 3 回移動して$から、無条件に後ろに移動し、入力が の場合はループを終了し、$それ以外の場合は a$に戻り、再び開始できるようにします。

[>>>]<]

ループの後、blank一致した文字が残ります。一致する入力文字まで前方に移動し、再印刷されないように消去し、5 回後方に移動して最後から 2 番目inputの完全なコピーに到達し、そこからバックアップを続けます (これはラップに依存する必要はありません)最初に少し前にシフトすると、インタープリターなど):

>>[-]<<<<<[<<<<<]

そして、それらを印刷してください!

>>>>>[.>>>>>]

全部で、

++++++[->++++++<]>
[[->+>>>>+<<<<<]>>,[->+>+<<]<[->>-<<]>>[>>>]<]
>>[-]<<<<<[<<<<<]>>>>>[.>>>>>]
于 2014-07-21T04:12:59.420 に答える
0

これは、私が利用したいBF アルゴリズムが満載の便利なページです。

必要なアルゴリズムは、#19 ( x = x==y) と、#28 ( if (x) {code}) または #30 ( if (x) {code1} else {code2}) です。

2 つのセルが等しいかどうかを確認するのは非常に簡単なので、if (x) {code1} else {code2}ここではアルゴリズムをコピーします。temp0一時変数として使用するセルに移動することを意味します。この特定のコードはそれを必要とし、メモリ内で連続しtemp0temp1続きます。x

temp0[-]+
temp1[-]
x[
 code1
 x>-]>
[<
 code2
 x>->]<<
于 2016-02-26T17:47:15.553 に答える