Presentation is loading. Please wait.

Presentation is loading. Please wait.

第12章 乱数という業の深い存在 ~ランダムな値・他~

Similar presentations


Presentation on theme: "第12章 乱数という業の深い存在 ~ランダムな値・他~"— Presentation transcript:

1 第12章 乱数という業の深い存在 ~ランダムな値・他~
全然関係ないですけど、僕は昔ポケモンの乱数 調整よくしてました 第12章 ランダムな値

2 前回やったこと 構造体の使い方 型枠の宣言 ↓ 構造体の宣言 初期化・参照 ヘッダーファイルを自作し、展開。プログラム に応用してみた
使いまわし 第12章 ランダムな値

3 今日の予定 ランダムな値 その他便利な事項 マクロ定義 グローバル変数 プロトタイプ宣言 後半は紹介アンド説明だけ 第12章 ランダムな値

4 ランダムな値(1) コンピュータは完全に出鱈目な値ははじき出せ ない。よって一定の法則の下、擬似乱数を作る
rand 関数(擬似乱数をはじき出す関数) 使い方:例) 弱点:何度コンパイルしても同じ値しか使えない #include <stdlib.h> int num = rand() ; コンパイル=プログラミング言語を機械言語に翻訳すること 第12章 ランダムな値

5 ランダムな値(2) srand 関数 time 関数 この2つを駆使して、rand 関数の乱数に変化を つけていく
現在時刻を取得する関数 <time.h> を展開する必要があるよ この2つを駆使して、rand 関数の乱数に変化を つけていく 第12章 ランダムな値

6 ランダムな値(3) 使い方・実行例 srand((unsigned)time(NULL)); これは srand 関数に現在時刻
を渡している。 現在時刻は常に 変わるので、乱 数発生規則も絶 えず変化する srand((unsigned)time(NULL)); #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章 ランダムな値

7 ランダムな値(4) 実行結果例 ちなみに、前頁のコードを
良く見ると、『rand()』の値を『%100』しているので、 出される値は必ず「0~100」の整数になる これを応用し、『%10』とかにすると、「0~10」の ランダムな値が取得できる 第12章 ランダムな値

8 練習問題 おみくじプログラムを作ってみよう おみくじの結果 は、自分で好きに 変えてみると面白 そう なお、⇒のは、
「大大吉」「大吉」「吉」 「中吉」「末吉」「凶」 「大凶」「大大凶」になっている ヒント:rand 関数で取った値の範囲で くじの結果を分岐させるようにしてみる 第12章 ランダムな値

9 練習問題 回答例その1 途中まで omikuji 関数を つくり、そこで結果 の判定を行うように してみた
#include <stdio.h> #include <stdlib.h> #include <time.h> int omikuji(int num) { int result = 0; if(num < 9) result = 0; else if(num < 24) result = 1; else if(num < 46) result = 2; else if(num < 68) result = 3; else if(num < 88) result = 4; else if(num < 98) result = 5; else if(num < 99) result = 6; else result = 7; return result; } 第12章 ランダムな値

10 練習問題 回答例その2 続き。とはいえ、見所少な目 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章 ランダムな値

11 マクロとは(1) マクロ(記号定数) #define NUMBER 10 特定の文字記号に何かの定数を当てること
プログラム中、その記号を用いれば、定義した定数と 同じ扱いができるよ 定義の仕方 注意:『#include』の下に記述すること   マクロ(記号)名は 大文字 を使う #define NUMBER 10 第12章 ランダムな値

12 マクロとは(2) マクロ実践例 #include <stdio.h> #define NUMBER 10 int main(){
マクロの利点は、定数を一括管理することで、バグが 発覚した時などの修正がしやすくなること(是非活用 しよう) #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章 ランダムな値

13 グローバル変数 (⇔ローカル変数) main 関数の外に変数を宣言することで、ソー スファイル全体でその変数を使用できるよ
グローバル変数 (⇔ローカル変数) main 関数の外に変数を宣言することで、ソー スファイル全体でその変数を使用できるよ 右のソースコードでは、 自作関数よりも上で宣言・ 初期化した変数 a を、 hyouji 関数で使っている #include<stdio.h> int a = 2014; void hyouji(){ printf("%d\n", a); } int main(){ hyouji(); return 0; 第12章 ランダムな値

14 プロトタイプ宣言 初めに関数名の宣言だけしておいて、後で詳し い処理を記述すること 例: ⇒ #include<stdio.h>
例: ⇒ 関数の数が増えたとき、 こうして後に細かい処理を 書くことで、今どの関数を 定義しているかを一望できる ようにすると便利 #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章 ランダムな値

15 次回予告 おしまい。 お疲れ様です(感謝) 何か聞きたいことがあったら、気軽にどうぞ スペシャルサンクス 読んでくれたみんな MMC
しらる 君 拳骨 先輩 他多数 第12章 ランダムな値

16 テンプレ テンプレ 第12章 ランダムな値


Download ppt "第12章 乱数という業の深い存在 ~ランダムな値・他~"

Similar presentations


Ads by Google