- ベストアンサー
Rubyでのfor文について
koko_u_の回答
Range#step かな?
関連するQ&A
- Rubyのイテレータ
Rubyのイテレータで分からないところがあります。以下のコードです。 if文のところで「yield x」が真なら「return x」を実行すると 推測できるのですが、 その実行結果はこれです。 > irb> a = [1, 2, 3, 4, 5] > => [1, 2, 3, 4, 5] > irb> find(a) {|x| x % 2 == 0} > => 2 > irb> position(a) {|x| x % 2 == 0} > => 1 > irb> count(a) {|x| x % 2 == 0} > => 2 例えば、find関数なら引数は「x」ですが「x % 2 == 0」 と条件式をブロックに書いているのが分かりません。 全体の流れとしてはfind関数なら2で割り切れたのが「2」と「4」で2つあるので 関数の結果は「2」というのは理解できます。 しかし、具体的に「return x」「 if yield x」が何をしているのかが分かりませんでした。 if「もし」yield x「なら」return xを実行する、様なコードなのですが・・・。 またfind(a)なら、引数xが2で割り切れるのなら条件式は「真」なので 真の数字をカウントする、様なコードなのですが・・・。それ以上詳細に教えてくれると助かります。 何方かご存知でしたら教えてください。 > リスト 1 : データの探索 (イテレータ版) > > # ブロックが真となる要素を探す > def find(ary) > for x in ary > return x if yield x > end > false > end > > # ブロックが真となる要素の位置を返す > def position(ary) > for x in 0...ary.size > return x if yield ary[x] > end > false > end > > # ブロックが真となる要素の個数を求める > def count(ary) > c = 0 > for x in ary > c += 1 if yield x > end > c > end なおこのコードが載っているサイトはここです。 http://www.geocities.jp/m_hiroi/light/abcruby08.html
- ベストアンサー
- Ruby
- RubyでのFor文の書き方
RubyのFor文でCのように細かくループ・カウンタの増減を制御したい場合、どのように書くのが一般的なのでしょうか。 想定しているのはこんな感じです。 int i; for(i = 0; i <= 100; i = i + 0.2) { //do something } 普段は何気なくwhile文やuntil文を使ってしまうんですが、ちょっと気になったので質問させて頂きました。ご存知のかたがいらっしゃいましたらお知恵を拝借させてください。
- ベストアンサー
- Ruby
- フーリエ級数展開の問題
フーリエ級数展開の問題 このフーリエ級数展開の問題が分かりません. アドバイスいただけたら幸いです f(x)= a0/2+ Σ(k=1→∞) ( ak*coskx + bk*sinkx) でa0,bk,akは実数です (a)次の関数をフーリエ級数展開せよ g(x ) = ( π - x ) ( 0 < x < 2π ) = 0 x=0 (b) (a)の結果より、(1)(2)を証明せよ (1) (1/2π)*∫(0→2π) f(x)* ( π - x ) dx =Σ(k=1→∞) (bk/k) (2) (1/2π)*∫(0→2π) f(x+t)* ( π - x ) dx =Σ(k=1→∞) (bk*coskt - ak*sinkt) /k (c) (b)の結果より、次の値を求めよ Σ(k=1→∞) ( (-1)^n) / n^2
- ベストアンサー
- 数学・算数
- フーリエ級数展開の問題
フーリエ級数展開の問題 このフーリエ級数展開の問題が分かりません. アドバイスいただけたら幸いです f(x)= a0/2+ Σ(k=1→∞) ( ak*coskx + bk*sinkx) でa0,bk,akは実数です (a)次の関数をフーリエ級数展開せよ g(x ) = ( π - x ) ( 0 < x < 2π ) = 0 x=0 (b) (a)の結果より、(1)(2)を証明せよ (1) (1/2π)*∫(0→2π) f(x)* ( π - x ) dx =Σ(k=1→∞) (bk/k) (2) (1/2π)*∫(0→2π) f(x+t)* ( π - x ) dx =Σ(k=1→∞) (bk*coskt - ak*sinkt) /k (c) (b)の結果より、次の値を求めよ Σ(k=1→∞) ( (-1)^n) / n^2 補足 (b)以降が分かりません (a)はbk=2/kだとおもいまし a0,akともに0だと思います
- ベストアンサー
- 数学・算数
- フーリエ級数展開の問題
フーリエ級数展開の問題 cを実数の定数とし、fは周期関数2πの関数で区間[-π,π)において f(x)= (c-2)(x+π/2) :-π<=x<0 (2c-3)(x-π/2):0<=x<π であるとする。この時のフーリエ級数展開 a_(0)/2+Σ[n=1,∞]{a_(n)cos(nx) + b_(n)sin(nx)} について各問に答えよ (1)関数fが偶関数になるような定数cの値を求め、その時のフーリエ係数a_(1)の値を求めよ。 切片が同じで、傾きが逆になればいいので、 (c-2)=-(2c-3)と式を立てて c=5/3 a_(n)=1/π∫[-π,π]f(x)cos(nx) dx -π<=x<0の時と、0<=x<πの時とを分けて積分 a_(n)=1/π{∫[-π,0](-x/3-π/6)cos(nx) dx + ∫[0,π](x/3-π/6)cos(nx) dx} n=1の時を求めればいいだけなのでn=1を代入して a_(1)=1/π{∫[-π,0](-x/3-π/6)cos(x) dx + ∫[0,π](x/3x-π/6)cos(x) dx} 式の∫[-π,0](-x/3-π/6)cos(x) dx の部分を計算 部分積分で計算し、 ∫[-π,0](-x/3-π/6)cos(x) dx=[(-x/3-π/6)sin(x)-cos(x)/3][-π,0] =-1/3-1/3==-2/3 ∫[0,π](x/3-π/6)cos(x) dx の部分を同じく計算 ∫[0,π](x/3-π/6)cos(x) dx=2/3 よって a_(1)=1/π{-2/3+2/3}=0 となってしまいました。0となり不安です間違っている気がすごくします。これで合っているんでしょうか? あと、この次の小問(2)で (2)関数fが奇関数になるような定数cの値を求め、その時のフーリエ係数b_(1)の値を求めよ。 という問題があるのですが、これはcの求め方からして分かりません。 存在しない気すらします。どのように求めればいいんでしょうか?
- ベストアンサー
- 数学・算数
- Rubyについて質問です
Rubyについて質問です class Document #省略 def each_word word_array = words index = 0 while index < words.size yield(word_array[index]) index += 1 end end end d = Document.new('Truth', 'Gump', 'Life is like a box of...') d.each_word { |word| puts word } このような例題があるのですが、 このまま実行しても引数エラーがでてしまいます。 「省略」のところをどのように追加すれば実行できるようになりますか? 参考書:ELOQUENT RUBYの中の例題です ちなみに実行結果は以下の通りです Life is like a box of ... どうかよろしくお願いいたします
- ベストアンサー
- その他(学問・教育)
- 複素フーリエ、実数形
・次の関数の複素形フーリエ級数を求めなさい。実数形に直せ。 sin^3(x) これの複素形フーリエは sin^3(x)=(-1/8i)(exp(3ix)-3exp(ix)+3exp(-ix)-exp(-3ix) というのは分かったのですが、これを実数形に直したら、 sin^3(x)=(-1/4)(sin3x-3inx) になることがわかりません。アドバイスをお願いします。 それと、f(x)=0(-π<x<0),1(0≦x≦π) の複素形フーリエ級数の答えが、 f(x)=(1/2)+(1/πi)Σ(1/(2n-1){exp(i(2n-1)x)-exp(-i(2n-1)x) になるらしいのですが、 僕が計算した結果 (1/2)+(1/πi)Σ(1/2n)(1-(-1)^n) になりました。実数形はどうなるのでしょうか? どうしたらよいかアドバイスをお願いします。
- 締切済み
- 数学・算数
- ruby バイナリ入出力について
ruby初心者です。 バイナリファイルを読み込んで、その値を2倍して再びバイナリファイルに書き込む ソースを作りたいのですが、どなたかご教示願えますでしょうか。 以下試行錯誤して作ってみたのですが、このソースだと 例えば31というバイナリデータが62で書かれず、 36、32のasciiコードで保存されてしまいます。。 ----------------------------- BinData = open("in.data") BinData.binmode File.open("out.data", "wb"){|f| while (b = BinData.read(1)) m = b.unpack('C')[0]*2 #取り込んだバイナリデータを整数化して2倍 p sprintf("%x", m) k = format("%x", m) #16進数に変換 f.write(k) end } すみませんが宜しくお願い致します。
- 締切済み
- Ruby
お礼
素早い解答ありがとうございます。 >Range#step サンプルコードを作って試したところ正確に動作しました。 どうもありがとうございました(*- -)(*_ _)