0

I'm asked to write the ruby program that generate the output based the given command,

The full description

I'm really new in ruby (maybe few hours that I have started ruby)

I'm getting this error, please check my code for other possible errors:

Thank you.

n `block in each2': undefined method `[]' for #<MyVector:0x00000002c4ad90 @array=[2, 3, 4]> (NoMethodError)

What I have done so far:

# MyVector Class
class  MyVector
  def initialize (a)
    if !(a.instance_of? Array)
      raise "ARGUMENT OF INITIALIZER MUST BE AN ARRAY"
    else
      @array = a
    end
  end

  def array
    @array
  end

  def to_s
    @array.to_s
  end

  def length
    @array.length
  end

  def each2(a)
    raise Error, "INTEGER IS NOT LIKE VECTOR" if a.kind_of?(Integer)
    Vector.Raise Error if length != a.length
    return to_enum(:each2, a) unless block_given?
    length.times do |i|
      yield @array[i], a[i]
    end
    self
  end

  def * (a)
    Vector.Raise Error if length != a.length
    p = 0
    each2(a) {|a1, a2|p += a1 * a2}
    p
  end
end

# MyMatrix Class
class MyMatrix
  def initialize a
    @array=Array.new(a.length)
    i=0
    while(i<a.length)
      @array[i]=MyVector.new(a[i])
    end
  end

  def to_s
    @array.to_s
  end

  def transpose
    size=vectors[0].length
    arr= Array.new(size)
    i=0
    while i<size
      a=Array.new(vector.length)
      j=0
      while j<a.length
        a[j]=vectors[j].arr[i]
        j+=1
      end
      arr[i]=a
      i+=1
    end
    arr[i]=a
    i+=1
  end

  def *m
    if !(m instance_of? MyMatrix)
      raise Error
      a=Array.new(@array.length)
      i=0
      while (i<@array.length)
        a[i]=@array[i]*m
        i=i+1
      end
    end
  end
end

Input:

Test code
v = MyVector.new([1,2,3])
puts "v = " + v.to_s
v1 = MyVector.new([2,3,4])
puts "v1 = " + v1.to_s
puts "v * v1 = " + (v * v1).to_s
m = MyMatrix.new([[1,2], [1, 2], [1, 2]])
puts "m = " + m.to_s + "\n"
puts "v * m = " + (v * m).to_s
m1 = MyMatrix.new([[1, 2, 3], [2, 3, 4]])
puts "m1 = " + m1.to_s + "\n"
puts "m * m1 = " + (m * m1).to_s
puts "m1 * m = " + (m1 * m).to_s

Desired Output:

v = 1 2 3
v1 = 2 3 4
v * v1 = 20
m =
1 2
1 2
1 2
v * m = 6 12
m1 =
1 2 3
2 3 4
m * m1 =
5 8 11
5 8 11
5 8 11
m1 * m =
6 12
9 18

1 Answer 1

1
length.times do |i|
  yield @array[i], a[i]
end

In the above block, a is an instance of MyVector. You need to define the [] operator on it, probably something like:

def [](i)
  @array[i]
end
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, I passed that error But now I got into infinite loop

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.