課題で「100個の乱数を発生させファイルに保存し、そのファイルを読み込み、昇順に並べ替えするプログラムを作れ」という課題がありました。
乱数を発生させるのと、昇順に並び替える方法はわかるのですが、二つをうまく組み合わせる方法がわかりません。
ポインタを使ってファイルの入出力をするプログラムを教えてくださる方がいたら連絡ください。
出来れば模範のプログラムを掲示していただけるとうれしいです。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>ポインタを使ってファイルの入出力をするプログラム



ポインタの意味が良くわかりません。ヒントになるような部分を書きますので、参考にしてください。

#define FILENAME "sample.txt"
#define ARRAYSIZE 100

int RandomNumber[ARRAYSIZE];

void WriteToFile()
{
FILE *fp;
int i;
fp = fopen(FILENAME, "w");
for (i = 0; i < ARRAYSIZE; i++) {
fprintf(fp, "%d\n", RandomNumber[i]);
}
fclose(fp);
}

void ReadFromFile()
{
FILE *fp;
int i;
fp = fopen(FILENAME, "r");
for (i = 0; i < ARRAYSIZE; i++) {
fscanf(fp, "%d", &RandomNumber[i]);
}
fclose(fp);
}
    • good
    • 0

「組み合わせる」必要というのは、あまりないんじゃないでしょうか。



char *getFileName();
void generateRandomNumber(char *fileName);
void sortFile(char *fileName);
int main()
{
 char *fileName;
 fileName = getFileName();
 generateRandomNumber(fileName);
 sortFile(fileName);
 return 0;
}

みたいな感じにすれば、各サブルーチンの内容は全く他とは関係なしに
できると思いますけど。
    • good
    • 0
この回答へのお礼

参考になりました。
ありがとうございました。

お礼日時:2001/10/13 20:32

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q正規乱数とは

学校の宿題ですがまず正規乱数の発生は2つの方法があるというのですが、意味がわかりません。
正規乱数でなんですか。
なぜ12個足して6をひくのですか。
また逆関数法の=NORMSINV(RAND())てどういう意味ですか。
正規乱数の発生
1
一様乱数を12個足して6を引く方法
=RAND()+RAND()+・・・・+RAND() - 612個分
2
逆関数法
=NORMSINV(RAND())

Aベストアンサー

正規乱数とは、正規分布に従う母集団からランダムに取り出された
数値の集合のことです。
Uを(0,1)上の一様分布に従う確率変数、Fを正規分布の分布関数とし
て、X=F^(-1)(U)(UのFの逆関数による確率変数)とすると、
P(X≦x)=P(F^(-1)(U)≦x)=P(U≦F(x))=F(x)
となって、Xの分布関数はFになり、Xは正規分布に従う確率変数と
なります。
これが、2の逆関数法です。
NORMSINVがFに相当し、RAND()がUに相当します。
1は私も意味が分かりません。

Q乱数を発生させるプログラムを教えてください。

タイトルのままなのですが、1から100までの乱数を発生させるプログラムを知りたいです。

乱数をxとおくと、xの値は、0<x<1の範囲内でお願いします。

C言語で、rand関数を用いて、どうかお願いします。

Aベストアンサー

/* 0<x<1の乱数を100個作る */
#include <stdio.h>
#include <stdlib.h>
#include <sys/timeb.h>

void main(void){
int i;
double r;
struct timeb tm;

ftime(&tm);
srand(tm.millitm);
for(i=0;i<100;i++){
r=(double)rand()/RAND_MAX;
if(r==0.0 || r==1.0){
i--;
continue;
}
printf("%f\n",r);
}
}

Q乱数について

こんばんは。
何度も申し訳ありませんが、今回は乱数について教えてください。
LinuxでCを勉強しているんですが、
randで乱数を発生させることはできたんですが、
そのプログラムを何度実行させても
出てきた乱数は同じ値なんです。
プログラム内で例えば10こ乱数を発生させたとすると
違うものが出ます。
しかし、もう一度そのプログラムをはしらせると
前回と全く同じ並びで同じ数が出るのはどうしてでしょうか?
言ってる意味わかっていただけましたでしょうか?
宜しくお願いします。

