乱数発生する
規則性のない数字列のこと。コンピュータではアルゴリズムを用いて発生させるので正式には疑似乱数といいます。ゲームの中、例えばパチンコだったりで当たり数を決めたりするのに使います。ロボットでは手当たり次第に何かをさせたいときに使います。遺伝的アルゴリズム(GA)においても使用します。
ここでもベースプログラムを基本とします。
まずヘッダーラインにstdlib.hをインクルードしてください
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "NolibM.h" #include <stdlib.h> #include <stdio.h>
乱数発生サンプルプログラム
void main(void) { unsigned char msg1[20],msg2[20]; initNolibM(); //初期化 lcd_CLR(); lcd_HOME();//カーソルをホームへ sprintf((char *)msg2,"Turn off sw1"); sprintf((char *)msg1,"Num Generator"); lcd_PUTS(msg1); lcd_LF(); lcd_PUTS(msg2); while(sw1(ON)); //sw1がONだったらプログラムが一時停止 if(sw2(ON))srand((unsigned int)ReadCpuTimer1Counter());//乱数の元をtimer1の現在のカウント値から生成 lcd_HOME();//カーソルをホームへ sprintf((char *)msg1,"%2d %2d %2d %2d %2d",rand()%10,rand()%10,rand()%10,rand()%10,rand()%10); //0-9までの乱数を発生、表示 sprintf((char *)msg2,"%2d %2d %2d %2d %2d",rand()%10,rand()%10,rand()%10,rand()%10,rand()%10); lcd_PUTS(msg1); lcd_LF(); lcd_PUTS(msg2); }
サンプルプログラムの使い方
乱数の発生を体感しよう!
sw1,sw2を使います。
1. sw1,sw2両方ともONの状態でプログラムをスタートします。
2. LCD画面には「Num Generator Turn off sw1」と表示されます。
3. 次にsw1をOFFにします。その瞬間LCD画面が切り替わり、その時に発生した乱数を表示させます。
4. sw1をOFFにしてリセットボタンを押して2に戻ります。
毎回違う数字羅列が表示されるはずです。
srand()の効果
1. sw1はON, sw2をOFFの状態でプログラムをスタートさせます。
2. 上記2,3,4の作業を同様に行います。何度リセットしても同じ数字の羅列が表示されるはずです。
srand()の関数を使わないといつも同じ乱数列が発生します。srand()が乱数の元になっていることがわかります。
乱数をうまく使えば、気まぐれな生き物みたいなロボットが制作できるかもしれません!!(普通に作っても気まぐれなロボットが多いですけども・・・・・)