Rubyの初心者向け問題1-6:繰り返し処理を使いこなそう
この問題を解くために必要な知識:
【レベル1の知識】
コメントの書き方、変数と定数、基本データ型、四則演算と演算子、入力と出力、文字列操作、分岐処理(if、if~else、elsif、case)、繰り返し処理(for、while、until、each)、範囲(Range)、例外処理(begin-rescue-end)
<<前の問題 | 問題集Top |
次の問題>> |
Rubyの文法「繰り返し処理」とは
ここでは繰り返し処理(for、while、until、each)の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。
繰り返し処理は、同じ処理を複数回行いたい場合に使われます。
プログラムが自動的に繰り返し処理を実行することで、手動で何度も同じコードを書く手間を省くことができます。
Rubyでは主に次の4つの方法で繰り返し処理を行います。
for文
for文を使うと、指定した範囲内で繰り返し処理を実行できます。
for i in 1..5 do puts i end
このコードでは、1
から5
までの数字を順に出力します。
while文
while文は、指定した条件が真である限り、繰り返し処理を行います。
x = 0 while x < 10 do x += 1 puts x end
この例では、x
が10
未満である限り、x
の値を1ずつ増やしながら出力します。
until文
until文は、条件が偽である限り、繰り返し処理を行います。条件が真になるとループを終了します。
until x > 10 do x += 1 end
このコードは、x
が10
を超えるまで繰り返します。
eachメソッド
eachメソッドは、配列などのコレクションを1つずつ処理するのに便利です。
[1, 2, 3, 4, 5].each do |num| puts num end
このコードは、配列の各要素を順に取り出して出力します。
まとめ
Rubyの繰り返し処理は、状況に応じてさまざまな方法を使い分けることができます。
これらの基本的な繰り返し処理を理解することで、プログラムを効率的に書けるようになります。
Ruby練習問題1-6:繰り返し処理を使いこなそう
Rubyの繰り返し処理を使って、さまざまな操作を行うプログラムを作成しましょう。
まず、1から10までの数値を順に表示し、次にユーザーから数値を入力させ、その合計を計算します。
さらに、合計が100を超えるまで繰り返し処理を行い、配列に含まれる数値を1つずつ表示するプログラムを作成します。
この問題の要件
以下の要件に従ってコードを完成させてください。
- or文を使って1から10までの数値を順に表示すること。
- while文を使ってユーザーからの入力を受け付け、その合計を計算すること。0が入力されたら終了すること。
- until文を使って、合計が100を超えるまでユーザーからの入力を受け付けること。
- eachメソッドを使って、配列の各要素を順に出力すること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
1から10までの数値を表示します: 1 2 3 4 5 6 7 8 9 10 数値を入力してください(0を入力すると終了します): 5 現在の合計は:5 10 現在の合計は:15 0 最終的な合計は:15 合計が100以上になるまで数値を入力してください(現在の合計:0): 50 合計が100以上になるまで数値を入力してください(現在の合計:50): 60 合計が100以上になりました。最終的な合計は:110 配列の各要素を表示します: 5 10 15 20 25
----- ↑出力される結果の例↑ -----
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.for文による繰り返し処理
1-1. 1から10までの数値を順に表示するfor文
1-1-1. 範囲を1から10に設定
1-1-2. 各数値を画面に出力する
2.while文によるユーザーからの入力を使った繰り返し処理
2-1. ユーザーから数値の入力を受け付けるためのwhile文
2-1-1. 0を入力するまでユーザーの入力を繰り返す
2-1-2. 入力された数値を合計に加算
2-1-3. 現在の合計を画面に出力
2-1-4. ユーザーから再度入力を受け付ける
3.until文による条件付き繰り返し処理
3-1. 合計が100に達するまでユーザーの入力を受け付けるuntil文
3-1-1. 現在の合計を表示
3-1-2. ユーザーから数値を入力させ、合計に加算
3-1-3. 合計が100以上になった場合にループを終了する
4.eachメソッドを使った配列要素の出力
4-1. 配列numbersに含まれる要素を順に出力するeachメソッド
4-1-1. 各要素を順に画面に表示する
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# forを使って1から10までの数値を表示 puts "1から10までの数値を表示します:" for i in 1..10 =begin 【穴埋め問題1】 ここに数値を出力するコードを書いてください。 =end end # whileを使ってユーザーからの入力を受け付け、合計を求める puts "数値を入力してください(0を入力すると終了します):" sum = 0 input = gets.chomp.to_i while input != 0 =begin 【穴埋め問題2】 ここに合計を計算し、現在の合計を表示するコードを書いてください。 =end input = gets.chomp.to_i end puts "最終的な合計は:#{sum}" # untilを使って合計が100以上になるまでユーザーからの入力を受け付ける sum_until = 0 until sum_until >= 100 puts "合計が100以上になるまで数値を入力してください(現在の合計:#{sum_until}):" input_until = gets.chomp.to_i =begin 【穴埋め問題3】 ここに合計を更新するコードを書いてください。 =end end puts "合計が100以上になりました。最終的な合計は:#{sum_until}" # eachを使って配列の各要素を出力する numbers = [5, 10, 15, 20, 25] puts "配列の各要素を表示します:" numbers.each do |number| =begin 【穴埋め問題4】 ここに配列の要素を出力するコードを書いてください。 =end end
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
# 繰り返し処理を使いこなそう # forを使って1から10までの数値を表示 puts "1から10までの数値を表示します:" for i in 1..10 puts i end # whileを使ってユーザーからの入力を受け付け、合計を求める puts "数値を入力してください(0を入力すると終了します):" sum = 0 input = gets.chomp.to_i while input != 0 sum += input puts "現在の合計は:#{sum}" input = gets.chomp.to_i end puts "最終的な合計は:#{sum}" # untilを使って合計が100以上になるまでユーザーからの入力を受け付ける sum_until = 0 until sum_until >= 100 puts "合計が100以上になるまで数値を入力してください(現在の合計:#{sum_until}):" input_until = gets.chomp.to_i sum_until += input_until end puts "合計が100以上になりました。最終的な合計は:#{sum_until}" # eachを使って配列の各要素を出力する numbers = [5, 10, 15, 20, 25] puts "配列の各要素を表示します:" numbers.each do |number| puts number end
********************
コードの解説
このコードは、Rubyの繰り返し処理(for、while、until、each)を用いたプログラムです。
それぞれの繰り返し処理がどのように機能しているかを解説します。
for文による数値の表示
puts "1から10までの数値を表示します:" for i in 1..10 puts i end
for
文は指定した範囲内の値を順に処理するために使います。この場合、1..10
という範囲が指定されており、i
が1から10まで順番に変化します。
そしてputs i
によって、各数値が表示されます。for
文は決まった回数だけ繰り返し処理を行う場合に便利です。
while文による合計の計算
puts "数値を入力してください(0を入力すると終了します):" sum = 0 input = gets.chomp.to_i while input != 0 sum += input puts "現在の合計は:#{sum}" input = gets.chomp.to_i end puts "最終的な合計は:#{sum}"
while
文は、条件が真の間繰り返し処理を実行します。この場合、ユーザーが入力した値が0
でない限り、繰り返し処理が続きます。
sum += input
で合計値が更新され、入力が0
になるとループが終了します。while
文は、繰り返し回数が予測できない状況に適しています。
until文による条件付き繰り返し
sum_until = 0 until sum_until >= 100 puts "合計が100以上になるまで数値を入力してください(現在の合計:#{sum_until}):" input_until = gets.chomp.to_i sum_until += input_until end puts "合計が100以上になりました。最終的な合計は:#{sum_until}"
until
文は、条件が真になるまで繰り返し処理を行います。
ここでは、sum_until
が100以上になるまでユーザーからの入力を受け付けます。
while
文とは逆に、until
文は条件が「偽」の間に繰り返し処理を実行する点が特徴です。
eachメソッドによる配列の操作
numbers = [5, 10, 15, 20, 25] puts "配列の各要素を表示します:" numbers.each do |number| puts number end
each
メソッドは、配列やハッシュなどのコレクションの各要素を1つずつ処理する際に使われます。
ここでは、numbers
配列の各要素がnumber
に代入され、puts
によって順番に出力されます。
配列の要素を1つずつ処理する場合、each
メソッドはシンプルで効率的です。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。