第01回 講義資料 - 長井研究室

何を学ぶのか?
応用プログラミング 第1回
∼イントロダクション∼
コンピュータを 使う とはどういうことか? 何ができるか?
一般の人
ソフトによります (ソフトにない機能は実現できません)
みなさん
頭で想像できることは何でも(やらせることが)できます
電気通信大学電子工学専攻
Intelligent Electronic Systems Group
長井 隆行
何を学ぶのか?
Q ない機能を実現させるにはどうしたらいいですか?
A プログラムを書きます
Q プログラムを書くにはどうしたらいいですか?
A プログラム(言葉)をおぼえましょう
Q どの言葉を学んだらいいですか?
A C/C++あたりが最も普及しています
なのでC/C++あたりを学びましょう
またMATLABという言語も便利なのでやる予定です
(注)もちろんチューリングマシンの限界はこえ
られないし、 できる の程度問題もある。
人手不足らしい・・・
† 組み込みソフトのバグが問題
† エンジンは止まるし、テレビの電源
は切れないし・・・
えらいこっちゃ
とにかくシステムが複雑になっている
プログラマの技量が落ちている
(と言われている)
見つからぬバグ
「単行本400冊から誤りを見つける」
に等しい大変さ
授業の進め方
講義: 毎週ここでします
演習課題: 隔週ぐらいのペースで出します
課題レポート: メールで送ってください
期末試験: 行います
成績: 演習等(40%) + 期末試験(60%)
授業に関する情報
ホームページを見て下さい
http://apple.ee.uec.ac.jp/PROG
*講義の情報
*講義資料の掲載
*課題の掲載
*解答例の掲載
などなど
質問はメールでも受け付けます
[email protected]
できる限りはやくお答えします
(注:質問はなるべく具体的に書いてください)
予定
変わる可能性大ですが、こんな予定です
第1回:イントロダクション (今日)
第2回:変数型
第3回:制御構造
第4回:関数
第5回:配列
第6回:ポインタ
第7回:構造体
第8回:デバッグ手法
第9回:中間試験(プログラム課題)とその解説を行う
第10回:データ構造とアルゴリズム
第11回:C言語の応用(画像処理基礎)
第12回:C言語の応用(画像処理実践)
第13回:MATLAB基礎
第14回:MATLAB応用
第15回:期末試験とその解説
今日の話題
ソフトウェアとは?
コンピュータ(システム)=ハード+ソフト(+ネットワーク)
どうやってユーザプログラムを作るか?という話が延々と続く・・・
プログラムはどう実行されるか?
プログラムを作るための道具
プログラムは(OSを介して)ハードを操る
† プログラミング言語 (言葉)
† 開発環境 (紙と鉛筆と辞書と・・・)
„ コンパイラ
gcc
„ エディタ
mule (emacs)
„ デバッガ
gdb (xxdbg)
† ところ変われば環境も変わる (IDE)
•各モジュールがバスを介して通信
•プログラムを実行するとまずHDからメモリ
に読み込む
•メモリの管理はOSが行う
•プログラム自体もデータ
Borland C++コンパイラを使う
† Borland C++ Compiler5.5を使う
† 無償版のダウンロード
(Borland C++Compiler/Turbo Debugger)
http://www.codegear.com/jp/downloads/free/cppbuilder
† インストール
„ インストール後に設定が必要
„ setbccというフリーソフトを使うと設定が楽
„ ベクター ( http://www.vector.co.jp/ )に
あります
まずはプログラムを作る(コンパイルして実行する)ことのできる環境を整えることが重要!
„ Windows visual studio など
„ Mac codeWarriorなど
† Windows上でgccを使うこともできます
„ cygwin http://cygwin.com/
(他にも日本語のページがたくさんある)
統合環境(IDE)を使う
† フリーの統合環境(IDE)
„ ファイルの管理、デバッグなどがGUIでできて便利
„ BCC Developerをダウンロード
http://www.hi-ho.ne.jp/jun_miura/bccdev.htm
„ Turbo Debbuger 5.5
コンパイラと一緒にダウンロードされている
† それぞれインストール
このような開発環境ができる
VisualC++ 2008 Express Edition を使う
† VisualC++ 2008 Express Edition (タダ!)
http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx
実際どんなことができるの?
研究室でC/C++によって実装した例
† 読書支援システム(インテリジェントブックマーク)
„ 読書を助けるウェアラブルセンサ
DL&install
† 音声分離
„ 複数の人の声を分離する
† 認知的なロボット(cognitive machine)の研究
„ 理解の仕組みをロボットで実現する
Visual C++はここ
同じページにインストールの仕方が書かれています
どんな手順で作るか?(ロボットの例)
ソフトウェアの開発過程 (ライフサイクル)
1.まずやりたいこと
ロボットの脳を作るぞ!
理論の問題(脳のアルゴリズムってどんな?)
2.プログラムの設計
モジュールに分割(モーターの制御、画像の入出力、画像処理、音声処理)
どのような仕様にするかを決定(データ構造や各モジュールの動作、タイミング)
3.プログラムの作成
よいプログラムを書こう!
よいプログラムとは?
1. 正しい
2. 理解しやすい
3. 変更しやすい
4. 効率がよい(ここではあまり考えない)
5. その他
モジュールごとにC++で記述、徐々に組み合わせる
テストも並行して行う
4.テスト
全体としてのテスト(デバッグ)、実際の使用に耐えられるか?
5.運用・保守
100%バグのないプログラムを作るのは難しい
運用の過程で見つかった場合、修正する必要がある
注)正しそうな結果を出すけど実は間違っているプログラムを作ってし
まうと(意外と多い)、はまることがある
•あまり考えずに勢いでプログラムした場合に多い
•ステップごとに確認しながら作る
よいプログラムを書こう!
コーディングの標準
1. 実際に書く前によーく考える (紙と鉛筆を使う)
2. コンピュータの立場になってみる
3. 他人に見られることを意識する
† 絶対にこうしなければいけないという約束はない
† 複数の人で、大きなプログラムを作るときに約束を決める
† 命名規則など
„ 変数の命名
„ コメント
„ 字下げ(インデント)を絶対に使う
書き方の例
・ファイル ヘッダーを付ける
・インデントは的確に
・インデントは 4 文字分(TABキーを使う)
・改行やスペースの入れ方に統一感があるように.
//////////////////////////////////////////////////////////////////////////////
// 内容
ファイルの説明
// 作成・修正 2001/12/01 氏名
// 修正
2002/07/01 氏名 修正内容
// 著作権 会社名 2001-2002
//////////////////////////////////////////////////////////////////////////////
#include <iostream>
// クラスの説明
class Stack
{
public:
// 要素の追加
void push(Object item) {
if (itemCapacity <= itemCount) {
//処理内容
} else {
//処理内容
}
}
};
http://www.shos.info/develop/xp/cplusstd.html