• 締切済み

ランダム関数を作りたい。

COBOLでランダム関数を自作したいのですが、 いろいろWEBで調べましたが、なかなか見つかりません アルゴリズムを教えてください。 ちなみに動作するOSはOS/400です。 Cコンパイラーはありません。

みんなの回答

  • moisabc
  • ベストアンサー率35% (7/20)
回答No.3

以下の手法はどうでしょうか? 01 time-a.  03 hh pic 9(2).  03 mm pic 9(2).  03 ss pic 9(2). 01 tbl.  03 tbl-a pic x(3) occurs 100. accept timeで時間を取得し、time-aにmove その時間をもとにテーブルの添字の値を決定し、 テーブルtbl-a(添字)を乱数とする。 非常に簡単ですが、JOB実行時間によって内容が変化します。 COBOLでは確か乱数関数はなかったと思います。 (私も一度作ろうとして探したが、そんな関数は見つからなかった記憶がある) sysin カードを使えば更に複雑な事ができると思います。

回答No.2

COBOLは知らないですが、乱数のアルゴリズムさえわかればいいで しょうか? 非常に単純な乱数のアルゴリズムとしては、C言語の rand() 関数 で使われている線形合同法があります。 基本的には、next という変数を用意して 1 などに初期化しておき、 rand() 関数が呼ばれるごとに next = next * 1103515245 + 12345 を実行し、乱数の最大値を MAX として next を (MAX+1) で割った 余りを返せば、0~MAXまでの乱数が得られます。定数の値はこれに 限らないと思いますが、一般的には、この式が使われているようで す。 ただし、線形合同法は、下位ビットほど乱数としての性質が悪いの で、余りではなく上位ビットを使うように除算した方がいいです。 つまり、N通りの乱数がほしければ、rand() の結果を N 倍して (MAX+1) で割るなどする方がいいとされています。(単純に rand() を N 倍して、整数の範囲を超えないように注意) さらに質のいい乱数が必要なら、「M系列」をキーワードに検索し てみてください。

  • tullio
  • ベストアンサー率20% (11/53)
回答No.1

それほど良質な乱数が必要なわけでは無いようなので,古典的な線形合同法で良いのではないでしょうか.

