学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース

Rubyプログラミング入門その5 繰り返しのプログラム while

<<前  [TOP]  次>>


メモ帳を開いて次の繰り返しのプログラムを作ってみましょう。


【whiletest1.rb】

# whiletest1.rb

puts 'ループに入る前です。'

i = 0; 

while i < 10 do

	puts 'ここはループの中です。' 
	i += 1 
end

puts 'ループの外に出ました。' 



では、プログラムの内容をみていきましょう。
このプログラムでは、while文という構文を使っています。

while 条件 do

end



もし、whileのあと条件に当てはまれば、そのあとのdo~endの処理が実行されます。
条件が当てはまっているうちは永遠にdo~endの処理が実行されます。


気をつけなければならないのは、終わらないような条件を入れてしまうと無限ループになってしまうということです。
その場合、プログラムを実行したときに終わることなく永遠に動き続けてしまいます。
もし、気づかず無限ループになってしまってそのまま実行し、プログラムが止まらなくなってしまったら、コントロールボタン(Ctrl)とCボタンを同時に押す(Ctrl+C)とプログラムを強制終了することができます。


では、プログラムの内容を見ていきましょう。
最初の条件は、次のように宣言されています。
i = 0
これは、while文に入る前に宣言し、変数 i を初期化しています。
i=0なのでそのままwhile文の中に入ります。
ここで、次の文が実行されます
i += 1
これは、変数 i に 1を足すという意味です。
これを、インクリメントといいます。


このプログラムでは、まず i がインクリメントされて、変数 i の値が1になります。
その後、またwhile文に入り、インクリメントが繰り返されます。
i の値が10になったらループを抜けます。


出力結果を見てみましょう。
f:id:MrRadiology:20180112144556p:plain


もう一つ、違う形のプログラムを見てみましょう。


【whiletest2.rb】

# whiletest2.rb

i = 0
x = 1

while true do 

	if x > 1000000 then
		break
	end

	x *= 2
	i += 1 
end

puts '2の' + i.to_s + ''  + ' > 1000000' 



ここでは、while文の条件にtrueを使っています。
これを使うと、わざと無限ループを作ることができます。
しかし、このままでは終わらないプログラムになってしまいます。
そこで、breakを使います。
このbreakが読まれた時点で、ループから抜けることができます。


このプログラムでは、if文の条件に当てはまるまでループします。


次の文も見てみましょう。
x *= 2
これは、次の文と同じ意味です。
x = x*2
どちらで書いても同じですが、x *= 2と書く方が一般的です。


出力結果を見てみます。
f:id:MrRadiology:20180112145311p:plain


もう一つ、プログラムを見てみましょう。


【whiletest3.rb】

# whiletest3.rb

x = rand(0.1..0.9)

puts 'x=' + x.to_s

while x < 0.5 do 
	x = rand(0.1..0.9)
	puts 'x=' + x.to_s 
end

puts 'ループから抜けました。' 



0.1から1.0未満の間で数字がランダムに出てきます。
0.5以上になるまで表示が続き、0.5以上になると「ループから抜けました」とプリントされループを抜けます。


なお、出力結果は一例で、ループにいる回数や数字は実行する度に違います。
f:id:MrRadiology:20180112151350p:plain


whiletest3.rbと同じ出力結果になるようにプログラムを書き換えてみます。
【whiletest4.rb】

# whiletest4.rb

while (x = rand(0.1..0.9)) < 0.5 do 
	puts 'x=' + x.to_s
end

puts 'ループから抜けました。' 



実行結果です。
f:id:MrRadiology:20180112152247p:plain


これらの応用で、このような繰り返しのプログラムも書けます。


【whiletest5.rb】

# whiletest5.rb

puts 'ループの中に入ります。' 
	
count = 0 

while true do 
	if count > 9 then 
		break 
	end

		puts 'ループの中です:' + count.to_s 
		count += 1 

end

puts 'ループから抜けました。' 



実行結果です。
f:id:MrRadiology:20180112153235p:plain


<<前  [TOP]  次>>