アプリ版:「スタンプのみでお礼する」機能のリリースについて

10~50までの素数が格納されている配列を
rubyで作りたいのですが、どのようにすればいいいのかよくわかりません。

下のプログラムにも間違いがあるかもしれませんので
もしありましたご指摘お願い致します。

for i=start i<=end i++;//iは割られる数
for(j=1;j<=i;j++){//jは割る数
if(i%j==0){
count++;
}
}
if(count==2){
System.out.println(i);
}

iをjで割っていき、余りが0になったらカウントを増やしていくプログラムです。
素数は1とその数字でしか割れないので、カウントは2になり、
それを配列に格納したいのですが、ここではただ表示するだけに留まってしまっています。

まだruby初心者で分からないことだらけですので、
簡単な方法ではなく、出来ればfor文を使用したやり方で教えていただけると
幸いです。
よろしくお願い致します。

A 回答 (2件)

java,C言語でおなじみのfor文と全く同じ構文はrubyには有りません。


(そのため、初心者がつまずきやすいのも確かですが)
1から100の繰り返しは
for i in (1..100) do
・・・
end
のようになります。
配列の処理は以下のようにします。(他にもやり方はありますが1つの例です)
配列を格納する変数をhairetuとすると
hairetu = []# 配列の初期化
hairetu << 5# 配列へ追加 hairetu[0] = 5 と同じ
hairetu << 7# 配列へ追加 hairetu[1] = 7 と同じ

上記をふまえて、今回の質問者さんの内容をrubyでかくと以下のようになります
-------------------------------------------------------------
#素数を求めるメソッド(パラメータは開始の数値、終わりの数値)
def sosu(start_i,end_i)
ary = [] #素数を格納する配列を初期化
for i in (start_i..end_i) do
count = 0
for j in (1..i) do
if i%j == 0
count += 1 #rubyはcount++の命令はないのでこの形式になる
end
end
if count == 2
#print "i=",i,"\n" #素数の印字(現在はコメントにしてある)
ary << i #配列にiを加える
end
end
p ary #配列の内容を印刷
end

sosu(10,50)
--------------------------------------------------------------------
実行結果
[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
    • good
    • 0
この回答へのお礼

詳しく教えていただき有難うございました。
大変参考になりました。

お礼日時:2011/07/14 18:42

自分の意図にあわなかったからといって、何の説明もなく質問を打ち切るのは、どうかと思いますよ。



> まだruby初心者で分からないことだらけですので、
> 簡単な方法ではなく、出来ればfor文を使用したやり方で教えていただけると幸いです。

Rubyのforは、Javaの for( i: Object) 形式のものにあたり、C等でもおなじみの for(~;~;~)形式のものでも、Basic等のfor ~ to ~ でもありません。
また、Rubyプログラマ達の間では、for i in Obj より Obj.each ~ の方が好まれる傾向にあります。

配列に収めるにしても、空の配列に<<で追加、というのが一般的な方法です。これも、Javaの通常の配列では使わない方法です。(Listではaddを使いますが)

Rubyの勉強がしたいのなら、Rubyの流儀に慣れることも必要です。


それでも、forで、というのなら

まずは、御自身で調べてからにしてください。

forのような基本構文は、入門書でも最初の方にあるはずです。
そのJavaのプログラムの「意味」がわかっているなら、簡単に変換できるはずです。
それでわからない部分はっきりさせた上で集中的に聞かないと、身に付きませんよ。
    • good
    • 0
この回答へのお礼

申し訳ありません。
私の勉強不足でした。
自分で調べたりした後に、もっと理解を深めたうえで
また分からないことがあったら聞こうと思います。
有難うございました。

お礼日時:2011/07/14 18:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!