関連するQ&A

  • Excel2002 ランダムに並べ替える関数

    Excel2002で掛算九九の100マス計算を作っています。 マクロを使って、ボタンにマクロを登録し、九九の問題を作成したいのです。 1~10の数字をランダムに重複しないように、A1:J1に表示したいです。 A B C D E 1 9 7 8 1 2・・・ 2 2 3 8 4 1 5 4 でA1:J1の1~10の数字ををランダムに並び替えたいのですが、そういった関数はありますか? RANDBETWEEN関数を使ってみたんですが、重複する数字が返ってきてしまいます。 何か良い方法はありますか?

  • long型のランダムな値を返す方法

    C言語について質問させて頂きます。 私は今、0以上50万以下(上限は50万以上ならどんな値でもかまいません)の範囲でランダムに整数を得たいと考えております。 #include <stdlib.h>のint rand(void)は0以上の乱数を返してくれますが、返す値はintの範囲内(?)なので、要望に合っておりません。 そこで、long型のランダムな値を得たいと思っております。 一体、どのような関数またはアルゴリズムを使えば、望むように出来るのでしょうか? 是非、お教えください。

  • ランダム関数の物理的な仕組み

    ハードウェアのところで質問しようと思いましたが、 サーバと書いてあったので、こちらにしました。 プログラミングにはランダム関数というものが、必ず(とは言えないかもしれませんが)あると思います。しかし、この内部構造はどうなっているのでしょうか。 PC内部が電圧で振り分けられて、スイッチがONになったりOFFになったり、もしくは0と1の世界…といった表現で説明されていますが、そういった事は意味は多少わかっているつもりです。 ランダム関数は、数値を適当に返してくるわけですが、この適当なデータをどのように、内部的物理的に発生させているのでしょうか。 ゲームなどでは必需品の仕組みですが…簡単に説明していただけないでしょうか。検索しても物理的なことを説明しているWebページは、案の定見つかりませんでした。 わかる方がいましたら、よろしくお願いします。

  • c言語 random

    c言語でrandom関数を使って乱数を生成してください

  • アセンブラからCの関数を呼び出すには?

    「OS自作入門」を読んで試しています。 フロッピーのブートセクタに自作のブートプログラムを 書き込み、ブートプログラムから自作のOSを呼び出して実行 しています。自作といっても前述の参考書の物まねですが・・・・。 ここまでは全てアセンブラでプログラムを書いてきました。 NASMを使っています。ずっとアセンブラではきついので C言語で書きたいのです。 まずは自作のOSからCで書いた関数を呼び出して実行したいの です。つまり・・・ OS.ASM + TEST.C→OS.BIN としたいのです。OS.ASMは自作のOSです。TEST.CにはCの関数を 書いておき、OS.ASMから呼び出すようにします。 これらをくっつけてOS.BINというファイルにしたいのです。 どうすればいいでしょうか?  (1) ブートプログラムの中で16ビットモードから32ビットモードに 切り替えており、自分でセグメントを決めてあります。TEST.Cも それにあわせる必要があるかと思いますが、どうすれば? (2) OS.ASMとTEST.Cをどうやってくっつけるのかがわからない。 リンカーとか使うのでしょうか?

  • COBOL コンパイラ

    COBOLの無料コンパイラをダウンロードしようと思い、Open COBOLを使用することにしたのですが、MinGWのインストールが上手くできません。 上手くできないというか、どのファイルを選択すれば良いのかわかりません。 また、Open COBOL以外でも、COBOLの無料コンパイラがあれば教えてください。 ちなみに言語初心者です。

  • エクセル関数で任意抽出して、ランダム利用するには?

    Visual Basic の知識が無いので、エクセル関数に限定して教えて欲しいのですが、 (例) (1)ロト6の予想システムを表計算でしたい。使用数字は、1~43 (2)セルB1~C43までの表がある (3)B1~B43には1~43の数字 (4)C1~C43には、独自の予想法により、関数で絞り込んだ数字の隣に◎、候補以外は空白 (5)◎がついた候補数字のみを、ランダムで6個抽出する関数を設定したい フィルタ機能を使って、データ抽出する「マクロボタン」の登録とかでもやってみたのですが、 最後のランダムで抽出する段階で、わからず手詰まりになってしまいます。 良い方法がありましたら、是非教えて下さい。お願いします。

  • C言語 main関数とsum関数の記述順について

    はじめまして。 【苦しんで覚えるC言語】(Web版)でC言語を学んでいる初学者です。 【第1部:C言語基礎編】>【関数の作り方】>【自作関数を作る】の部分(http://9cguide.appspot.com/11-01.html#S2)でつまづいています。 下記のような、1から100までの数字の合計を表示するプログラムが例題として取り上げられています。 しかし、ここが理解できないので、次の【プロトタイプ宣言】に進めずにいます。 例題1  sum関数をmain関数の後に記述した場合(プログラムが実行されない)。 #include <stdio.h> int main(void) { return 0; } int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } 例題2  sum関数をmain関数の先に記述した場合(プログラムが実行される)。 #include <stdio.h> int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } int main(void) { return 0; } 例題1の場合、【まずmain関数を作り、次にsum関数を作りました。この場合、main関数を解析している段階では、sum関数は発見されておらず、従って、main関数の中では、sum関数を使うことは出来なくなってしまいます。】との説明がありますが理解できません。 コンパイラがどのような順番でプログラムを処理しているか理解できていないので分からないのだと思います。 例題1の場合と例題2の場合の両方について、コンパイラがどのような順番でプログラムを処理しているのかを具体的に教えてください。 どうかよろしくお願い致します。

  • ランダムに作られた数値 0~36 の規則性をみたいのですが

    ランダムに作られた数値 0~36 の規則性をみたいのですが エクセルで入力してあります 数値 文字がありまあす C列に 順に数値 D列に 文字 S M G  以上がランダムにあります その規則性をみたいのですが エクセルの関数または 違うソフトで 可能でしょか?

  • コンピューターは指数関数をどのように解いている?

    昔、CPUが行う計算について習ったとき、確か、足し算しかできなかった記憶があります(間違っていたらすみません)。 指数関数EXP(x)などの複雑な(?)数式を計算するとき、CPUはどのように計算しているのですか。 予想では、近似値を求めるアルゴリズムを利用して、CPUが計算できるような形式に変更してるとイメージを持っています(正しい?)。 指数関数の解法にはどのようなアルゴリズムを使っているのですか? アルゴリズムはOS~アプリソフトの中でどの階層(部分)にあるものなのですか? ハード・ソフトの違いや、世代によってもやり方はことなるのかもしれませんが、教えてください。 一般のWindows OFFICE EXELあたりではどうなのでしょうか。 数学関数には、それぞれに、解法アルゴリズムが作られ利用されているのですか 例えば、双曲線関数はなどうなのでしょうか