平成23年度 情報工学演習B(夜間主)

担当者

  • 担当:倉重(V407),松本,三林
  • 担当TA:澁谷(V407)

演習について

  • 演習の場所
    • R106
  • 演習の進め方
    • 詳しくはガイダンス資料を見てください.
    • 演習ですので欠席はしないでください.毎回出欠を取ります.もし,欠席せざるを得ない場合,その理由と関係書類を提出してください.
  • 質問等
    • 演習やレポート課題の内容,プログラミング方法についての疑問は,倉重まで質問に来て下さい.

レポートについて

  • レポートの書き方の説明および雛形として次のtexファイルを用いること.
  • 上記texファイルをダウンロードし,解凍する.
    • tar xvf report_sample.tar
  • 解凍してできたファイルを用いて以下のコマンドでpdfファイルを作成する.作成したpdfファイルを開くことで,レポートの書き方等を書いた資料を読むことができる.
    • platex sample.tex
    • platex sample.tex
      • 二回行うこと
      • エラーなく,sample.dviが作成されていることを確認
    • dvipdfmx sample.dvi
    • evince sample.pdf
  • レポートの作成は,上記ファイルを改変し,作成すること.このとき,同じようにpdfファイルを作成し,期日までに提出すること.

レポート作成時のデータとり

レポート作成上の注意

最終レポート提出期限

  • レポートの最終締切
    • 日時
      • 2011年8月1日(月) 18:30まで受付
    • 提出先
      • V407教室前のレポートボックス

出欠席表等

演習スケジュール

  • 月・水1,2限(17:00--18:30)に開講
回数演習日内容資料演習課題
16/6(月)ガイダンス 3.1:コマンド・入力・結果を記述すること
26/8(水)基礎文法 4.4:作成したプログラム・実行コマンド・入力・結果を記述すること
36/13(月)条件分岐 2.6.2:作成したプログラム・実行コマンド・入力・結果を記述すること
46/15(水)反復 2.6.2:作成したプログラム・実行コマンド・入力・結果を記述すること.試行回数は10回で.
56/20(月)配列(1) 2.4:作成したプログラム・実行コマンド・入力・結果を記述すること
66/22(水)配列(2)2.6.1:作成したプログラム・実行コマンド・入力・結果を記述すること
76/27(月)ポインタ(1) 3.3:作成したプログラム・実行コマンド・入力・結果を記述すること
86/29(水)ポインタ(2)3.5:作成したプログラム・実行コマンド・入力・結果を記述すること
97/4(月)関数(1) 4.4:作成したプログラム・実行コマンド・入力・結果を記述すること
107/6(水)関数(2)4.5.2:作成したプログラム・実行コマンド・入力・結果を記述すること
117/11(月)構造体 2.6.1:作成したプログラム・実行コマンド・入力・結果を記述すること.注意!!配布資料に重大な修正あり.一度,struct.pdfを見てください(修正箇所は教員,TAに聞いてください)
127/13(水)文字列処理 2.4:作成したプログラム・実行コマンド・入力・結果を記述すること
137/20(水)総合演習N本腕バンディットを解くプログラムの作成(ガイダンス資料参考・教員/TAに教えてもらう)
147/25(月)総合演習N本腕バンディットを解くプログラムの作成(ガイダンス資料参考・教員/TAに教えてもらう)
157/27(水)総合演習レポート:作成したplayer.c・どのように作成したか・実行結果を記述
  • 注意
    • どのバンディットをプレイしているか分かるように,コンパイル時のコマンドもレポートに記述しておくこと
      • 例:gcc -o game player.c bandit03.o であるなら,バンディット03を実行してることがわかる

N本腕バンディット

N本腕バンディットとは

本演習で用意するN本腕バンディットの一覧