Aベストアンサー

乱数は計算によって、擬似的に求めています。
そのため同じ乱数が順番に出てきます。
乱数を初期化することで、順番の途中から使うことができます。
srand()がその関数です。
一般的にはプログラムが起動された時間を利用し、
乱数を初期化することが行なわれます。
コンパイラによって違うかもしれませんが、
たいてい、こんな感じで初期化します。

srand(time());

他にも方法はあります。
たとえば、人が入力するまでの時間は規則性がないので、
このとき、乱数の空回しをしてやることで、
乱数の周期性をなくすことができます。
while(1)
{
 rand(); ←乱数の空回し
 入力待ち;
 if(入力あり) break;
}

Qファイルの入出力プログラムについて

こんにちは。

以下のようなプログラムは作れますでしょうか?

名前  住所  生年月日 性別
1 ○○○ △△△ ××× □□□
2 ○○○ △△△ ××× □□□
3 ○○○ △△△ ××× □□□

上記の名前などは、気にしないでください。
プログラムを一回実行したら、1行目に実行結果が書き込みされ、2回目実行しましたら、一行目に書き込みした内容は削除されずに、2行目に記述されるというふうに、これを100回実行し100回分のデータ(100行)を出力させます。

もし、よろしければソースも教えていただけたらと思います。

よろしくお願いします。

Aベストアンサー

#1補>
ファイルが存在するかどうか調べて、存在しない場合は、タイトル行を出力するというようにすればいいと思います。

Q乱数の数学的な定義はありますか?

数学の背景がないので、質問が変かも知れませんが、よろしくお願いします。

「乱数」には、数学的な定義がありますか?
例えば、「いかなる視点からも規則性のない数の並び」とか、「偶然にまかせた数の並び」とか言えるのでしょうか?

また、ある数列を与えられたときに、それが、「乱数」かどうかを調べる方法はあるのでしょうか?

というのは、たまたま、1が100個ならんだ数列でも、必ずしも「乱数」ではないと言えないような気がするのです。もし、偶然に任せるという意味で乱数を考えるとすると、たまたま、1が100個並ぶことも有り得るし、それを意識的に排除すると、むしろ、自然な「乱数」ではなくなってしまうような気がして、よくわからなくなってしまいました。

Aベストアンサー

まず,数字の出現頻度もある1つの確率分布にしたがっていることが第一の条件です。
つまり,1から100の間の整数の100万個の一様乱数と言った場合には,1の出現頻度がほぼ1万個,2も同じく1万個・・・100も同じく一万個であることです。
次に,どの数字も他の数字と関係がないことが必要です。これははっきり言うのが難しいのですが,たとえば直前の数字とその数字の間の相関が無い(つまり1あとはいつも2だったりしないこと)。先の例だと
1の後の数字を調べても1から100までの数字が同じ頻度で並んでいるような数字のことです。
ご指摘のように,1が100個ならんだ数が乱数であるか無いかは母数いくつの集団について考えているかによります。100個の集団について考えてみると明らかに上記の2条件を満たしませんから,乱数とはいえません。
しかし,10の百乗くらいの数の母集団であれば,ある一箇所に1が100個続いても乱数といえるかもしれません。
乱数検定というのがあって,上記の2つの条件を調べるのもひとつです。
ほかにもいろいろな検定方法があり,乱数は暗号技術と密接な関係があるために,現在でもいろいろ研究されています。興味があれば,「乱数検定」で検索するとたくさん出てきます。

まず,数字の出現頻度もある1つの確率分布にしたがっていることが第一の条件です。
つまり,1から100の間の整数の100万個の一様乱数と言った場合には,1の出現頻度がほぼ1万個,2も同じく1万個・・・100も同じく一万個であることです。
次に,どの数字も他の数字と関係がないことが必要です。これははっきり言うのが難しいのですが,たとえば直前の数字とその数字の間の相関が無い(つまり1あとはいつも2だったりしないこと)。先の例だと
1の後の数字を調べても1から100までの数字が同じ頻度で並...続きを読む

