Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > class matrix 2x2


Автор: viosagmir 28.6.2011, 11:18
Напишите и протестируйте класс для работы с матрицами 2 x 2 на Ruby. Должны быть доступны следующие операции:

1ю Сложение, умножение и вычитание
2. Возведение в степень
3. Нахождение определителя
4. Транспонирование
5. Обращение

Выручайте! Пожалуйста ))))

У нас зачет на выживание: приходишь, изучаешь я зык и пишешь.

P.S> поощрение гарантированно

Автор: viosagmir 28.6.2011, 19:43
Не, ребят, это совсем грустно. Я думал здесь профи сидят)) ахахха

Короче, вот мое решение.

Код

class Matrix
  @data
  

  
  def initialize(m00=0, m01=0, m10=0, m11=0)
    @data = [[m00, m01], [m10, m11]]
  end
  
  public
  
  def out()
    puts "|"+@data[0][0].to_s+" "+@data[0][1].to_s+"|"
    puts "|"+@data[1][0].to_s+" "+@data[1][1].to_s+"|"
    puts ""
  end
  
  # СЛОЖЕНИЕ
  def +(m)
    
    for i in 0..1
      for j in 0..1 
        @data[i][j] = @data[i][j] + m.data[i][j]
      end
    end
    self
  end
  
  # ВЫЧИТАНИЕ
  
  def -(m)
    
    for i in 0..1
        for j in 0..1
            @data[i][j] = @data[i][j] - m.data[i][j]
        end
    end
    self
  end
 
 
  # УМНОЖЕНИЕ
  def *(m)
    
    result = Matrix.new()
    
    
    for i in 0..1
        for j in 0..1
            for k in 0..1
                result.data[i][j] = result.data[i][j] + @data[i][k] * m.data[k][j]
            end
        end
    end
    result
    #self
  end
  
  # ОПРЕДЕЛИТЕЛЬ
  def opredel()
    
    puts @data[0][0] * @data[1][1] - @data[0][1] * @data[1][0]
  end
  
  # ТРАНСПОНИРОВАНИЕ
  def transport()
    
    
    puts "|"+@data[0][0].to_s + " " + @data[1][0].to_s + "|"  # строки
    puts "|"+@data[0][1].to_s + " " + @data[1][1].to_s + "|"
  end
  
  # ВОЗВЕДЕНИЕ В СТЕПЕНЬ
  def ^(m)
    
    result = Matrix.new(1, 1, 1, 1)
   
   for k in 1..m
        result = result * self
    end

    result
      
  end
  
  # ОБРАТНАЯ МАТРИЦА
  
  def obrat()
  
    
  
    determ = @data[0][0] * @data[1][1] - @data[0][1] * @data[1][0]
    
    a = @data[0][0]
    b = - @data[0][1]
    c = - @data[1][0]
    d = @data[1][1]
    
    
    
    puts "|"+d.to_s + " " + b.to_s + "|"  # строки
    puts "|"+"    |"
    puts "|"+c.to_s + " " + a.to_s + "|"
    puts "* on #{determ}"
  
  end
  
  attr_reader :data 
  attr_writer :data 
end


m1 = Matrix.new(1,2,3,4)
m2 = Matrix.new(1,2,3,4)

puts "matrix 01"
puts " #{m1.out} "


puts "V stepen"
(m1^2).out

#m1 = Matrix.new(1, 2, 3, 4)
#m2 = Matrix.new(1 ,2 ,3 ,4)

# Сложение
#puts "matrix 01"
#puts " #{m1.out} "

#puts "matrix 02"
#puts " #{m2.out} "

#puts "Addition"
#(m1 + m2).out

# Вычитание
#m3 = Matrix.new(1, 2, 3, 4)
#m4 = Matrix.new(1 ,2 ,3 ,4)

#puts "matrix 03"
#puts " #{m3.out} "

#puts "matrix 04"
#puts " #{m4.out} "

#puts "Debuction"
#(m3-m4).out

# Умножение
#m5 = Matrix.new(1, 2, 3, 4)
#m6 = Matrix.new(1 ,2 ,3 ,4)

#puts "matrix 05"
#puts " #{m5.out} "

#puts "matrix 06"
#puts " #{m6.out} "

#puts "Multiplication"
#(m5*m6).out

# Определитель
#m7 = Matrix.new(1, 2, 3, 4)

#puts "matrix 07"
#puts " #{m7.out} "

#puts "Opredelitel"
#m7.opredel()

#m8 = Matrix.new(1, 2, 3, 4)

# Транспонирование
#puts "matrix 08"
#puts " #{m8.out} "

#puts "Transponirovanie"
#m8.transport()

# Обратная матрица
#m9 = Matrix.new(1, 2, 3, 4)

#puts "matrix 09"
#puts " #{m9.out} "

#puts "Obrashenie"
#m9.obrat()



gets

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)