ページ 1 / 1
配列を計算して比較するとエラーが…
Posted: 2007年6月22日(金) 00:59
by 雷
配列を使用して、素数計算をしているのですが、どうしてもエラーになるところがあるので、教えていただけませんか?
前半は配列を使っていない状態です。
赤い個所を緑のように変更します。
そうすると、エラーが青の部分で起こります。
配列を用いて計算をした時比較は出来ないのでしょうか?
よろしくお願いします。
#define PRIME 1
#define NOPRIME 2
#include <stdio.h>
int main()
{
//a=フラグ i=素数用変数 j=割り算判定 x=格納変数 number=格納配列
int a, i, j, x=2, number[100]={1,2};
for(i=3; i<10; i++){ //数の決定
a = PRIME;
for(j=2; j<i && (a == PRIME); j++){ //割る数決定
if( i%j == 0 ){ //割り切れた時=素数でない
a = NOPRIME;
break;
}
}
for(j=2; (number[j])<i && (a == PRIME); j++){ //割る数決定
☆ if( (i%(number[j])) == 0 ){ //割り切れた時=素数でない
a = NOPRIME;
break;
}
}
if(a == PRIME){ //割り切れなかった時実行
number[x] = i;
x++;
printf("確認用:%d\n",i); //確認用
}
printf(" 数字:%d終了\n",i);
}
//最終表示
for(i=0; i<x; i++){
printf("%d,",number);
}
return 0;
}
Re:配列を計算して比較するとエラーが…
Posted: 2007年6月22日(金) 03:53
by フリオ
"a = NOPRIME"の後に"break"しているので、"for(・・・;・・・ && (a == PRIME);・・・)"
の"a == PRIME"は、必要ない。
配列"number"にどのような値が格納されているか確認しましょう。
Re:配列を計算して比較するとエラーが…
Posted: 2007年6月22日(金) 13:11
by 雷
あれは、あったほうが計算量が少なくなるので、付けています。
number[/url]には0がきちんと入っていたのですが、どうしても比較するところで、エラーが起きているのです。
Re:配列を計算して比較するとエラーが…
Posted: 2007年6月22日(金) 13:30
by バグ
単純にnumber配列の初期化が出来てないからではないですか?
number[100]={1,2};
これだけでは、number[/url]の添え字が0か1以外の場合に例外が発生するかと思いますよ。
Re:配列を計算して比較するとエラーが…
Posted: 2007年6月22日(金) 13:36
by バグ
if( (i%(number[j])) == 0 )
上記のエラーの出ている箇所ですが、jの初期値が2な訳ですから、最初に参照される値がnumber[2]になりますよね?
初期化されていませんが、たまたま0が入っていたとしても、余り算とはいえ0で割るという行為においては結果は同じです。
0で割る事で例外が発生しているのではないかと思います。
Re:配列を計算して比較するとエラーが…
Posted: 2007年6月22日(金) 13:40
by Justy
>初期化されていませんが
初期化はされてますよ、number[2]以降は0に。
だから確実に例外が発生します。
Re:配列を計算して比較するとエラーが…
Posted: 2007年6月22日(金) 13:59
by 雷
あ、、、参照された次のが決定して無いことに気づけて居ませんでした。
バグ様、Justy様
ありがとうございました。