Q乱数発生の関数。

確率分布関数が次の表で与えられているとき,この分布に従う乱数を線形補間を使った逆変換によって生成する関数をどうやって作成したらいいか、全くわかりません。線形補間はなんとなくわかるんですが…。どなたか教えてください。

x F(x)
0 0.0024788
1 0.0173513
2 0.0619688
3 0.1512039
4 0.2850565
5 0.4456796
6 0.6063028
7 0.7439798
8 0.8472375
9 0.9160760
10 0.9573791
11 0.9799080
12 0.9911725
13 0.9963715
14 0.9985996
15 0.9994909
16 0.9998251
17 0.9999431
18 0.9999824
19 0.9999948
20 0.9999985
21 0.9999996
22 0.9999999
23 1.0000000

確率分布関数が次の表で与えられているとき,この分布に従う乱数を線形補間を使った逆変換によって生成する関数をどうやって作成したらいいか、全くわかりません。線形補間はなんとなくわかるんですが…。どなたか教えてください。

x F(x)
0 0.0024788
1 0.0173513
2 0.0619688
3 0.1512039
4 0.2850565
5 0.4456796
6 0.6063028
7 0.7439798
8 0.8472375
9 0.9160760
10 0.9573791
11 0.9799080
12 0.9911725
13 0.9963715
14 0.9985996
15 0.9994909
16 0...続きを読む

Aベストアンサー

番号確立 確立(累積)
000.0024788 0.0024788
010.0173513 0.0198301
020.0619688 0.0817989
030.1512039 0.2330028
040.2850565 0.5180593
050.4456796 0.9637389
060.6063028 1.5700417
070.7439798 2.3140215
080.8472375 3.1612590
090.9160760 4.0773350
100.9573791 5.0347141
110.9799080 6.0146221
120.9911725 7.0057946
130.9963715 8.0021661
140.9985996 9.0007657
150.9994909 10.0002566
160.9998251 11.0000817
170.9999431 12.0000248
180.9999824 13.0000072
190.9999948 14.0000020
200.9999985 15.0000005
210.9999996 16.0000001
220.9999999 17.0000000
231.0000000 18.0000000

確立の累積を出す。
例えば6の「確立(累積)」は0~6の確立をすべて加算したもの。
あとは、0~18の乱数(小数点付)を発生させ、その値が「確立(累積)」のどの番号の値に近いかを見ればOK。
たぶん。

番号確立 確立(累積)
000.0024788 0.0024788
010.0173513 0.0198301
020.0619688 0.0817989
030.1512039 0.2330028
040.2850565 0.5180593
050.4456796 0.9637389
060.6063028 1.5700417
070.7439798 2.3140215
080.8472375 3.1612590
090.9160760 4.0773350
100.9573791 5.0347141
110.9799080 6.0146221
120.9911725 7.0057946
130.9963715 8.0021661
140.9985996 9.0007657
150.9994909 10.0002566
160.9998251 11.0000817
170.9999431 12.0000248
180.999982...続きを読む

QC++の乱数に関して

C++の乱数に関する質問です。


最初に1~100の乱数を1ことり、
二番目に、最初に得られた値以外の1~100の乱数を1ことり、
三番目に、最初と二番目に得られた値以外の1~100の乱数を1ことり、
・・・・・・・
100番目に最後に残った乱数で選ばれていない値は1個となるので
1番目から99番目で得られた乱数を見れば、
100番目の乱数が予想できる。

この様な乱数はどの様にすれば得られるでしょうか。

Aベストアンサー

やり方はいくつかありますが

一番シンプルなのは
最初に1~100の乱数を1ことり、配列に格納
二番目に、1~100の乱数を1ことり、
 それが既に配列にあればもう一度取得しなおす
 配列になければ配列に格納
三番目に、1~100の乱数を1ことり
 それが既に配列にあればもう一度取得しなおす
 配列になければ配列に格納

他には

最初に1~100の数値を入れた配列を準備
取得するごとに消していく

