• 締切済み

Ruby での計算

お世話になります。 Ruby の初心者です。 以下のコードをノートパッドで作成して実行したいのですが、ロードしたのちに数値を代入するとエラーが表示されてしまいます。どこがいけないのでしょうか。 よろしくお願いいたします。 def triarea(w, h) s=(w*h)/2 return s end

  • Ruby
  • 回答数1
  • ありがとう数0

みんなの回答

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

スクリーンショットが小さすぎて見えません。 ところで、 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/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について質問です 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 メソッドと <=> 演算子を使って記述するようですが、 よくわかりません 回答お願いいたします。

専門家に質問してみよう