質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

1094閲覧

Rubyでわからない部分があります。a,bの間にあるcの約数がいくつか。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2016/07/09 09:50

編集2016/07/09 09:54

a,b,cの数字が与えられた場合の、a,b間にあるcの約数の数を求めるプログラムなのですが、以下の3行目がよくわかりません。

a,b,c = gets.chomp.split.map(&:to_i)
count = 0
(a..b).each {|i| count += 1 if c%i == 0}
puts count

.each{}の{}内の挙動がよくわかりません。

if c%i==0であれば、count +=1にして、|i|に代入。それを(a..b)の間で行う、という挙動でいいのでしょうか?

教えてください。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

eachは配列(Array)や範囲(Range)を一つ一つ順番に渡して、{}(ブロックといいます)内の処理をします

(a..b)の範囲の要素を一つ一つについて、aから順番にiに入れて、あるiについてif c%i==0であればcount +=1して、次の数に移って、最後はbまで処理したら終わり。

という挙動になります。

投稿2016/07/09 10:04

編集2016/07/09 10:06
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/09 23:14

回答ありがとうございます。 aから順にiに入れていくのが、正しい挙動なのですね。わかりました。 ありがとうございました。
guest

0

(a..b).each { |i| ... }

i を a から b まで順番に動かしていき、 ... の部分の処理を行う
という挙動になります。
|i| は a から b までの値動かしていくときに、どの名前で現在の値を保持させるかを指定するものです。
変数名として許されるものなら、どんなものを指定しても構いません。
例:

ruby

1(1..3).each { |num| puts num } 2実行結果 31 42 53

つまり、

... if c%i==0であれば、count +=1にして、|i|に代入。それを(a..b)の間で行う、という挙動でいいのでしょうか?...

という解釈はすこし違っています。

c % i == 0 であれば、count +=1 を行う。これを i を a, a + 1, ...b - 1, b と順番に変化させて行う。
という解釈が適切とおもいます。

投稿2016/07/09 11:39

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/09 23:12

回答ありがとうございます。 なるほど。値を保持するために、|i|があるのですね。理解しました。 ありがとうございました。
guest

0

if c%i==0であれば、count +=1にして、|i|に代入。それを(a..b)の間で行う、という挙動でいいのでしょうか?

大筋おっしゃる通りです。
ただ細かい指摘になってしまいますが、
「|i|に代入」はされません。

そもそもeachに限らずループでiに相当する変数に
代入することはまずありません。バグの元になるので、
カウンタ用の変数に代入しよう、という発想はしない方を推奨します。

投稿2016/07/09 11:05

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/09 23:13

回答ありがとうございます。 わかりました。代入はないのですね。気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問