平成24年度 情報工学演習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ファイルを作成し,期日までに提出すること.

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

レポート作成上の注意

レポート提出先

  • 以下の形式で電子メールの提出をお願いします.提出を確認したら簡単な返信をしますので,返信がない場合には受け取っていない可能性が高いので必ず確認してください.また,レポート受付状況のページも合わせて確認しておいてください.

最終レポート提出期限

  • レポートの最終締切
    • 日時
      • 2012年7月31日(火) 18:30まで受付

出欠席表等

演習スケジュール

  • 開講
    • 月 1,2限(17:00-18:30)
    • 火 3,4限(18:40-20:10)
回数演習日内容資料演習課題
15/28(月)ガイダンス 3.1:コマンド・入力・結果を記述すること
26/5(火)基礎文法 4.4:作成したプログラム・実行コマンド・入力・結果・考察を記述すること
36/11(月)条件分岐 2.6.2:作成したプログラム・実行コマンド・入力・結果・考察を記述すること
46/12(火)反復 2.6.2:作成したプログラム・実行コマンド・入力・結果・考察を記述すること.試行回数は10回で.
56/18(月)配列(1) 2.4:作成したプログラム・実行コマンド・入力・結果・考察を記述すること
66/19(火)配列(2)2.6.1:作成したプログラム・実行コマンド・入力・結果・考察を記述すること
76/25(月)ポインタ(1) 3.3:作成したプログラム・実行コマンド・入力・結果・考察を記述すること
86/26(火)ポインタ(2)3.5:作成したプログラム・実行コマンド・入力・結果・考察を記述すること
97/2(月)関数(1) 4.4:作成したプログラム・実行コマンド・入力・結果・考察を記述すること
107/3(火)関数(2)4.5.2:作成したプログラム・実行コマンド・入力・結果・考察を記述すること
117/9(月)構造体 2.6.1:作成したプログラム・実行コマンド・入力・結果・考察を記述すること.
127/10(火)文字列処理 2.4:作成したプログラム・実行コマンド・入力・結果・考察を記述すること
137/17(火)総合演習N本腕バンディットを解くプログラムの作成(ガイダンス資料参考・教員/TAに教えてもらう)
147/23(月)総合演習N本腕バンディットを解くプログラムの作成(ガイダンス資料参考・教員/TAに教えてもらう)
157/24(火)総合演習レポート:作成した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ランダム?1000052161727671872160511369165836612774810.5
TA2011の学生さん9431668522553.5671122715.5107510175759878684583
TA2012の学生さん9439319719873.5582120763111323155365748674097
2134000昨年の学生さん1000071122854706822803110123165249909380902
1003400910000395319879.5397419890109623163985725071888.5
1003401710000396019808.5397419853.5108823153933730671824
1003401910000401622611398322423.5111923163980724577018
100340201000052181724071862160511109165819610574819.5
1003402110000716222986715322902112423165812912886151

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

推奨

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

最終手段

  • ファイルに対して,使用している日本語の種類を強制的にかえる方法.ただし,バックアップをきちんと取っておかないとファイル自体が消えてしまったり使えないものになったりするので推奨はしない&使用する場合は非常に気をつけること
      • sample.tex中の日本語を強制的にEUC-JPに変える
      • コマンドライン(ターミナル)で作業
    • 元となるファイルをバックアップ
      • cp sample.tex sample.tex.bk
    • 日本語の変換
      • nkf --overwrite -e sample.tex
    • emacでsample.texを開いて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までの値を得ることができる。

教員用メモ