Поиск:

Ответ в темуСоздание новой темы Создание опроса
> class matrix 2x2, Создание класса 
:(
    Опции темы
viosagmir
Дата 28.6.2011, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.6.2011

Репутация: нет
Всего: нет



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

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

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

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

P.S> поощрение гарантированно
PM MAIL   Вверх
viosagmir
Дата 28.6.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.6.2011

Репутация: нет
Всего: нет



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

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

Код

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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.