ページ 11

配列を計算して比較するとエラーが…

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様
ありがとうございました。