ランダムな値

Download Report

Transcript ランダムな値

全然関係ないですけど、僕は昔ポケモンの乱数
調整よくしてました
第12章 ランダムな値
1

構造体の使い方
型枠の宣言
↓
構造体の宣言
↓
初期化・参照

使いまわし
ヘッダーファイルを自作し、展開。プログラム
に応用してみた
第12章 ランダムな値
2

ランダムな値

その他便利な事項
マクロ定義
グローバル変数
プロトタイプ宣言
後半は紹介アンド説明だけ
第12章 ランダムな値
3


コンピュータは完全に出鱈目な値ははじき出せ
ない。よって一定の法則の下、擬似乱数を作る
rand 関数(擬似乱数をはじき出す関数)
使い方:例)
#include <stdlib.h>
int num = rand() ;
弱点:何度コンパイルしても同じ値しか使えない
コンパイル=プログラミング言語を機械言語に翻訳すること
第12章 ランダムな値
4

srand 関数
rand 関数の生む値の発生規則を変化させる関数

time 関数
現在時刻を取得する関数
<time.h> を展開する必要があるよ

この2つを駆使して、rand 関数の乱数に変化を
つけていく
第12章 ランダムな値
5

使い方・実行例
srand((unsigned)time(NULL));
これは srand
関数に現在時刻
を渡している。
現在時刻は常に
変わるので、乱
数発生規則も絶
えず変化する
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int num = 0;
srand((unsigned)time(NULL));
num = rand() % 100;
printf("%d\n",num);
return 0;
}
第12章 ランダムな値
6

実行結果例
ちなみに、前頁のコードを
良く見ると、『rand()』の値を『%100』しているので、
出される値は必ず「0~100」の整数になる
これを応用し、『%10』とかにすると、「0~10」の
ランダムな値が取得できる
第12章 ランダムな値
7

おみくじプログラムを作ってみよう
おみくじの結果
は、自分で好きに
変えてみると面白
そう
なお、⇒のは、
「大大吉」「大吉」「吉」
「中吉」「末吉」「凶」
「大凶」「大大凶」になっている
ヒント:rand 関数で取った値の範囲で
くじの結果を分岐させるようにしてみる
第12章 ランダムな値
8

#include <stdio.h>
#include <stdlib.h>
omikuji 関数を
#include <time.h>
つくり、そこで結果 int omikuji(int num)
の判定を行うように {
int result = 0;
してみた
if(num < 9) result
else if(num < 24)
else if(num < 46)
else if(num < 68)
else if(num < 88)
else if(num < 98)
else if(num < 99)
else
result = 7;
return result;
}
途中まで
第12章 ランダムな値
= 0;
result
result
result
result
result
result
=
=
=
=
=
=
1;
2;
3;
4;
5;
6;
9

続き。とはいえ、見所少な目
int main(){
int num = 0; int a;
srand((unsigned)time(NULL));
num = rand() % 100;
a = omikuji(num);
if(a == 0)
printf("結果は大吉でした\n");
else if(a == 1)
printf("結果は吉でした\n");
else if(a == 2)
printf("結果は中吉でした\n");
else if(a == 3)
printf("結果は末吉でした\n");
else if(a == 4)
printf("結果は凶でした\n");
else if(a == 5)
printf("結果は大凶でした\n");
else if(a == 6)
printf("結果は大大吉でした\n");
else
printf("結果は大大凶でした\n");
return 0;
}
第12章 ランダムな値
10

マクロ(記号定数)
特定の文字記号に何かの定数を当てること
プログラム中、その記号を用いれば、定義した定数と
同じ扱いができるよ
定義の仕方
#define NUMBER
10
注意:『#include』の下に記述すること
マクロ(記号)名は 大文字 を使う
第12章 ランダムな値
11

マクロ実践例
#include <stdio.h>
#define NUMBER 10
int main(){
char mes[1024] = “Hello”
for(int i=0; i < NUMBER; i++)
printf(“%s\n”,mem);
return 0;
}
マクロの利点は、定数を一括管理することで、バグが
発覚した時などの修正がしやすくなること(是非活用
しよう)
第12章 ランダムな値
12

main 関数の外に変数を宣言することで、ソー
スファイル全体でその変数を使用できるよ
#include<stdio.h>
右のソースコードでは、 int a = 2014;
自作関数よりも上で宣言・ void hyouji(){
printf("%d\n", a);
初期化した変数 a を、
}
hyouji 関数で使っている
int main(){
hyouji();
return 0;
}
第12章 ランダムな値
13

初めに関数名の宣言だけしておいて、後で詳し
い処理を記述すること
#include<stdio.h>
例: ⇒
#define NUMBER 777
void hyouji(int a);
int main(){
hyouji(NUMBER);
関数の数が増えたとき、
return 0;
こうして後に細かい処理を
}
書くことで、今どの関数を
void hyouji(int a){
定義しているかを一望できる
printf("%d\n", a);
ようにすると便利
}
第12章 ランダムな値
14

おしまい。

お疲れ様です(感謝)

何か聞きたいことがあったら、気軽にどうぞ
スペシャルサンクス
読んでくれたみんな
しらる 君
MMC
拳骨 先輩
他多数
第12章 ランダムな値
15

テンプレ
第12章 ランダムな値
16