- 締切済み
Ruby での計算
お世話になります。 Ruby の初心者です。 以下のコードをノートパッドで作成して実行したいのですが、ロードしたのちに数値を代入するとエラーが表示されてしまいます。どこがいけないのでしょうか。 よろしくお願いいたします。 def triarea(w, h) s=(w*h)/2 return s end
- boeing7878910
- お礼率0% (0/1)
- Ruby
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2126/6288)
スクリーンショットが小さすぎて見えません。 ところで、 def triarea(w, h) w * h / 2 end でも動くって知ってますか?
関連する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
- Ruby2.0 String で ERR
以下のようなコードをruby1.8系で実行してもOKなのですが、 s=String.new("\0"*4) s[0]=8 puts s.unpack("H*") ruby2.0で実行すると、 `[]=': no implicit conversion of Fixnum into String (TypeError) とERRになってしまいます。 ruby2.0ではどうかいたら宜しいでしょうか?
- ベストアンサー
- Ruby
- Ruby バブルソート
バブルソートのプログラムでわからないところがあるため、 質問させていただきます。 Rubyは1.9.3を使用しています。 <プログラム> --------------------------------------------------- def bsort(data) while true # swapped変数は数値の入れ替えを記憶 swapped = false for i in 0..data.size-2 if data[i] > data[i+1] temp = data[i] data[i] = data[i+1] data[i+1] = temp swapped = true end end return if !swapped end end data = [10, 9, 8, 7, 6] bsort(data) puts "ソート結果#{data}" --------------------------------------------------- return if !swapped のところで、 なぜwhileのループから抜けられるのかがよくわかりません。 return if swapped == false と書き換えて実行しても同じ結果が得られたのですが、 数値の入れ替えがなければ swapped = false であるため、 !swappedはtrueとはならないのでしょうか。
- 締切済み
- Ruby
- Rubyの構文?言語仕様?
Rubyの以下コードについて質問です。 #!/ruby/bin/ruby print "content-type: text/html\r\n\r\n"; puts "Hello World!" begin def foo x =0 (0...10).each do |value| print value.to_s +"の時"+ x.to_s + "<br />" end end foo rescue =>e print e.class.to_s+ "<br />" print e.message end 上記コードを実行すると以下のような例外を取得します NoMethodError undefined method `+@' for "\343\201\256\346\231\202":String どうやら上記コードの print value.to_s +"の時" の部分の +"の時" という箇所が問題のようなのですが 上記箇所を + "の時" のように 文字列連結子の +と "の間に半角スペースを 入れるとうまく実行されます。 いったい原因はなんなのでしょうか? 細かい箇所ですが是非、ご教授ください。
- ベストアンサー
- Ruby
- Rubyの問題について質問です。
Rubyの資格試験の勉強をしています。 分からない部分がありまして質問させていただきます。 class Employee attr_reader :id attr_accessor :name def initialize id , name @id = id @name = name end def to_s return "#{@id}:#{@name}" end def <=> other return self.id <=> other.id end employees = [ ] employees <<Employee.new("3","Tanaka") employees<<Employee.new("1","Suzuki") employees<<Employee.new("2","Sato") employee.sort! (質問) 「return self.id <=> other.id」この部分のselfとotherが何をさしているのか分かりません。3つめでインスタント化している「employees<<Employee.new("2","Sato")」のは、selfに入りそれまでに入れた値はotherに入っているのでしょうか? ご回答よろしくお願いします。
- ベストアンサー
- Ruby
- Ruby
#!/usr/local/bin/ruby class Foo def []=(x,y) print "Hello,",x,y,"!\n" end end bar = Foo.new bar["wor"] = "ld" 上記実行結果は Hello world! になるのですが、これが理解できません。 上手く説明してくれませんか?
- ベストアンサー
- その他(プログラミング・開発)
- Ruby の 文法に困ってます。
以下のようなソースの場合、to_sメソッドは何時呼ばれているのでしょうか。またどういう意味を成しているのでしょうか。 Ruby初心者のためご教授頂けないでしょうか。 よろしくお願いします。 class Vector attr_accessor :x, :y def initialize(x=0, y=0) @x = x @y = y end def length Math::sqrt(@x ** 2 + @y ** 2) end def to_s "(#{@x},#{@y})" end def <=> other length <=> other.length end end arr =[] arr << Vector.new(2,2) arr << Vector.new(3,2) arr << Vector.new arr.sort.each do |item| puts item end 結果は以下になります。 (0,0) (2,2) (3,2)
- ベストアンサー
- Ruby
- RUBYのプログラムわかりません。
昨日からRUBYを始めた初心者です。 BOX-COX変換を見て、コードを 動かそうとしましたが、NEW演算子?でエラーが 出たりして動きません。WINDOWS版ですがどのように すれば動くのでしょう。NEW演算子はクラス以外の 生成でどう使うのでしょう?下記NEW演算子の ところを抜き出しました。 どうぞよろしくお願い致します。 ar=[5.5,4.0,6.0,5.0,5.0,4.0,4.3] def Box_Cox1(ar, add) ary=[1.2,2.0] transformed_dn = ary.new() return ar.size end add = "0.01" begin p Box_Cox1(ar, add) end
- ベストアンサー
- その他(プログラミング・開発)
- Ruby defにするとエンコードがおかしくなる
あるif文をdefでまとめて動かしたところ、西欧のエンコードで表示されてしまうのですが、 これはエラーですよね?正しい動作にならないのですが、どうしたらよいでしょうか。 def search_kansi(h) if h == 1 kansi = "甲子" elsif h == 2 kansi = "乙丑" elsif h == 3 kansi = "丙寅" else kansi ="無効な値が入力されました" end return kansi end #def nikkan = search_kansi(h) print nikkan
- 締切済み
- Ruby
- Ruby について質問です
Rubyについて質問です class Document include Enumerable attr_accessor :title, :author, :content def initialize(title, author, content) @title = title @author = author @content = content end def words @content.split end def each words.each { |word| yield(word) } end end doc = Document.new('Advice', 'Harry', 'Go ahead make my day') doc.each { |word| puts word } このようなコードがすでに出来上がったおり、 これをアルファベットの早い順に並び変えて(sort)出力させるには どのようにコードを追加すればよいですか? どうやら、sort メソッドと <=> 演算子を使って記述するようですが、 よくわかりません 回答お願いいたします。
- ベストアンサー
- その他(学問・教育)