乱数

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

乱数

#1

投稿記事 by こまってます » 18年前

1から1000の乱数を1000個発生させ、文字にすることができる数字はいくつあるか、また、もじにできるものは文字に変換しファイルに保存する というもんだいで

int main (void)
{
int i,n;
srand ((unsigned)time(NULL));

printf("1~1000:\n");
for(i=1; i<=1000;i++)

1から1000の乱数を1000個発生させるという部分はこのような感じになるのではないかと予想してみたのですが、後の部分が教科書を見てもまったくわからずこまっています どなたかおねがいします

管理人

Re:乱数

#2

投稿記事 by 管理人 » 18年前

こまってますさん、こんにちは。管理人です。

今回文字にすることが出来る数字はいくつかということですが、
数字はみな、文字に出来ると思います。
そこのとこ、「文字に出来る数字は」という意味がよくわからないのですが、
文字に出来ない数字とはたとえば何ですか?

管理人

Re:乱数

#3

投稿記事 by 管理人 » 18年前

もしかして1~1000の数値は文字コードですか?

box

Re:乱数

#4

投稿記事 by box » 18年前

たぶん、こんなことがしたいのではないかという例です。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>

int main(void)
{
	FILE *fp;
	int i, n;
	
	/* 結果出力用ファイルのオープン */
	fp = fopen("output.txt", "w");
	if (fp == NULL)
		fprintf(stderr, "file open error\n"), exit(1);
	
	/* 乱数の初期化 */
	srand((unsigned int) time(NULL));
	
	for (i = 0; i < 1000; i++)				/* 指定回数分だけ繰り返す */
		if (isprint(n = rand() % 1000 + 1))	/* 1~1000の乱数が表示可能なら */
			fprintf(fp, "%4d %c\n", n, n);	/* ファイルに出力する */
	
	/* ファイルを閉じて終了 */
	fclose(fp);
	return 0;
}

管理人

Re:乱数

#5

投稿記事 by 管理人 » 18年前

int count=0;

を用意して、for文のif文の中でcount++;すれば、変換できる文字のカウントが出来ますね。

管理人

Re:乱数

#6

投稿記事 by 管理人 » 18年前

boxさんのプログラムを実行するとこのようなエラーが・・。

Justy

Re:乱数

#7

投稿記事 by Justy » 18年前

 MSVC7.1のその関数は引数は int型でも値が 255以下でないとそのアサートが出てしまいます。

 もともと文字にできるかどうかの判定は、各環境に依存してしまうので、結構この問題は難しいです。
 文字コードも SJIS/JIS/EUC/Unicodeとそれぞれによっても判定が異なりますし。

管理人

Re:乱数

#8

投稿記事 by 管理人 » 18年前

なるほど。
とりあえず私の環境では、ASCIIを使って
こんな感じで表示は出来ます・・。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main () {
	int i,n,count=0; 
	srand ((unsigned)time(NULL)); 

	for(i=0;i<1000;i++){//1000回ループ
		n=rand()%1000+1;//1~1000の乱数生成
		if(n>=33 && n<=126){//ASCIIの文字範囲なら
			printf("文字コード[%3d] 変換文字[%c]\n",n,(char)n);
			count++;//文字数カウント
		}
	}
	printf("\n%d個\n",count);
	return 0;
}

閉鎖

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