プログラミング演習 土曜日(Q組) システムデザイン工学科 配布資料 1. テキスト 部数に余裕がないため、絶対に紛失しないこと • • 基本的に講義スライドのコピーは配布しない。 講義時にはkeio.jpにも掲載するので、参照しながら 受講すると良い。 テキストの訂正などの補足事項も、随時keio.jpに 掲載していく予定です。 2 授業の進め方 • 前半は、C++言語の基礎 – 1時限目は主に講義、2時限目は主に演習 – 毎週、演習問題を出題する。 • 演習時間中に演習し、不足ならITCや自宅で自習すること • レポートは次週の講義最初に提出すること • プログラムリストのプリントアウトを添付すること • 工夫した点、苦労した点などを考察として記すこと • 後半はC++言語の応用で、演習が主体 – コンピュータシミュレーション(2週) • レポート提出は1回のみ – 入出力装置の活用 未定(3週) • 課題毎に動作デモを行って認印を受けた後、 認印を表紙に付した最終レポートを提出 • 言語習得には演習量が大切なので、講義時間以外にも ITCや自宅で自習を行うこと 3 MSDNAA (マクロソフト・アカデミック・アライアンス) • 必要情報、 – 名前:漢字と、ひらがな読みと、ローマ字、学籍番号 • アカウントは、 – 学籍番号がIDになります。 – パスワードは、ID+ローマ字の名字をたした文字列になります。 • メールの仕方 – 題目(Subject) MSDNAA – 本文(半角スペースを利用) • 慶應 太郎 • けいおう たろう • KEIOU TAROU • 86XXXXX – 宛先:[email protected] • 2年の情報処理システムの授業でアカウントをもらった人は 同じですので必要ありません。 4 本日の目標 1. プログラミングとは何かを理解する 2. 製図室のPCを用いて、与えられたサンプルプログラムを 入力し、コンパイルし、実行するという一連のプログラミン グ作業を習得する 3. C言語、C++言語のごく基本的な文法を知る • テキストでは第3章まで 5 プログラミングとは?(1.1-1.3節) • コンピュータは、命令されなければ何もしないし、 理解・実行できる命令数は有限である。 • しかし人間は万能機械を期待する。 • 人間がコンピュータに実行して欲しい処理手順を、 コンピュータの命令の順序付きの組み合わせとして 与えてやればよい。 – これをプログラムと言う。 • プログラムの設計作業をプログラミングと言う。 • 設計したものを言語で表わす作業をコーディングという。 • ある問題を解く処理手順は一意ではないから、 プログラムも一意にはならない。 6 続・プログラミングとは?(1.1-1.3節) • コンピュータが理解・実行できる命令(機械語)は、 人間にとって扱いづらい • 翻訳プログラム(コンパイラ)を用いて、人間の扱いやすい 言語から機械語へ自動翻訳する方法が開発された • 様々なプログラミング言語が誕生した – Fortran, COBOL, Ada, C, C++, Java, Python ... – 残念ながら、すべて人工的な言語である • C言語は以下の特徴があり、SDにとって魅力的である – 手続き型言語で、処理速度が高速である – ハードウェアの制御に適し、組み込みシステムにも使える – 高性能コンピュータ上での大規模計算にも使える 7 C言語の歴史(1.1節) • 1972年、B.W.KernighanとD.M.Ritchieが開発 • 1978年、最初の教科書が出版 (K&R C) • 1988年、ANSI標準化され、改訂版が出版 (ANSI C) – 主な変更点は、プロトタイプ宣言の追加 • 1998年、ISO規格化された (C99) – 主な変更点は、変数宣言位置の拡張と可変長配列の追加 • 時代と共に言語の仕様が変わり、それとともに 翻訳プログラム(コンパイラ)もバージョンアップしている • 古い教科書を参照すると古い文法を学ぶことになるが、 K&Rの教科書は学ぶ点が多いので、いずれは一読を 薦める 8 C++言語の歴史(1.2節) • • • • 1980年、B.Stroustrupが開発を開始(C with Classes) 1983年、C++として公開 1989年、ANSIによる標準化が開始 2003年、最新のISO規格化された • • • • • 基本的にはC言語の拡張 型検査が厳密化 オブジェクト指向プログラミングをサポート 汎用プログラミングをサポート 例外処理の組み込み 9 コンパイルとコンパイラ (2.1, 2.2節) • ソースファイル (source file) – C言語で書かれたファイル – 拡張子は .c (C++の場合は.cpp) – 複数ファイルで構成してもいい ソースプログラム ソースプログラム ソースプログラム sample.c • コンパイラ (compiler) – ソースファイルを翻訳して 実行ファイルを生成する プログラム コンパイラ • 実行ファイル (executable file) – 機械語のファイル – 拡張子は .exe ロードプログラム sample.exe 10 本演習で用いる計算機環境 • ハードウェア: IBM PC互換機、OS: Windows XP Professional • Cコンパイラ、統合開発環境: Visual C++ Express Edition – 編集、コンパイル、デバッグ、実行が同じ画面からGUI操作できる • 日吉や矢上のITCのWindows PCにもVisual C++がインス トールされており、利用可能である(バージョンが異なる) • Express Editionは無料のソフトウェアなので、各自のPCにイ ンストールして演習することが可能 • SDでは、学科でMicrosoftの開発ライセンスを取得している ので、製品版を自宅のPCにインストールすることも可能。 希望者は [email protected] に連絡すること。 • ちなみに、Mac OS X上には優れた統合開発環境が標準で 搭載されています。詳細は矢向に聞いてください。 11 製図室PCの使い方 • ログイン作業は、他のITC環境と同じ • 「スタート」→「プログラム」→「Visual C++ 2005 Express Edition」→「Visual C++ Express Edition」を起動する • 「ツール」→「オプション」→「環境」→「スタートアップ」を 「最後に読み込んだソリューション」にしておこう • 製図室のプリンタを利用する場合は課金されない – 悪用しないこと! • プログラムの印刷は、VC++の印刷メニューから行う – 行数が増えてきたら 2 up で印刷しても構わない • グラフィクス(ウィンドウのイメージ)を印刷する場合は、 Alt+PrtScreenで画面をコピーできるので、それを スタート->プログラム->アクセサリ->ペイントに貼り付け、 画像ファイルとして保存して文書に張り付ければよい。 12 Visual C++でのファイル管理 (2.3節) • プロジェクト:1つの実行ファイルを生成する単位 – 演習問題毎にプロジェクトを作成 • ソリューション:関連する複数プロジェクトの集まり – 演習日毎にソリューションを作成 プログラミング演習 用のフォルダ H:¥programming 20070927 ex1 ex2 20071004 … exn … 20080117 プロジェクト フォルダ ソリューション フォルダ 13 Visual C++でのファイル管理 (2.3節) • 「ファイル」→「新規作成」→「プロジェクト」で「新しいプロ ジェクト」ウィンドウを開く • プロジェクトの種類は「Visual C++」→「Win32」 • テンプレートは「Win32 コンソール アプリケーション」 • プロジェクト名は任意、例えば「ex1」など • 場所は、「h:¥programming」 • ソリューションは、 – 各演習日の最初は「新しいソリューションを作成する」を選び、「ソ リューションのディレクトリを作成」をチェックし、ソリューション名とし て「20070927」など日付で命名する – 各演習日の2回目以降は「ソリューションに追加」を選ぶ • 「OK」を押すと「Win32アプリケーションウィザード」ウィンド ウが開くので、「次へ」を押して、「空のプロジェクト」をチェッ クして「完了」を押す 14 VC++の使い方 (2.3節) • • • • 「プロジェクト」→「新しい項目の追加」ウィンドウを開く カテゴリは「コード」を選択 テンプレートは「C++ファイル(cpp)」を選択 任意のファイル名(例えばex1.c)を指定して「追加」を押す – 拡張子は .c にする • 演習1:p.13のソースコード1を打ち込んでみよ • コンパイルするには、「ビルド」→「コンパイル」 – オブジェクトファイルが生成される。文法チェックに便利 • ビルドするには、「ビルド」→「プロジェクト名のビルド」 – 実行ファイルが生成される • 実行するには、「デバッグ」→「デバッグなしで開始」 – DOS窓が開いて、printf中の文字列が表示されればOK 15 2つ目のプロジェクト • 演習2:p.14のソースコード2で同様に実行してみよ – 「ファイル」→「新規作成」→「プロジェクト」で「新しいプロジェクト」 ウィンドウを開く – 「ソリューションに追加」として、別のプロジェクト名を指定する – ソースファイルを追加する際、拡張子を .cpp とする – 実行する際、2つ目のプロジェクトをスタートアッププロジェクトに 指定するために、 • ソリューションエクスプローラ中の所望のプロジェクトを 右クリックして「スタートアッププロジェクトに設定」する • 以上で、C言語とC++言語の両方とも演習できることが確認 できた。 16 「構成」の選択とファイルの所在確認 • ツールバーの「ソリューション構成」という欄にDebugと表示 されている。ここでReleaseと切り替えられるし、「ビルド」→ 「構成マネージャ」でも切り替えることができる。 – Debug: 後に説明するデバッグを可能にする設定だが、実行ファイ ルが大きくなったり、処理速度が低下する – Release: デバッグ不可能になるが、実行ファイルが小さくなり、処理 速度も速くなる – 演習中は常にDebugを選択しているのがよいだろう • ファイルエクスプローラで H:¥programming を開き、 ソースファイルと実行ファイルの所在を確認しておこう – 例えば • ソースファイル:h:¥programming¥ex1¥main.c • 実行ファイル:h:¥programming¥ex1¥debug¥ex1.exe 17 コマンドラインからのプログラム起動 • 「スタート」→「ファイル名を指定して実行」でcmdと入力し、 DOS窓を開く。 • cdコマンドでソリューションフォルダ内のdebugへ移動する – cd h:¥programming¥20070927¥debug – DOS窓で日本語を入力するには Alt+漢字 • dirコマンドでプロジェクト名.exe という名の実行ファイルが あることを確認する – dir • 実行してみる – .¥プロジェクト名 • プログラムの出力をファイルに保存することができる(リダイ レクト) – .¥プロジェクト名 > 出力ファイル名.txt • 演習3:出力をファイルに保存し、それをメモ帳で開いて 中身を確認せよ 18 文字セットと予約語 (2.5) • よく出てくるバックスラッシュ(文字コード0x5c)は、フォントに よって円記号¥で表示される。同じものと • C言語、C++言語それぞれ、特定の用途に予約されている 単語がある。これらは、変数や関数の名前に使用してはな らない。ファイル名は言語と無関係なので何でも良い。 19 文法の基礎 (2.6) • コメントには、学籍番号と氏名を必ず記入すること プログラム内にも、説明を書き加えるとなお良い • C言語、C++言語では、大文字小文字は区別されるが、 全体的に小文字が多用される • 丸括弧()は、関数への引数を表す • 波括弧{}は、ブロックを表す • 文の最後はセミコロン ; で終わる • 字下げは文法に含まれないが、ブロックの深さに応じて字 下げすると良い。VC++は波括弧の入力で自動的に字下げ を調節してくれる。整形し直したい場合には、領域を選択し て「編集」→「詳細」→「選択範囲のフォーマット」すればよい。 20 C言語の構成要素 • 識別子:変数や関数の名前 main, a, h, w, printf, ... • 予約語:予め定められた用途に使用 int, return, void, ... • 定数:実行前に決められている値 2, "%d", ... • 演算子:様々な演算を行う +, -, *, /, %, ... • 区切り記号:文の終りを指定する ; • ブロック:複数の文をまとめる { } • インデント(空白、タブ) • コメント:C言語と関係ない注釈を残すために使用 /* から */ まで、あるいは//から改行まで 21 プリプロセッサ (2.8) • 行頭がシャープ#で始まる行は、プリプロセッサへの指令で ある。プリプロセッサとは、ソースファイルをコンパイラへ渡 す前に簡単な処理を行うプログラムである。 • 置換 – #define PI 3.14 • マクロ – #define SUM(a,b) (a+b) • ソースファイルの取り込み – #include <stdio.h> – #include "myHeader.h" • 条件付コンパイル (VC++ではdebug構成で_DEBUGが定義されている) – – – – #ifdef _DEBUG #ifndef _DEBUG #else #endif 22 プリプロセッサの動作確認プログラム • 演習4:以下を入力して、debug構成とrelease構成の両方で 実行し、その結果を確認せよ #include <iostream> using namespace std; #define MYNAME "Takahiro Yakoh" int main(void){ #ifdef _DEBUG cout << "compiled with debug configuration"; #endif cout << "My name is " << MYNAME << ".¥n"; return 0; } 23 変数と演算 (3章) • 例として、次のスライドにあるプログラムを入力しよう • 変数を使用するに先立ち、変数の定義が必要 – int i, j; は、int型の変数として i と j を定義している • cout << を用いることにより、文字列定数や変数の値を 画面表示することができる • cin >> を用いることで、キーボード入力を変数の値へ 代入することができる • j=i*2; は極めて重要な事柄を表している。等号は右辺の 演算結果を左辺の変数へ代入することを意味している。 ちなみに、比較は等号2つ == で表す。 24 • ここから 25 デバッガ練習用のプログラム • p.15のソースコード3とほぼ同じ • using namespace std; は、それ以降で std:: を省略できるよう にするための命令。 #include <iostream> using namespace std; int main(void){ int i, j; cout << "Input an integer:"; cin >> i; j=i*2; cout << i << " * 2 = " << j << "¥n"; return 0; } 26 デバッグ • ソリューション構成は「Debug」を選択してビルドすること • デバッグする際、プロジェクト毎にプロパティ→構成プロパ ティ→マニフェストツール→全般にある「FAT32次善策の使 用」を「はい」にしてからリビルドすること (ITCが完全対応してくれるまでの対処、自宅なら不要) • ソース中の任意のところにカーソルを置き、右クリックし、 「カーソル行の前まで実行」を選択すると、実行が開始し、 その行を実行する直前で一時停止する – 黄色矢印が次に実行する行を示している • 1行だけ実行して再度停止するには 「デバッグ」→「ステップオーバー」(F10) • 関数中まで追いかけて停止したいときは 「デバッグ」→「ステップイン」(F11) 27 デバッグ(続き) • ブレークポイントを設定することで、複数個所で実行を一時 停止することが可能 • 左下のローカルには変数の現在値を表示される • 演習5:最初の段階で変数の値がいくつなのか、値はいつ 変更されるかを観察してみよ。 – ウィンドウの切り替えはAlt+Tabが便利 28 データ型と変数(3.1) よく使われるデータ型 char 文字(8bit) int 整数(32bit) float 単精度浮動小数点(32bit) double 倍精度浮動小数点(64bit) 変数(データを格納するための箱) 名前のついた箱を用意することを「変数を定義する」という。 箱を用意しただけの時、何が入っているかは分からない。 あらかじめ値を入れておくことを初期化という。 変数の定義は、ブロックの先頭で行わなければならない。 int a; // 変数の定義、値は未定 int b=123; // 変数の定義と初期化 int c(123); // C++のみ許される変数の定義と初期化 29 定数 (3.3) • 変数定義の際、型の前にconstを前置すると定数となり、 初期化以外の代入が許されなくなる。 – const int a=5; – const int b; // 初期値がないとエラー – a=6; // 定数への代入もエラー 30 参照(C++のみ) (3.4) • 既にある他の変数を参照する変数である • 定義時に、型名と変数名の間に&を記すことで参照型であ ることを示し、さらに参照する変数で初期化しなければなら ない • 主な利用場面は関数への引数であり、現状ではわからなく て良い 31 リテラル定数 (3.5) 実行前に決められている値 整数リテラル a=64; b=0100; c=0x40; 実数リテラル,倍精度リテラル a=1234.0; b=1.234e-5; a=123L; b=1.23F; 文字リテラル a='a'; エスケープ文字 →引用符や制御文字を扱う →コンソール出力 \n \b \a \’ 改行 バックスペース beep ’文字 \(バックスラッシュ)は端末に よっては¥に見えるが同一文字 文字列リテラル である。 "Hello, world.\n" "123" ='1'+'2'+'3'+'\0' 32 演算子(1) (3.7) • 算術演算子 + 加算 / 除算 - 減算 % 除算の余り * 乗算 = 代入 記述例 a=a+1; b=c%d; • 代入演算子 e1=e2; e1をe2に代入 e1+=e2; e1+e2をe1に代入 e1-=e2; e1-e2をe1に代入 e1*=e2; e1*e2をe1に代入 e1/=e2; e1/e2をe1に代入 e1%=e2; e1%e2をe1に代入 33 第1回目の演習問題 1. 2.1-2.9の演習問題はすべて行っておくことを原則とするが、 提出は各自が最後に行った2問だけでよい。 レポートには、プログラムリストを添付し、何を行ったら何が 起きたのか、それが所望の動作だったかどうか、などを記 すこと。さらに今回は、コンピュータに関する知識の有無や、 この授業に何を期待するかを書くこと。 34
© Copyright 2024 Paperzz