2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby 預金システムのアルゴリズム問題

Posted at

以下の条件を達成するプログラムを実装しなさい

銀行口座に10万円の預金残高があり、お金を引き出すプログラムを作成します。
・お金を引き出すwithdrawメソッドを作成する
・お金を引き出すと手数料110円かかり、「◯◯円引き落としました。残高は◯◯円です」と表示する(残高は手数料を引いた額を表示します)
・もし預金残高より多く引き落としたら「残高不足です」と表示する
・以下にヒントを用意するので参考にしてください

雛形
def withdraw(balance, amount)
  fee = 110  # 手数料
# 引き落とし額と残高を表示する、もしくは残高より多く引き落としたら残高不足と表示
end

balance = 100000  # 残高
puts "いくら引き落としますか?(手数料110円かかります)"
money = gets.to_i
withdraw(balance, money)
自分の解答
def withdraw(balance, amount)
  fee = 110  # 手数料
  if balance >= amount
    puts "#{amount}円引き落としました。残高は#{balance -(amount + fee)}円です"
  else
    puts "残高不足です"
  end
end

balance = 100000  # 残高
puts "いくら引き落としますか?(手数料110円かかります)"
money = gets.to_i
withdraw(balance, money)
模範解答
def withdraw(balance, amount)
  fee = 110
  if balance >= (amount + fee)
    balance -= (amount + fee)
    puts "#{amount}円引き落としました。残高は#{balance}円です"
  else
    puts "残高不足です"
  end
end

balance = 100000
puts "いくら引き落としますか?(手数料110円かかります)"
money = gets.to_i
withdraw(balance, money)

解説

balance >= (amount + fee)

これは、引き落としたい金額 + 手数料が残高100,000円以下という計算式です。

balance -= (amount + fee)
# balance = balance - (amount + fee)と同じ処理がされます。

これは、引き落としたい金額 + 手数料が残高100,000円ちょうどのときという式です。自分の解答の中では、この部分を考慮できていませんでした。
「 -= 」の部分があまり見慣れないなと感じたのですが、落ち着いて考えれば納得できました。

if文の中で式をまとめておけば、
「◯◯円引き落としました。残高は◯◯円です」
この部分はスマートなコードでまとめることができます。

模範解答のように読みやすいコードを書けるようになる必要があるなと痛感しました。
可読性を上げる方法はまだまだあるぞ、と。もっと勉強して、考えて、スキルを身に付けます。

2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?