• 締切済み

Rubyプログラムの質問です

Rubyプログラムの質問です。 y = ax^3 + bx^2 + cx + d という関数が与えられていて、 整数a,b,c,dを読み込んで、xが0から1まで0.1刻みでyの値を求め、印字するプログラムを作っています。 そして、この中でyの値が最小・最大となるときのx,yの値を出力したいのですが、どう求めればよいのかわかりません。 まずxを0から1まで0.1刻みで出力するのはstepを使って 0.step(10,0.1){ |x| print( x,"\n" ) まではわかりました。 その出力したxをどのように関数の式に代入するのかがわかりません。 そして最小値・最大値を求める問題ですが、最小値を記憶して、次の要素より小さければ交換という 形でいこうと思っているのですが、これもどのようにすればよいのかはっきりわかりません。 loopを使うということは何となく想像がつきます。 たとえばこのようにしても大丈夫なのでしょうか? for( i=1;i<100;i++ ){ if( a[0] < a[i] ){ work = a[0]; a[0] = a[i] a[i] = work; } } どなたかご教示いただければ幸いです。

みんなの回答

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

ついでなので・・・ 話にちょっと出てきていた 「最大値・最小値を記憶しておいて、それを振りきる物が出てきたら差し替える」 に書き直すとこうなります。 http://ideone.com/0LmiA

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

yの最大・最小出す際にxも併せて出力するようにしたと思うのですが、何か認識ちがいましたでしょうか? <おまけ> 自分でも冗長だと思うのですが、少し書き方を変えたものも貼っておきます http://ideone.com/U7Nnl <おまけのおまけ> 更に冗長なコメント付与版はこちら http://ideone.com/DE7n6

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.1

まず、返された回答へちゃんと返信をつけましょう。 特に、今回は同じ件についてですよね? http://okwave.jp/qa/q6816209.html <代入について> これはもう、単に関数なりなんなりつくっておいて渡してやれば良いだけです。 <配列の要素交換> i++といったインクリメントは使えませんが、そういった代入記法で配列の順番差し替えは可能です。 更に挙げれば、このような書き方も可能です。 http://ideone.com/a9jDW ただ、q6816209でも挙げられているように、maxやmax_byといったメソッドを使ったほうが良いと考えます。 組み込みで丁度良いメソッドがあるのなら、余程特別な理由がない限りそれを使ったほうが良いでしょう。 <おまけ> 意図があってる自信全然無いんですが・・・大体こう言うことで良いんですかね? http://ideone.com/Jgmkn ※Rubyでべき乗を表す演算子は「**」です。

lalala10
質問者

補足

回答ありがとうございました。 まだ使い始めで勝手が十分理解できておらず、申し訳ありません。 さて、yの値を出力して、最大値、最小値の値を求めることができましたが、 そのときのxの値も最終的に求めなければなりません。 これはどのようにすればよいのでしょうか。 回答よろしくお願いいたします。

関連するQ&A