ちょっと家の方でゴタゴタしたりサイトをサーバーにアップするとこでつまづいたりで投稿頻度が落ちてますが、なんとか継続できるよう頑張りたいです。
数字の配列から要素の最大値を返す(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でオブジェクトの情報を持ってこれるようにできることを忘れていたのでいい復習になった
この記事へのコメント