プログラミング実習 I 01 イントロダクション 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp
担当教員 TA の紹介 担当教員 井村誠孝 m.imura@kwansei.ac.jp TA ( ティーチングアシスタント ) 共通メールアドレス class4-2017-ta@imura-lab.org M2 田中勇祐 ( 井村研 ) dvp62987@kwansei.ac.jp M2 藤井豪 ( 長田研 ) ehq67093@kwansei.ac.jp M2 佐藤瞳 ( 岡留研 ) fzo65982@kwansei.ac.jp M2 花家朋宏 ( 河野研 ) dpo68091@kwansei.ac.jp M1 太田小百合 ( 石浦研 ) dzn86186@kwansei.ac.jp サポート ( 準備室スタッフ ) 黒澤隆之 tkuro@kwansei.ac.jp 池淵隆 ikebuchi@kwansei.ac.jp 福森聡 fukumori.s@kwansei.ac.jp
重要!! 実習ウェブサイト レポートの提出 講義資料の配布は以下のウェブサイトで行います. http://ist.ksc.kwansei.ac.jp/prog1 ポータルページからも行けます. 関学プロ 1 で検索 http://ist.ksc.kwansei.ac.jp/portal/ アクセスするための ID とパスワードは, 学科教務ページへのアクセスと同じです. まずこのページを開いてください. アカウントやパスワードが不明の人は手を挙げる.
本演習の概要 目的 C 言語によるプログラミングの基礎の習得 講義案内で内容を確認
重要事項の再確認 教科書に沿って学習し, 各回レポートを提出する. 教科書の購入は必須です. 教科書は講義で説明した部分以外も, 各自がしっかり読んでいることを前提としています. レポートには当日レポートと宿題レポートがある. コピー & ペーストしない. 自分の手で入力することが学習の近道. プログラミングの学習は外国語の学習と同じです. 他人のプログラムのコピーが見つかった場合, コピー元 コピー先とも成績評価は 0 点になります. 本実習の単位は,3 回生配当の実習を履修するために必須です.1 回生のうちに修得するようにしましょう.
授業中のマナー 部屋は飲食禁止です. 各回の最初に私が簡単に説明をします. その間は手を止めて話を聞いてください. トイレには適宜立ってもらってよいですが, 長時間離席している場合は欠席とみなします. 実習と関係ない話 ( いわゆる私語 ) はしないでください.
実習時間について チャペルアワーを挟んでいますが, 木曜はチャペルが原則無い ( はず ) なので, その分を前倒しします. 開始 : 9:00 - 終了 : 12:00 ただし合同チャペルがある日は, その分を休みとし, 12:40まで行います. 中間試験の日は別途連絡します. 私が授業を開始した時点で到着していない場合, 遅刻となります.
教科書以外の参考書 教科書はややクセがあります. 必要以上に細部にこだわりすぎていると思う. 定番 柴田望洋 : 新 明解 C 言語入門編, ソフトバンククリエイティブ, 2014 やさしい 村山公保 : 基礎講座 C, 毎日コミュニケーションズ, 2010 アンク : C の絵本, 翔泳社, 2002 原点 カーニハン, リッチー : プログラミング言語 C, 第 2 版, 共立出版, 1989
プログラミング その意図は?
本節の内容 コンピュータは賢いのか? プログラムはコンピュータにとってどれほど重要か? コンピュータはどのようにプログラムを実行するのか?
映画の中のコンピュータ = 万能 The Matrix 人間に敵対するコンピュータ スタートレック万能な召使としてのコンピュータ コンピュータはそんなに賢いのか?
これもコンピュータ?
実際のコンピュータは いちいち全ての仕事のやり方を教えてあげないといけない召使 ただし仕事はめちゃくちゃ速い 仕事をさせる手順書 = プログラム プログラムを作成すること = プログラミング
ハードウェアとソフトウェア コンピュータの構成 ハードウェア 硬いもの = 手で触れられるもの = 実体のあるもの ソフトウェア 軟らかいもの = 手で触れられないもの = 実体のないもの プログラムはソフトウェア ソフトウェアの例 システムソフトウェア : OS (Windows, Linux, etc.) アプリケーションソフトウェア : Word, Excel, ブラウザ, ゲーム, etc.
コンピュータにできること 情報を入力する 例 : キーボードから数値を入力する 情報を演算する 例 : 数値どうしを加算する 情報を出力する 例 : 計算結果を出力する 入力 演算 出力の巧みな組み合わせでプログラムは構成される
知性とは何だろうか チェスの世界チャンピオンに勝利 IBM Deep Blue (1997) 顔認識 AlphaGo が世界最強囲碁棋士柯潔に勝利 (2017) 自動運転カー 全て, プログラムに従っているだけだが...
余談 : 機械が知性を持つかテストする Turing Test ( チューリングテスト ) 人間と機械がそれぞれ, 判定者と対話を行う. 対話は文字情報のみによる. 判定者はいずれが人間で, いずれが機械であるか, 判別する. 判定者が機械と人間の区別ができなければ, 機械に知性があるとする. 行動に基づく知性の判定
どうやって仕事のやり方を教えるか コンピュータはコンピュータ専用の言葉 機械語 しかわからない. あいまいさのある自然言語 ( 日本語や英語など ) は直接理解できない. 人間が機械語を理解することは非常に困難 人間にとって比較的わかりやすい 言語 を使って仕事のやり方 (=プログラム) を記述 それを 機械語 に翻訳してコンピュータに実行させる
C 言語は コンパイラ言語 どのような言語も, 最終的には, 機械語 に置き換わって実行される C 言語は コンパイル 実行 = 翻訳者 全命令解読翻訳実行 実行速度が高速 コンパイラ言語の逆は インタプリタ = 同時通訳者 1 命令解読翻訳実行 即座に実行
C 言語から機械語へ C 言語アセンブリ言語機械語 #include <stdio.h> int main(int argc, char **argv) { printf("hello, world n"); } return 0;.file "helloworld.c".def main;.scl 2;.type 32;.endef.text LC0:.ascii "hello, world 12 0".align 2.globl _main.def _main;.scl 2;.type 32;.endef _main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax movl %eax, -4(%ebp) movl -4(%ebp), %eax call alloca call main movl $LC0, (%esp) call _printf movl $0, %eax leave ret.def _printf;.scl 2;.type 32;.endef 014c 0003 0000 0000 00f4 0000 000d 0000 0000 0004 742e 7865 0074 0000 0000 0000 0000 0000 0040 0000 008c 0000 00cc 0000 0000 0000 0004 0000 0020 6000 642e 7461 0061 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0040 c000 622e 7373 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0080 c000 6568 6c6c 2c6f 7720 726f 646c 000a 8955 83e5 08ec e483 b8f0 0000 0000 4589 8bfc fc45 00e8 0000 e800 0000 0000 04c7 0024 0000 e800 0000 0000 00b8 0000 c900 90c3 0023 0000 000b 0000 0014 0028 0000 0009 0000 0014 002f 0000 0003 0000 0006 0034 0000 000c 0000 0014 662e 6c69 0065 0000 0000 0000 fffe 0000 0167 6568 6c6c 776f 726f 646c 632e 0000 0000 0000 6d5f 6961 006e 0000 000e 0000 0001 0020 0002 742e 7865 0074 0000 0000 0000 0001 0000 0103 003f 0000 0004 0000 0000 0000 0000 0000 0000 642e 7461 0061 0000 0000 0000 0002 0000 0103 0000 0000 0000 0000 0000 0000 0000 0000 :
C プログラムの実行までの手順 ソースファイル 1 #include <stdio.h> int main(int argc, char **argv) { printf("hello, world n"); } return 0; ソースファイル 2 // SurfaceShape.h #ifndef SURFACE_SHAPE_H_ #define SURFACE_SHAPE_H_ #include <vector> class SurfaceShape { コンパイラ コンパイラ 014c 0003 0000 0000 00f4 0000 000d 0000 0000 0004 742e 7865 0074 0000 0000 0000 0000 0000 0040 0000 008c 0000 00cc 0000 0000 0000 0004 0000 0020 6000 642e 7461 0061 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0040 c000 622e 7373 0000 0000 0000 0000 014c 0003 0000 0000 00f4 0000 000d 0000 0000 0004 742e 7865 0074 0000 0000 0000 0000 0000 0040 0000 008c 0000 00cc 0000 0000 0000 0004 0000 0020 6000 642e 7461 0061 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0040 c000 622e 7373 0000 0000 0000 0000 オブジェクトファイル 1 オブジェクトファイル 2 ライブラリ リンカ 実行可能プログラム
C 言語の特徴 コンピュータの細部の動作まで制御することができる. コンピュータがどのように動作しているのかを意識する必要がある場合がある. 標準的な仕様が定められているために, 移植性が高い. ただし,C 言語の標準的な機能 ( ライブラリと呼ぶ ) だけを使用している場合に限る. たいへん広く普及している. 他の言語を習得する場合の基礎となる.
余談 : 世界中のプログラミング言語 正確な数は不明だが,1000 種類以上はある模様. 目的 分野 使用者によってニーズが異なるため. プログラミング言語間の関係の可視化 http://exploringdata.github.io/vis/programming-languagesinfluence-network/ http://www.levenez.com/lang/
本節のまとめ コンピュータはプログラムがないと何もできない. プログラムは実行してほしい処理の手順書. 処理を入力 演算 出力に分けて考える. 比較的人間にわかりやすい言語で書かれたプログ ラムが, コンピュータにとってわかりやすい言語 に翻訳されて処理される. プログラムの作成はコンピュータに所望の処理をさせる最も自由度の高い手段 教科書の 1 章を読んでおいてください.