他には

最初に1~100の乱数を1ことる
二番目に、1~99の乱数を1ことるが、最初にとったものより大きい場合は+1
三番目に、1~98の乱数を1ことるが、すでに取っているものと比べて1つより大きければ+1、2つより大きければ+2

Qファイルの入出力プログラムについて

san.txtに(I can do it )と書いて以下のプログラムを実行したらメ噫|リ メ噫|リ メ噫|リ メ噫|リ メ噫|リ メ噫|
とバグってしまいました。なぜですか?
#include <stdio.h>
#include <stdlib.h>

main () {
FILE *outfp;char str[256];
   if (( outfp = fopen("san.txt", "w"))       ==NULL) {
printf("ファイルオープンエラー\n");
exit(1);
}
while(fputs(str, outfp)){
printf("%s", str);
}
fclose(outfp);
return 0;
}

Aベストアンサー

商品管理のプログラムということは、
データを追記していくプログラムを作りたいのですか?

その場合でしたら、"w"を"a"にして追加書き込みできます。

書き込みの際は
 sprintf( str, "I can do it\n" );
という様にstrに文字列を代入してから
 fputs( str, outfp )
でsan.txtに書き込むことができます。

なにぶん、そちらの疑問点が把握できませんでしたので
予想で書いていますが、これでよろしいでしょうか^_^;

Qポケモン 乱数調整

ポケモンの乱数調整をやり始めようかな、なんて思ってます。 僕はLightユーザーで友人が言うには乱数調整はやりやすいそうです。しかしやり方が載ったサイトを見るととてもややこしそうで「こんなん俺にできるんか??」と少し不安になっています。

僕はそこまでパソコンに詳しくなく、どちらかというと不器用です。

こんな僕でも出来るでしょうか?
具体的には孵化乱数と、野生乱数、出来れば色乱数もやってみたいです!

Aベストアンサー

・パソコンに詳しくないことと乱数調整はほとんど関係ありません。お持ちのパソコンがツールに対応していない、などではない限り。

・ご友人はBWを前提に仰ってると思います。BWなら確かに比較的やさしいと思います。
ただ、ややこしそうだとお思いなのもわかります。でもBWならサイトを見ながら一つ一つ確実にやっていけばできると思います。
BW2も同じようなものですが、こちらはタイマーずれがひどいので最初はBWのほうがいいかと。

・いきなり孵化乱数や野生乱数ではなく、まずは固定シンボル乱数や配達員乱数からのほうがとっつきやすいでしょう。
全く初めてなら固定シンボルの乱数調整ができるようになってからがいいと思います。

・ハードは何でしょう。乱数調整する場合できれば初代DSかDSLiteがいいのです。ライト(Light)ユーザーとお書きですが、ハードの意味ではなく、ポケモン廃人ではないよの意味に受け取ったのですが。

・色乱数は裏IDが判明しなければできません。



ご友人が乱数調整なさっておられるのでしたらある程度は教われるのではないでしょうか?

Q正規乱数の発生法(Inversion法)について

正規乱数についてですが、様々な発生方法があるかと思います。

私は、Box-Muller法と中心極限定理の二つの方法しか知らないのですが、
いろいろ調べるとInversion法というのがもっとも精度がいい?との意見もあるようでした。

どのようなものなのか本やネットで、結構探したのですが見つけられませんでした。

もしどなたかご存知でしたら、
理論面(数学)の参考文献(本または論文)またはHPと
実際のプログラミング(C++またはVB)が載っている参考文献またはHPを教えていただけないでしょうか?

Aベストアンサー

Knuth の『The art of computer programming』にも簡単な説明がありますが、http://cg.scs.carleton.ca/~luc/rnbookindex.html の第2章(http://cg.scs.carleton.ca/~luc/chapter_two.pdf)に、より詳しい説明があるようです。

直接関係ないですが、boost にも乱数生成ルーチンがいろいろそろっているので、ご覧になってみてはいかがでしょうか。

http://www.boost.org/libs/random/index.html


人気Q&Aランキング

おすすめ情報