LoginSignup
1
1

More than 1 year has passed since last update.

Rubyの問題を解いて知識を深める。⑤

Last updated at Posted at 2022-06-20

はじめに

今日も問題を解いていきます!
この問題集も、今日を含め残り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の問題が多いのでかなりなれてきた感じがある。
明日に続く。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1