Swiftでアプリ。- 作ってみよう。 while文
詳解Swiftより例題で出されているものをちょっと考えながら書いて実行して理解を深めます。
while文
整数のビット数を求めます。
ビットとは
ということで、
let val = 10032
var i = 1,mask = 2
while mask <= val{
mask <<= 1
i += 1
}
print(i) // 14
print(mask) // 16384
これを実行すると"14"と出てきます。maskは16384となっています。
2進数で14桁で表現できるということになりました。ループ自体は13回ですが、最初の時点で"2"を使っていて初期値を"1"としているので14となります。
"i"には何回ループしたかを記録する数字を入れます。あとは変数maskに初期値2が入っているので
で1ビットずらしていきmaskがvalに代入されている10032を超えるまでwhileループさせます。条件が成り立たなくなった時点でループを抜けるのでその時の"i"の値がビットの数、2進数の桁すうとなります。
13回ループした時点で"16384"となっているので次に、10032と比べた時点では条件が合わないのでループを抜けます。
repeat-while文
コラッツの問題のプログラムです。
var n = 7
repeat{
print("\(n) ", terminator:"")
if n % 2 == 0{
n /= 2
}else{
n = n * 3 + 1
}
}while n > 1
print(n) // 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
repeat-while文では最初の1回目の処理をしてから"while"で条件をチェックします。なので1回は必ず処理するところがwhile文とは違うところです。
まず以下で改行しないで"n"を出力するようにしています。
次に
偶数の場合、奇数の場合の処理をしています。
この操作を
"n"が"1"以上の場合に繰り返します。
この記事が気に入ったらサポートをしてみませんか?