Ruby練習問題3-1:メソッドを使って計算機プログラムを作ろう

記事内に商品プロモーションを含む場合があります

Rubyの初心者向け問題3-1:メソッドを使って計算機プログラムを作ろう

この問題を解くために必要な知識:
【レベル1~2の知識】
コメントの書き方、変数と定数、基本データ型、四則演算と演算子、入力と出力、文字列操作、分岐処理(if、if~else、elsif、case)、繰り返し処理(for、while、until、each)、範囲(Range)、例外処理(begin-rescue-end)、配列(Array)、ハッシュ(Hash)、コレクション操作(配列、ハッシュの操作)、Enumerableモジュール

【レベル3の知識】
メソッドの定義と呼び出し、メソッドの戻り値クラスの定義と使用コンストラクタクラスの継承モジュールの定義と使用ミックスイン

<<前の問題 問題集Top 次の問題>>

Rubyの文法「メソッド」とは

ここではメソッドの意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。



メソッドは、プログラムの中で特定の処理をまとめたもので、何度も繰り返し使うことができる機能です。これにより、コードの再利用性を高め、プログラムの読みやすさや保守性が向上します。

メソッドの定義方法

Rubyでメソッドを定義するには、defというキーワードを使います。その後にメソッド名を指定し、必要に応じて引数(メソッド内で利用するデータ)をカッコ内に記述します。最後にendでメソッドの定義を終了します。

例えば、2つの数値を足すメソッドを定義したい場合、次のように書きます。

def add(a, b)
  a + b
end

このメソッドは、引数として渡されたabの和を返します。

メソッドの呼び出し方法

定義したメソッドは、その名前を使って呼び出すことができます。メソッド名の後に引数を指定すれば、定義された処理が実行されます。

次のコードは、上で定義したaddメソッドを呼び出して、10と20を足した結果を表示します。

puts add(10, 20)

実行すると、画面に「30」と表示されます。

まとめ

メソッドを定義することで、同じ処理を繰り返し書く必要がなくなり、コードがすっきりと整理されます。

また、メソッド名を使って簡単に処理を呼び出せるため、プログラム全体の可読性も向上します。




Ruby練習問題3-1:メソッドを使って計算機プログラムを作ろう

簡単な計算機プログラムを作成しましょう。

このプログラムでは、加算、減算、乗算、除算の4つの基本的な算術演算を行います。

ユーザーが入力した2つの数値を使用して、それぞれの計算を実行し、結果を画面に表示します。

また、計算を続けるかどうかをユーザーに尋ねる機能も実装します。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • add(a, b)メソッドを定義し、2つの引数を加算して結果を表示すること。
  • subtract(a, b)メソッドを定義し、2つの引数を減算して結果を表示すること。
  • multiply(a, b)メソッドを定義し、2つの引数を乗算して結果を表示すること。
  • divide(a, b)メソッドを定義し、2つの引数を除算して結果を表示すること。ただし、0で割る場合はエラーメッセージを表示すること。
  • ユーザーから2つの数値を入力させ、その数値を使って加算、減算、乗算、除算のいずれかを選択して計算を行うこと。
  • 計算を続けるかどうかをユーザーに尋ね、yesと答えた場合は再度計算を行い、noと答えた場合はプログラムを終了すること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

1つ目の数値を入力してください:
10
2つ目の数値を入力してください:
5
加算は1、減算は2、乗算は3、除算は4を入力してください:
1
結果: 15.0
計算を続けますか? (yes/no)
no
プログラムを終了します。

----- ↑出力される結果の例↑ -----

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.加算メソッドadd(a, b)の定義
 1-1. 引数abを加算し、結果を表示する

2.減算メソッドsubtract(a, b)の定義
 2-1. 引数abを減算し、結果を表示する

3.乗算メソッドmultiply(a, b)の定義
 3-1. 引数abを乗算し、結果を表示する

4.除算メソッドdivide(a, b)の定義
 4-1. 引数abを除算し、結果を表示する
 4-2. bが0の場合は、エラーメッセージを表示する

5.ユーザーが計算を続けるか尋ねるメソッドcontinue?の定義
 5-1. ユーザーに計算を続けるかどうか確認する
 5-2. ユーザーが「yes」と答えた場合にtrueを返す

6.メインプログラム
 6-1. continue_calculation変数をtrueに設定し、ループを開始する
 6-2. 1つ目の数値をユーザーから入力させ、num1に格納する
 6-3. 2つ目の数値をユーザーから入力させ、num2に格納する
 6-4. 加算、減算、乗算、除算のいずれかを選択する操作をユーザーに選ばせる
  6-4-1. 1を選択した場合は、加算メソッドadd(num1, num2)を実行する
  6-4-2. 2を選択した場合は、減算メソッドsubtract(num1, num2)を実行する
  6-4-3. 3を選択した場合は、乗算メソッドmultiply(num1, num2)を実行する
  6-4-4. 4を選択した場合は、除算メソッドdivide(num1, num2)を実行する
  6-4-5. 無効な操作が選択された場合は、エラーメッセージを表示する
 6-5. 計算を続けるかどうかを確認し、続ける場合は再度ループを行う
 6-6. ユーザーが計算を終了する場合は、プログラムを終了する

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# 加算を行うメソッド
def add(a, b)
  =begin
  【穴埋め問題1】
  ここに加算を行い、その結果を表示するコードを書いてください。
  =end
