2017-06-10 5 views
2

GNU bcを使ってx + 3 = 40という方程式を解いてみたいとします。私がこれを行うことができる1つの方法は、正しい答えに達するまで、0が解決策であるかどうかを確認してから1を確認することから始めることです。 (代数を行うには明らかではない最良の方法が、まあいい。)だから私はGNU bcのに次のコードを入力します。GNU bcがゼロを吐き出さないようにすることはできますか?

int solver(int x); 
define solver(x){ 
if(x + 3 == 40) return x; 
x = x + 1; 
solver(x) 
} 
solver(0) 

それは37生成 - もちろん、正しい答えを、 - しかし37は、その後に続いています37零点。いくつかの実験に基づいて、それぞれのゼロはif文のインスタンスがfalseであるように見えますが、ゼロが表示されないようにするにはどうすればよいですか?私はより複雑な関数を解決し、より複雑な数のリストを作成するためにGNU BCを使用しています。だから、すべてゼロをソートするのは実際には実用的ではありません。私はまだ何も考え出していないので、どんな助けもありがたいです。

答えて

1

割り当てではない操作ごとに、bcは終了ステータスを出力します。これを抑制する1つの方法は、ダミーの値.(これは最後の結果の値にすぎません)に割り当てることです。別の方法は、必要なものを明示的に明示的に出力することです。

私はこのようなあなたの機能を書かれているだろう:私は、私はあなたの最初の行を行うことになっているかを理解していない

  • #!/usr/bin/bc -q 
    
    define solver(x) { 
        if (x + 3 == 40) return x 
        return solver(x+1) 
    } 
    print solver(0), "\n" 
    
    quit 
    

    あなたの試みのためのいくつかの発言ちょうどそれを落とした

  • 私はコードをインデントし、いくつかの空白を追加し、セミコロンを削除しました–ほとんど味と読みやすさの問題
  • これはif文はゼロを生成することをあなたの疑惑についてはスプリアス0

生産するとして、私は、それ自身の上に立つsolver(x)ラインを避けるために、再帰呼び出しを簡素化しました:しようと、対話型のセッションでは、以下:

1 == 2      # Equality test on its own produces output 
0 
1 == 1      # ... for both true and false statements 
1 
if (1 == 2) print "yes\n" # No output from false if condition 
if (1 == 1) print "yes\n" # If statement is true, print string 
yes 
関連する問題