作ったもの、プログラミングで共有できそうなこと、IT関連でやってみたことなど、なんでも書いていきます。ヤドン可愛い

ちょっと家の方でゴタゴタしたりサイトをサーバーにアップするとこでつまづいたりで投稿頻度が落ちてますが、なんとか継続できるよう頑張りたいです。

数字の配列から要素の最大値を返す(reduceを使用する)

def compare(x,y)
  if x < y
    return y
  else
    return x
  end
end

array = [2, 31, 52, 4, 8, 7, 76, 26, 44]
p array.reduce{|accumulator, i| compare(accumulator, i)} #76

アキュムレータ(英: Accumulator)は、コンピュータにおいて、演算装置による演算結果を累積する、すなわち総和を得るといったような計算に使うレジスタや変数のこと(Wikiより)

他の参考サイトで使ってた単語をそのまま使用したので使ってましたが、今回のPGには向かない変数名でした・・・戒めも込めてそのまま投稿

円オブジェクトを定義するCircleクラスを作成し、円の面積や円周を出力する。また、もう一つ円オブジェクトも定義し、重なりの有無を論理値で出力する。

class Circle
  attr_reader :r, :x, :y

  def initialize(r,x=0,y=0)
    @r, @x, @y = r, x, y
  end

  def area()
    return @r * @r * Math::PI
  end

  def circumference()
    return 2 * @r * Math::PI
  end

end

def circleOverrap(circle1,circle2)
  d = distance(circle1.x,circle2.x,circle1.y,circle2.y)
  if circle1.r + circle2.r >= d
    return true
  else
    return false
  end

end

def distance(x_1,x_2,y_1,y_2)
  return ((x_1 - x_2).abs ** 2 + (y_1 - y_2).abs ** 2) ** (1/2.0)
end

puts "半径を入力"
r_1 = gets.to_i
puts "x座標を入力"
x_1 = gets.to_i
puts "y座標を入力"
y_1 = gets.to_i

circle1 = Circle.new(r_1,x_1,y_1)
print "面積:"
puts circle1.area
print "円周:"
puts circle1.circumference

puts "もう一つの円の半径を入力"
r_2 = gets.to_i
puts "もう一つの円のx座標を入力"
x_2 = gets.to_i
puts "もう一つの円のy座標を入力"
y_2 = gets.to_i
circle2 = Circle.new(r_2,x_2,y_2)

print "重なり:"
puts circleOverrap(circle1,circle2)

・各円は半径と中心座標を持っており、固有の面積や円周があるのでクラス内で導出できるように作成

・距離や重なりは二つの円オブジェクトから求めるので、クラス外から導出

・attr_readerでオブジェクトの情報を持ってこれるようにできることを忘れていたのでいい復習になった

この記事へのコメント

まだコメントはありません