end

# 減算を行うメソッド
def subtract(a, b)
  =begin
  【穴埋め問題2】
  ここに減算を行い、その結果を表示するコードを書いてください。
  =end
end

# 乗算を行うメソッド
def multiply(a, b)
  =begin
  【穴埋め問題3】
  ここに乗算を行い、その結果を表示するコードを書いてください。
  =end
end

# 除算を行うメソッド
def divide(a, b)
  =begin
  【穴埋め問題4】
  ここに除算を行い、0で割るかどうかを確認するコードを書いてください。
  =end
end

# ユーザーが計算を続けたいかどうかを尋ねるメソッド
def continue?
  =begin
  【穴埋め問題5】
  ここに計算を続けるかどうかを確認し、続ける場合はtrueを返すコードを書いてください。
  =end
end

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

# ここでは簡単な計算機プログラムを作成します。

# 加算を行うメソッド
def add(a, b)
  puts "結果: #{a + b}"
end

# 減算を行うメソッド
def subtract(a, b)
  puts "結果: #{a - b}"
end

# 乗算を行うメソッド
def multiply(a, b)
  puts "結果: #{a * b}"
end

# 除算を行うメソッド
def divide(a, b)
  # 0で割ることを防ぐためのチェック
  if b == 0
    puts "エラー: 0で割ることはできません"
  else
    puts "結果: #{a / b}"
  end
end

# ユーザーが計算を続けたいかどうかを尋ねるメソッド
def continue?
  puts "計算を続けますか? (yes/no)"
  answer = gets.chomp.downcase
  answer == "yes"
end

# メインのプログラム
continue_calculation = true

while continue_calculation
  # ユーザーから2つの数値を入力として受け取る
  puts "1つ目の数値を入力してください:"
  num1 = gets.to_f
  puts "2つ目の数値を入力してください:"
  num2 = gets.to_f

  # ユーザーに操作を選択させる
  puts "加算は1、減算は2、乗算は3、除算は4を入力してください:"
  operation = gets.to_i

  # 選択された操作を実行
  case operation
  when 1
    add(num1, num2)
  when 2
    subtract(num1, num2)
  when 3
    multiply(num1, num2)
  when 4
    divide(num1, num2)
  else
    puts "無効な操作です"
  end

  # ユーザーが計算を続けたいかどうかを確認する
  continue_calculation = continue?
end

puts "プログラムを終了します。"

********************

コードの解説

以下のRubyコードは、メソッドの定義と呼び出しを使って四則演算(加算、減算、乗算、除算)を行う簡単な計算機プログラムです。各部分がどのように機能するかを順番に説明していきます。

メソッドの定義

def add(a, b)
  puts "結果: #{a + b}"
end

ここではaddというメソッドを定義しています。defキーワードでメソッドを定義し、addがメソッド名です。

(a, b)は引数リストで、このメソッドは2つの数値を受け取ります。putsa + bの結果を画面に表示します。

他のsubtract(減算)、multiply(乗算)、divide(除算)メソッドも同様に定義されています。

条件分岐と例外処理(除算)

def divide(a, b)
  if b == 0
    puts "エラー: 0で割ることはできません"
  else
    puts "結果: #{a / b}"
  end
end

divideメソッドでは、bが0でないかを確認するためにif文を使っています。0で割るとエラーが発生するため、このようにエラーメッセージを表示して対処しています。

elseの部分で通常の除算を行い、その結果を表示します。

初心者にとって、除算では0で割るケースに対応する方法を学ぶのは重要です。

メソッドの呼び出し

add(num1, num2)
subtract(num1, num2)
multiply(num1, num2)
divide(num1, num2)

上記のコードで定義したメソッドは、こうして呼び出すことができます。

例えば、add(num1, num2)は、変数num1num2を引数としてaddメソッドに渡し、その結果を表示します。

これにより、メソッドがどのように使われるかが理解できます。

ユーザーからの入力とループ

puts "1つ目の数値を入力してください:"
num1 = gets.to_f
puts "2つ目の数値を入力してください:"
num2 = gets.to_f

この部分では、getsを使ってユーザーからの入力を受け取り、その入力をto_fメソッドで浮動小数点数に変換しています。

数値を扱う際には、このように適切なデータ型に変換することが大事です。

ユーザーが計算を続けるかどうかを確認する

def continue?
  puts "計算を続けますか? (yes/no)"
  answer = gets.chomp.downcase
  answer == "yes"
end

このcontinue?メソッドは、ユーザーが計算を続けるかどうかを尋ねます。

getsでユーザーの入力を受け取り、chompで余分な改行を削除し、downcaseで入力を小文字に変換します。"yes"であればtrueを返し、プログラムは再び計算を続けます。

繰り返し処理(ループ)

while continue_calculation
  # 計算処理
  continue_calculation = continue?
end

whileループを使って、ユーザーが「yes」と答えた限り計算を続けます。この部分では、ループの仕組みとユーザーインタラクションを学ぶことができます。

まとめ

このプログラムでは、基本的なメソッドの定義と呼び出し、条件分岐、ユーザー入力の扱い方、ループ処理を学ぶことができます。

特にメソッドを定義して再利用することで、同じ処理を繰り返し実行する際に効率的にコードを書く方法を理解できます。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Ruby練習問題集へ戻る
    トップページへ戻る