はじめに
今日も問題を解いていきます!
この問題集も、今日を含め残り3日!!
Q21 簡単な計算を行うRubyプログラムの作成
二桁以上の整数を入力すると、十の位と一の位の数字の足し算、十の位と一の位の数字の掛け算をそれぞれ行い、最後に2つの結果を足し合わせて出力するプログラムをRubyで作成。
ターミナルでの入力例
> 二桁の整数を入力してください
> 15
# 1 + 5 と 1 × 5 をそれぞれ計算
> 足し算結果と掛け算結果の合計値は11です
解答
def addition(a, b)
a + b
end
def multiplication(a, b)
a * b
end
def slice_num(num)
# 10の位
tens_place = (num / 10) % 10
# 1の位
ones_place = num % 10
return tens_place, ones_place
end
puts "二桁の整数を入力してください"
input = gets.to_i
X, Y = slice_num(input)
add_result = addition(X, Y)
multiple_result = multiplication(X, Y)
puts "足し算結果と掛け算結果の合計値は#{add_result + multiple_result}です"
今までの問題に比べて一気に複雑化してきた印象。
ポイントはRubyの性質上、整数同士(integer型)の計算だと返り値は整数になるので、小数点以下は切り捨てられること。
また、カンマで区切ることで複数の変数を定義しているという点。X, Y に10の位、1の位を同時に代入している。
Q22 if,else問題
以下の仕様を満たすメソッドnumを作成。
- メソッドの実引数として「1以上の正の整数」を3つ用意し、それぞれを仮引数a,b,c としてnumメソッド内で使用する
- 第一引数と第二引数は足し算をし、変数abに代入する
- 第三引数が3以下の場合は変数abを第三引数の値で割り、結果を出力する
- 第三引数が4以上の場合は変数abを第三引数の値で掛け、結果を出力する
雛形
def num(a, b, c)
# ここに条件式を実装する
end
# 呼び出し例
num(1,5,3)
num(1,5,5)
出力例
num(1,5,3) → 2
num(1,5,5) → 30
解答
def num(a, b, c)
ab = a + b
if c <= 3
puts ab / c
else
puts ab * c
end
# 呼び出し例
num(1,5,3)
num(1,5,5)
Q23 if,else問題
ECサイトのポイント付与サービスを考える。
購入金額が999円以下の場合、3%のポイント
購入金額が1000円以上の場合、5%のポイント
このように付与されるポイントを出力するメソッドを作る。
ただし誕生日の場合はポイントが5倍。
誕生日の場合はtrue, 誕生日でない場合はfalseで表す。
また、小数点以下をすべてのポイント計算が終わったあとに切り捨てる。
呼び出し方:
calculate_points(amount, is_birthday)
出力例:
calculate_points(500, false) → ポイントは15点です
calculate_points(2000, false) → ポイントは100点です
calculate_points(3000, true) → ポイントは750点です
解答
def calculate_points(amount, is_birthday)
if amount <= 999
point = amount * 0.03
else
point = amount * 0.05
end
if is_birthday
point = point * 5
end
puts "ポイントは#{point.floor}点です"
end
ポイントは.floorメソッドを用いること。
.floorメソッドは小数点の切り捨てに使う。
irb(main):001:0> 3.1.floor
=> 3
irb(main):002:0> 3.9.floor
=> 3
Q25 FizzBuzz問題
1〜100までの数字をターミナルに出力。ただし、「3の倍数」のときは数字の代わりに文字列でFizzと、「5の倍数」のときはBuzz、3と5の倍数である「15の倍数」のときはFizzBuzzと出力。
解答
def fizz_buzz
num = 1 #1〜100のため。
while num <= 100 do #100になるまで繰り返す。
if num % 15 == 0 #3*5=3と5の倍数
puts "FizzBuzz"
elsif num % 3 == 0 #3の倍数
puts "Fizz"
elsif num % 5 == 0 #5の倍数
puts "Buzz"
else
puts num #数字を出力
end
num = num + 1 #数字に1を足す
end
end
fizz_buzz
繰り返しと条件分岐の組み合わせ。この問題は未経験のプログラミングの問題で出る確率が高そう。(あくまで個人的な予想ですが。。)
終わりに
if,elseの問題が多いのでかなりなれてきた感じがある。
明日に続く。