続・Rubyの練習問題を解いてみた

15日目です。

本日は練習問題を解きましたが、応用になるとヒントなしで作り上げるのはまだ難しいです。

11日目でやった練習問題が途中で止まっていたので、本日は続きをやってみました。

 

問題はここから

https://www.yukisako.xyz/entry/ruby-practice

 

問11

「こんにちはを10回表示するプログラムを作ってください」(ただしwhile文で)

 n = 0
 while n < 10 do
  puts "こんにちは"
  n += 1
 end

これは前回つまづいた後何回もやったので簡単でした。

 

問12

「1〜10まで順番に表示するプログラムを書いてください」

 n = 1
 while n <= 10 do
  puts n
  n += 1
 end

これも上の文を少し改良すれば良いだけなのでいけました。

 

問13

「1〜100までの和を計算するプログラムを書いてください」

n = 0
sum = 0
while n < 100 do
n += 1
sum += n
end

puts "1~100までの和を計算すると、#{sum}になります"
 

これも合計を計算する練習問題をやっていたのですぐ実装のイメージが湧きました。

別解で下記のコードも書けますね

sum = 0
101.times { |n| sum += n }
puts sum

処理を101回繰り返します(nには0,1,2,3,・・・,99,100までが入ります)。

 

問14

「1〜30までの数字を順番に表示し、もしも3の倍数だったら「3の倍数です」と表示するプログラムを書いてください」

n = 1
while n <= 30 do
if n % 3 == 0
puts "#{n} は3の倍数です"
else
puts n
end
n += 1
end

これも繰り返しと条件分岐を使ってすぐ作れました。

 

問15

「1分ごとに2倍になっていく栗まんじゅうがあります。1つの栗まんじゅうは10分後にいくつになっているかを求めるプログラムを書いてください」

kuri_manju = 1
minutes = 0
while minutes < 10 do
kuri_manju *= 2
minutes += 1
end

puts kuri_manju

答えは「1024」なのですが、最初はターミナルに「2048」と表示され「???」となりました。そこでSEの弟に「ここがこうなってこうなるんだけどなぜか2048になるんだよね、、あ!」と説明しているうちに自分のおかしなところが発見できました。最初はwhile minutes <= 10 doにしてたので1回繰り返しが多かったのです。人に説明するのも一つの解決方法なんだなと発見できました。

 

全部whileで実装できたので、while文で使えるんだなあと思いました。

11日目でwhile文に触れる機会が少ないとか言ってた自分に「演習が足りないだけだよ」と言ってあげたいです笑

 

本日は時間切れなので、また問題16~20を解いてみます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーー

本日東京に戻ってきたのでWi-Fiのストレスから解放されました。

帰りの電車でも学習してましたが、場所によっては駅に止まった時以外圏外になることもあったので、今後もし地方に行くようなことがあったらまずネット環境をどうにしかしないといけないと思いました。

 

明日は初めて教室に行って学習しようと思います。