Я пытаюсь определить классы Ruby для векторов и матриц. Я намерен определить два класса: MyVector
и MyMatrix
, со способами, указанными ниже. MyVector
должен представлять вектор строки, MyMatrix
должен представлять собой матрицу, внутренне организованную как массив объектов MyVector
. Предполагаемые методы MyVector
:Можно ли использовать методы из библиотеки Ruby в моем классе?
#initialize
метод, который принимает массив целых чисел в качестве аргумента.#length
метод, который возвращает размер вектора.#*
метод, принимая аргументa
, что:- , если
a
представляет собой вектор, возвращает скалярное произведение, проверки того, что размерa
соответствует приемнику. - если a является матрицей, то оно возвращает произведение приемника и матрицы, подтверждающее совместимость размеров.
- , если
#to_s
метод, который возвращает строковое представление приемника.
Метода MyMatrix
:
#initialize
метод, который принимает массив массивов в качестве аргумента, преобразует внутренние массивы в строках vecotrs (MyVector
класса), а затем размещает их в матрицу.#transpose
метод, который возвращает приемник транспонирован.#*
метод, который принимает аргумент объектаMyMatrix
и возвращает матричный продукт, подтверждающий совместимость размера аргумента.#to_s
метод, который возвращает строковое представление приемника.
Этот код, который я написал до сих пор, приведен ниже, но он не работает вообще. Я попытался определить некоторый метод, за которым следует метод класса библиотеки (в матричном и векторном классе, они уже определяют этот метод), но похоже, что этот способ не работает, потому что он всегда просит вас определить что-то новое. Не могли бы вы мне помочь? Благодаря!
class MyVector
def initialize (a)
if !(a.instance_of? Array)
raise "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
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][email protected][i]*m
i=i+1
end
end
end
end
'Определите два класса MyVector и MyMatrix [...]' Нет. Я не подчиняюсь вашим приказам. – sawa
@sawa: Вы можете видеть, что это всего лишь вопрос английского англичанина. –
@BorisStitnicky Я подозреваю, что это не собственное слово OP и что оно изначально использовалось в другом контексте, что было бы причиной для того, чтобы закрыть этот вопрос. – sawa