この記事の練習問題で使用する知識:
基礎文法(レッスン1)、比較演算子と論理演算子、while文による繰り返し処理、メソッドの定義と使用、eachメソッド、ハッシュ
<<前のページ | Ruby記事一覧 |
次のページ>> |
確認問題:アラビア数字をローマ数字に変換しよう
アラビア数字をローマ数字に変換するプログラムを作成しましょう。
ユーザーが1から3999までの数字を入力すると、その数字に対応するローマ数字が出力されるようにします。
なお、作成するメソッド内で以下のローマ数字の対応表を使用すること。
1000 => "M", 900 => "CM", 500 => "D", 400 => "CD", 100 => "C", 90 => "XC", 50 => "L", 40 => "XL", 10 => "X", 9 => "IX", 5 => "V", 4 => "IV", 1 => "I"
この問題の要件
以下の要件に従ってコードを完成させてください。
アラビア数字をローマ数字に変換するメソッド convert_to_roman
を定義すること。
- このメソッドは引数としてアラビア数字(整数)を受け取り、その整数に対応するローマ数字を文字列で返すこと。
メイン処理で以下を行うこと。
- ユーザーに1から3999の間の整数を入力させること。
- 入力値をメソッド
convert_to_roman
に渡し、ローマ数字に変換すること。 - 結果を画面に表示すること。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
アラビア数字を入力してください(1から3999の間): 1987 ローマ数字: MCMLXXXVII
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1:メソッド convert_to_roman
の定義
□ ハッシュ roman_map
にローマ数字の対応表を降順で設定
□ 空の文字列 roman_numeral
を初期化
□ roman_map
を繰り返し処理
□ □ while文で number
が現在のキー以上である間、ローマ数字を連結
□ □ □ ローマ数字を roman_numeral
に追加
□ □ □ number
からキーの値を減算
2:if __FILE__ == $0
でメイン処理を定義
□ 「アラビア数字を入力してください(1から3999の間)」と出力
□ 入力値を整数型に変換して変数 number
に代入
□ メソッド convert_to_roman
を呼び出して結果を変数 roman_numeral
に代入
□ 「ローマ数字: 」とローマ数字の変換結果を出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# アラビア数字をローマ数字に変換するメソッド def convert_to_roman(number) # ローマ数字の対応を降順で設定 =begin 【穴埋め問題1】 ここにローマ数字の対応表をハッシュ形式で降順に設定するコードを書いてください。 =end roman_numeral = "" # ローマ数字の対応を繰り返し処理でチェックしながら変換 =begin 【穴埋め問題2】 ここでeachメソッドを使って、対応表のキーと値を順番に処理するコードを書いてください。 =end roman_numeral end # メイン処理 if __FILE__ == $0 # ユーザーにアラビア数字を入力させる puts "アラビア数字を入力してください(1から3999の間):" =begin 【穴埋め問題3】 ここでgetsメソッドを使って、ユーザー入力を整数に変換し、変数numberに代入するコードを書いてください。 =end # 入力された数字をローマ数字に変換する =begin 【穴埋め問題4】 ここでconvert_to_romanメソッドを呼び出し、ローマ数字に変換して変数roman_numeralに代入するコードを書いてください。 =end # 結果を出力する puts "ローマ数字: #{roman_numeral}" end
この問題の穴埋めコードは以上です。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
確認問題の正解コードと解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
# アラビア数字をローマ数字に変換するメソッド def convert_to_roman(number) # ローマ数字の対応を降順で設定 roman_map = { 1000 => "M", 900 => "CM", 500 => "D", 400 => "CD", 100 => "C", 90 => "XC", 50 => "L", 40 => "XL", 10 => "X", 9 => "IX", 5 => "V", 4 => "IV", 1 => "I" } roman_numeral = "" # ローマ数字の対応を繰り返し処理でチェックしながら変換 roman_map.each do |key, value| while number >= key roman_numeral << value number -= key end end roman_numeral end # メイン処理 if __FILE__ == $0 # ユーザーにアラビア数字を入力させる puts "アラビア数字を入力してください(1から3999の間):" number = gets.to_i # 入力された数字をローマ数字に変換する roman_numeral = convert_to_roman(number) # 結果を出力する puts "ローマ数字: #{roman_numeral}" end
正解コードの解説
このコードはアラビア数字(例: 1234)をローマ数字(例: MCCXXXIV)に変換するプログラムです。
それではコードをブロックごとに解説していきます。
ローマ数字への変換メソッドの定義
def convert_to_roman(number) roman_map = { 1000 => "M", 900 => "CM", 500 => "D", 400 => "CD", 100 => "C", 90 => "XC", 50 => "L", 40 => "XL", 10 => "X", 9 => "IX", 5 => "V", 4 => "IV", 1 => "I" } roman_numeral = ""
def convert_to_roman(number)
:- メソッドの定義です。
convert_to_roman
は入力されたアラビア数字をローマ数字に変換する機能を持ちます。 number
はメソッドの引数で、ユーザーが変換したい数字を指定します。
- メソッドの定義です。
roman_map
:- ローマ数字の対応表(マッピング)をハッシュとして定義しています。
- キーはアラビア数字(例: 1000)、値は対応するローマ数字(例: “M”)です。
roman_numeral = ""
:- 結果となるローマ数字を格納するための変数を初期化します。最初は空の文字列です。
ローマ数字への変換ロジック
roman_map.each do |key, value| while number >= key roman_numeral << value number -= key end end roman_numeral end
roman_map.each do |key, value|
:- ハッシュ
roman_map
の各要素(キーと値のペア)を順に処理します。 - 例えばキー
1000
と値"M"
を取り出し、変換処理を行います。
- ハッシュ
while number >= key
:- アラビア数字
number
が現在のキーkey
以上の場合、この処理を繰り返します。 - 例えば
number
が1500で、キーが1000の場合、この処理を1回実行します。
- アラビア数字
roman_numeral << value
:- 対応するローマ数字
value
をroman_numeral
に追加します。 - 例えばキーが1000の場合、
"M"
が追加されます。
- 対応するローマ数字
number -= key
:- アラビア数字
number
からキーkey
の値を引きます。 - これにより、ローマ数字に変換済みの部分を取り除きます。
- アラビア数字
メイン処理部分
if __FILE__ == $0 puts "アラビア数字を入力してください(1から3999の間):" number = gets.to_i roman_numeral = convert_to_roman(number) puts "ローマ数字: #{roman_numeral}" end
if __FILE__ == $0
:- Rubyプログラムのエントリーポイントを指定します。このコードは、スクリプトとして実行された場合にのみ実行されます。
puts "アラビア数字を入力してください(1から3999の間):"
:- ユーザーにアラビア数字の入力を求めるメッセージを表示します。
number = gets.to_i
:- ユーザーが入力した値を取得し、整数型(
to_i
)に変換して変数number
に格納します。
- ユーザーが入力した値を取得し、整数型(
roman_numeral = convert_to_roman(number)
:- 入力されたアラビア数字をローマ数字に変換するために、
convert_to_roman
メソッドを呼び出します。
- 入力されたアラビア数字をローマ数字に変換するために、
puts "ローマ数字: #{roman_numeral}"
:- 変換結果のローマ数字を表示します。
まとめ
このプログラムではRubyの基礎文法を学ぶことができます。特に以下の点が重要です。
- ハッシュを使用してデータを管理する方法。
- メソッドの定義と引数の利用。
- **繰り返し処理(eachやwhile)**の活用。
実際にコードを実行し、さまざまな数字を入力してローマ数字に変換してみましょう。
Rubyの基本的な書き方とロジック構築の理解が深まります。ぜひ他の変換ルールや改良案も試してみてください!
<<前のページ |
Ruby記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。