識別番号ファイル難しさ内容テストプレイ
.hfilebandit.h---ヘッダファイルfileplayer.c
00filebandit00.o腕の数3本のバンディットfilegameplay00
01filebandit01.o☆☆腕の数7本のバンディットfilegameplay01
02filebandit02.o☆☆☆腕の数7本のバンディットfilegameplay02
03filebandit03.o☆☆☆腕の数7本のバンディットfilegameplay03
04filebandit04.o☆☆☆☆腕の数7本のバンディットfilegameplay04
05filebandit05.o☆☆☆☆☆腕の数3本のバンディットfilegameplay05
06filebandit06.o☆☆☆☆☆腕の数3本のバンディットfilegameplay06
07filebandit07.o☆☆☆☆腕の数3本のバンディットfilegameplay07
08filebandit08.o☆☆☆☆☆腕の数5本のバンディットfilegameplay08
  • 注意
    • テストプレイは,該当ファイルをダウンロード後に「chmod +x ファイル名」が必要
      • 例: chmod +x gameplay00

N本腕バンディット・オブジェクトファイルの使用方法

N本腕バンディットプレーヤー創作(総合演習)

  • 全ての演習終了まで関係なし.

N本腕バンディットを解くプレーヤーを作成したときに,他と比較・競うために

スコア(演習の成績とは関係なし)

学生番号氏名000102030405060708Total Max
1000000ランダム?1000052371736271802302211129165836612674746.5
TAの学生さん9421674722700678022789112611575800884284695.0
2033003遠藤 逸平10000267120347.552122288711139155834517873770.5
2134001井川 大地
2134002伊藤 仁
2134003長内 智弥
2134004郷田 ジャン
2134005小林 和彦
2134006櫻澤 昂
2134007佐々木 貴大
2134008四戸 基陽7848443819915537820231111810305647688271915.0
2134009首藤 航
2134010小路 哲司
2134011鈴木 悠平10000264020342.551582287511269155783516773564.0
2134012鈴木 僚10000268520412.571892307011249165822522475592.5
2134013須藤 大樹10000494321866.571422256011239165816521277942.0
2134014高橋 健人
2134015高橋 尚人
2134016谷内 和人
2134017寺川 栄次
2134018中野 啓佑
2134019西村 浩二813926452037551622292011069595818617969578.5
2134021宮崎 輝久
2134022女ケ沢 大亮10000715522905712822971111623155275910186088.0
2134023山本 雄太
2134024米内 寛貴
2134201三坂 裕里枝

日本語が出なくなったときの対応

  • コンピュータで扱える日本語はいくつかあるが,ターミナルはEucという文字しか表示できない.プログラムの中でEuc以外の日本語を使用すると表示されなかったり読めない文字が出てきたりする.その場合,以下の方法でプログラム中の日本語をEucにする.
    • Emacsで以下のコマンドを打つ
      • ctrl-x (Controlキーを押しながらxを打つ)
      • return
      • f
    • すると以下のメッセージ
      • Coding system for saving file (default nil):
    • が出るので,続いて以下の文字を打ってreturnキーを押す
      • euc-jp
    • プログラムを保存して完了

乱数の使い方

  • 乱数の使い方
    • banditの中で簡単に使う方法.ちゃんとした使い方は各自調べた方がよい
  • 0.3の確率で何か(ランダム)をして、0.7の確率で何か(ちゃんと)をする、のような使い方
 double r = (double) rand() / (double)RAND_MAX;
 
 if( r <= 0.3){
   なにか(ランダム)
 }else{
   なにか(ちゃんと)
 }
  • rand()は0からRAND_MAX(と定義されている整数)の間のランダムな数を出力する。なので、
    • rand() / RAND_MAX
  • で、0から1の間のランダムな数となる。よって、これが(上記の例だと)0.3より小さい数である、と考えるのは0.3の確率で生じる、というのと同じことである。
  • 0から4の間の選択しをランダムに選ぶ
 int r = rand() % 5;
 
 switch(r){
 case 0:
   break;
 case 1:
 ...
 }
  • rand() % 5 とやると5で割ったあまりの数(0から4)が得られる。ここで、rand()はランダムな整数なので、ランダムな0から4までの値を得ることができる。