12/19 レコード・オブジェクト・クラス(2)


前回の課題について


今日の資料


スライド中のプログラム

class ComplexNumber
  attr_accessor :realPart,:imaginaryPart
  def initialize(r,i)
    @realPart = r
    @imaginaryPart = i
  end
end
def add(x,z)
  ComplexNumber.new(x.realPart + z.realPart , x.imaginaryPart + z.imaginaryPart)
end
def sub(x,z)
  ComplexNumber.new(x.realPart - z.realPart , x.imaginaryPart - z.imaginaryPart)
end
def multiply(x,z)
  ComplexNumber.new(x.realPart * z.realPart - x.imaginaryPart * z.imaginaryPart , x.realPart * z.imaginaryPart + x.imaginaryPart * z.realPart)
end
def rad2(x)
  x.realPart * x.realPart + x.imaginaryPart * x.imaginaryPart
end
def inv(x)
  r = rad2(x).to_f
  ComplexNumber.new(x.realPart/r,-x.imaginaryPart/r)
end
def division(x,z)
  multiply(x,inv(z))
end
x1 = ComplexNumber.new(1,2)
x2 = ComplexNumber.new(3,-4)
x3 = multiply(x1,x2)
division(x3,x1)
division(x3,x2)
multiply(inv(x3),x1)
operas = []
operas[0] = Opera.new("Traviata", "Verdi", 1853, "Italian", 3)
operas[1] = Opera.new("Carmen", "Bizet", 1875, "French", 4)
operas[2] = Opera.new("Otello", "Verdi", 1887, "Italian", 4)
operas[3] = Opera.new("Tannhauser", "Wagner", 1845, "German", 3)
operas[4] = Opera.new("Figaro", "Mozart", 1786, "Italian", 4)
operas[5] = Opera.new("Fidelio", "Beethoven", 1805, "German", 2)
composerInv = {}
for i in 0..operas.size-1
  c = operas[i].composer
  if composerInv[c] == nil
     composerInv[c] = [i]
  else
    l = composerInv[c]
    l[l.size] = i
  end
end

while true
  line = gets.chomp
  for i in 0..operas.size-1
    if operas[i].composer == line
      p operas[i]
    end
  end
end

while true
  line = gets.chomp
  l = composerInv[line]
  if l != nil
    for j in 0..(l.size-1)
      i = l[j]
      p operas[i]
    end
  end
end

今日の課題


次回(1/9)の自習について