C言語実行時のエラーについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
乱数ちゃん

C言語実行時のエラーについて

#1

投稿記事 by 乱数ちゃん » 14年前

C言語で重複なしの乱数を生成するためのプログラムを組んだのですが、エラーが出てうまく実行してくれません。
「問題が発生したため、test.exe を終了します。 ご不便をおかけして申し訳ありません。」だなんて云うんですよ・・・

コード:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* プロトタイプ宣言 */
int  GetRand(int Num);							/* 0~Numまでの乱数生成 */
void ChangeNumber( int *a, int *b );			/* aとb入れ替え */
void NoOverlapRand(int min, int max, int *val);	/* min~maxまで重複なし乱数を配列*valに格納 */


int main(){

	int Random[20];	/* 重複なし乱数用配列 */
	int j;			/* カウンタ */

	srand( (unsigned)time(NULL) );	/* 乱数初期化 */

	NoOverlapRand( 0, 9, Random );	/* 0~9までの重複なし乱数をRandomへ */

	for( j=0; j<10; j++ )
		printf( "ランダムな値%dは「%d」を出力!\n", j+1, Random[j] );					

	return 0;
}

/* 0~Num-1までの乱数生成 */
int GetRand( int Num ){
	return rand()%Num;
}


/* 重複なし乱数の生成 */
void NoOverlapRand(int min,int max,int *val){

	int i=0,t,n;

	for(t=min; t<=max; t++){
		val[i]=t;			/* val[i]にtを入れていく。 */
		i++;
	}

	for(n=max-min; n>=0; n--)
		ChangeNumber( &val[ GetRand( n ) ], &val[n] );	/* 配列を一つランダムで指定し、配列一番最後の数と交換 */

}

/* AとBの中身を入れ替える */
void ChangeNumber(int *a, int *b){
	int  r=*a;
		*a=*b;
		*b= r;
}
完璧だと思ったのですが・・・何がいけないのかご指摘お願いします。
C言語は色々なサイトで学びました。それなりには理解しているつもり・・・です。
まぁ理解してないから質問してしまう状況になるんですけどorz

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: C言語実行時のエラーについて

#2

投稿記事 by みけCAT » 14年前

GetRand関数のNumに0を渡した場合、ゼロ除算で強制終了してしまいます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

乱数ちゃん

Re: C言語実行時のエラーについて

#3

投稿記事 by 乱数ちゃん » 14年前

うわぁ・・・恥ずかしい
こんなミスなんかでトピックを建ててしまい申し訳ないですorz

rand()%(Num+1);とすることで解決しました、みけCAT様本当にありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る