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

Slides:



Advertisements
Similar presentations
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
Advertisements

第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
第2章 数値の入力と変数 scanfと変数をやります.
基礎プログラミングおよび演習 第9回
基礎プログラミングおよび演習 第8回.
第5回C言語講座 ~ポインタと配列.
第6章 2重ループ&配列 2重ループと配列をやります.
構造体.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
第7回 条件による繰り返し.
第10章 char 文字列; 文字列を入力させるよ!.
C言語講座 第3回 ポインタ、配列.
プログラミング演習 バージョン1 担当教員:綴木 馴.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
プログラミング論 ファイル入出力
東京工科大学 コンピュータサイエンス学部 亀田弘之
FlexとBison+アルファ -実習編-
関数の定義.
第10章 これはかなり大変な事項!! ~ポインタ~
知能情報工学演習I 第12回(後半第6回) 課題の回答
前回の練習問題.
第7回 条件による繰り返し.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
東京工科大学 コンピュータサイエンス学部 亀田弘之
高度プログラミング演習 (05).
高度プログラミング演習 (05).
関数への道.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
疑似乱数, モンテカルロ法によるシミュレーション
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
今まで写経のように書いてきた『void main()』も、これでようやく話ができる!
C言語 はじめに 2016年 吉田研究室.
第4章 反復作業を楽にする方法!! ~繰り返しその1 while~
第1章 いよいよプログラミング!! ~文章の表示 printf~
プログラミング演習I 2003年4月30日(第3回) 木村巌.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
第5回 プログラミングⅡ 第5回
C言語講座 制御(選択) 2006年 計算技術研究会.
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
変数を一度にたくさん宣言するよ! それだけじゃないよ!
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
第2章 printf(“変数と入力”); scanf(“%d”,&num);
標準入出力、変数、演算子、エスケープシーケンス
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
プログラミング演習I 2003年6月11日(第9回) 木村巌.
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第11回(後半第5回) 課題の回答
第12章 ランダム関数.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
C言語講座第5回 2017 構造体.
C言語講座 四則演算  if ,  switch 制御文.
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
第13章 構造体 講習最後だよ!.
Presentation transcript:

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

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

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

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

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

ランダムな値(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章 ランダムな値

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

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

練習問題 回答例その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章 ランダムな値

練習問題 回答例その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章 ランダムな値

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

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

プロトタイプ宣言 初めに関数名の宣言だけしておいて、後で詳し い処理を記述すること 例: ⇒ #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章 ランダムな値

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

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