Transcript Document
2013年度 プログラミング入門 第1回講義 授業情報(2) コンピュータとは(8) コンピュータ言語と実行(15) Helloを表示するプログラム(21) マークのあるサンプルプログラムは /home/course/prog0/public_html/2013/lec/source/ 下に置いてありますから、各自自分のディレクトリにコピーして、 コンパイル・実行してみてください Prog-0 2013 Lec01-1 項目の後の()内は、その 項目の先頭ページを示し ています。 また項目の先頭ページは タイトルの色が薄青になっ ています。 Copyright (C) 1999 - 2013 by Programming-0 Group スタッフ紹介 教員 クラス 授業担当 演習担当 C1, 2 大津山 大藤(C1) 小川(C2) C3, 4 久田 寺薗(C3) 鈴木(C4) C5, 6 出村 中里(C5) 平田(C6) TA(Teaching Assistant)/SA(Student Assistant) 演習時には演習補助として大学院生のTAと、学部生のSAがいます。 分からない所はどんどん質問しましょう。 授業・演習時間以外の質問はメールにて行なってください [email protected] (上記の教員) 授業等演習以外の質問 [email protected](上記教員とTA/SA) 演習の質問 Prog-0 2013 Lec01-2 Copyright (C) 1999 - 2013 by Programming-0 Group 本コースについて コースは以下のような構成で行われ、それぞれ評価を行います。カッコ内 は配点です(合計100点) 授業(週1コマ) クイズ(10点) 毎週授業中に15分のクイズを行う。内容は前週の復習。 クイズ提出は出席確認を兼ねます。また遅刻は欠席扱いになります。 中間試験(20点) 期末試験(40点) 演習(週2コマ) ー 詳しくは演習時に説明があります 課題作成(30点) 一部課題の提出は演習時間内が締め切りとなります 授業と演習が融合した内容の回があります 以下のいずれか一つにでも該当する者には単位を与えません 中間試験または期末試験に欠席した 授業または演習の出席回数が全体の2/3に満たない なお、事故・病欠・忌引き等避けられないもの以外の公休(大会参加など)は 授業・演習ともに欠席扱いとします。但し演習問題は事前に提出が可能なので、 2週間前までに相談してください。 Prog-0 2013 Lec01-3 Copyright (C) 1999 - 2013 by Programming-0 Group プログラミング関連ロードマップ 赤矢印は先修条件 ・JAVAプログラミング、 ・アルゴリズムとデータ構造、 ・C++プログラミング の3つのコースは、先修条件として、プロ グラミング入門又は後期プログラミングC が必要です。 JAVA アルゴリズムと プログラミング データ構造 C++プログラミング 難 し さ プログラミングC プログラミング入門 1年前期 Prog-0 2013 Lec01-4 1年後期 2年前期 2年後期 Copyright (C) 1999 - 2013 by Programming-0 Group プログラミング入門 では何を学ぶのか? コンピュータとは何なのか? プログラミングとは何なのか? C言語のプログラミング技術の基礎、良いプログラムとはどんなものか? 良く知っている人は講義・演習を免除される場合があります ⇨ スキップテストを実施します(次ページに詳細) 演習課題・電子資料ほか 学内アクセス file:///home/course/prog0/public_html/2013/welcome.html 学外アクセス(上記学内アクセスより最大1時間程度の更新の遅れがあるため学内 では必ず上記学内アクセスURLを使用すること) http://www.u-aizu.ac.jp/course/prog0/ Prog-0 2013 Lec01-5 Copyright (C) 1999 - 2013 by Programming-0 Group スキップテストに関して 充分C言語に関する知識がある人に対して、 スキップテストを行います。(希望者のみ) テスト成績によって以下の2種類の認定を行います。 但し、スキップ認定されても中間・期末試験は必ず受けねばなりません。 単位取得ならびに成績がAになる保証もありません。 免除された時間を生かし、プログラミングスキルの 更なる向上を目指して下さい。 skip(1):授業出席(クイズ)が免除されます。演習課題の提出が必要です。 skip(2):授業出席(クイズ)・演習(課題提出)が免除されます。 スキップテストの開催要項 日時・場所:4月11日(木) 5限 場所:未定 この日時に他の授業がある者は、必ずメールにて相談する事 持ち込む事が出来るもの:筆記用具のみ テスト内容:プログラム作成(ペーパーテスト) Prog-0 2013 Lec01-6 Copyright (C) 1999 - 2013 by Programming-0 Group 授業の前に.. 人間の記憶はそう長くは持ちません。 分からない事はその時・その場で 質問してください。 授業中、つい専門用語(業界?用語)を 使ってしまう事があるかもしれません。 聞きなれない、知らない言葉もどんどん 質問してください。 ハンドアウト(この書籍の事)は教科書の エッセンスです。 全てを網羅している訳ではありません 予習・復習時には必ず教科書も参照して 下さい(ハンドアウトには必要に応じて 教科書のページを記載してあります) ハンドアウトは何箇所か意図的に伏字にな っています。言わば 未完成1 です。 授業をしっかり聞いて、自分のハンドアウトに 記入し、完成させてください Prog-0 2013 Lec01-7 Copyright (C) 1999 - 2013 by Programming-0 Group コンピュータとは? コンピュータとは「入力」と「出力」がある ブラックボックス だと考えると分かりやすい。 2 入力に応じて出力が変わる。 「入力」:コンピュータへ与える情報 「出力」:コンピュータが処理した結果 ファイルの一覧の表示 lsコマンド 日付、時間の表示 dateコマンド ブラックボックス 「入力」に応じて違う処理をするために 「プログラム」 が用いられる。 3 Prog-0 2013 Lec01-8 Copyright (C) 1999 - 2013 by Programming-0 Group コンピュータの構成 たくさんの「プログラム」 以下の2つの構成要素からなる ソフトウェア 実際にプログラムからの指示を実行する装置 4 ハードウェア 5 コンピュータ プログラム (ソフトウェア) lsコマンド lsコマンド (人間からの指示) Prog-0 2013 Lec01-9 ファイルの一覧の表示 dateコマンドなど 装置 (ハードウェア) Copyright (C) 1999 - 2013 by Programming-0 Group ハードウェア(1) 入力のためのハードウェアの例 マウス キーボード スキャナ デジカメ/Webカメラ タブレット キーボード(鍵盤) やマイク 出力のためのハードウェアの例 ディスプレイ Prog-0 2013 Lec01-10 プリンタ スピーカ プロジェクター Copyright (C) 1999 - 2013 by Programming-0 Group ハードウェア(2) 記憶のためのハードウェア メモリ ハードディスク SSD CD/DVD フラッシュメモリ 通信のためのハードウェア ネットワークカード Prog-0 2013 Lec01-11 無線LAN ハブ/ルーター PocketWifiルーター Copyright (C) 1999 - 2013 by Programming-0 Group コンピュータの考える頭脳 CPU (Central Processing Unit) 中央処理(演算)装置 6 ソフトウェアからの指令を解読して、 計算を実行する。 どんどん高速化し、現在では3GHzを超える ものもある(1クロックの時間0.33ナノ秒で光 は10cmしか進まない)。 現在では以下のようなCPUが使用されている Intel x86系[Intel Core i7や、AMD Phenom II等の x86互換チップ](WindowsPC, WS, Macなど) PowerPC系(旧Macintosh,ゲームキューブ, Xbox360, PlayStation3など) Sparc(Sun Sparc Workstation) SH(セガのゲーム機)やMIPS(Nintendo64, PlayStation2など) ARMなどの組み込み用プロセッサ Prog-0 2013 Lec01-12 Core i7 Core 2 Core i7 die photo Copyright (C) 1999 - 2013 by Programming-0 Group コンピュータの記憶する頭脳 メモリ 主記憶装置 ソフトウェア(の指令)や必要な データを保管する。 DRAM(Dynamic RAM)という 記憶素子を使用する。 DRAMの特徴 大容量(1GBは当たり前) CPU 7 に比べてスピードが遅い。 電源が切れると情報は消えて しまう(携帯電話やデジカメで 使用されているフラッシュメモリ は消えない)。 Prog-0 2013 Lec01-13 Copyright (C) 1999 - 2013 by Programming-0 Group ソフトウェアの種類 基本ソフトウェア (オペレーティングシステム、OS) : 8 Unix(Linux,BSD,Solaris,Irix,AIX...) MS-DOS/Windows MacOS などなど、コンピュータの資源や働きなどを 配分、協調、管理するのに必要不可欠な ソフトウェア アプリケーションソフトウェア: 9 必要に応じて使用するソフトウェア 皆さんの作るプログラムもここに入る Prog-0 2013 Lec01-14 Copyright (C) 1999 - 2013 by Programming-0 Group 言語とは あるきまり( 文法 と呼ぶ)によって記述される。 10 正確に指示を伝えることが出来る。 ジェスチャー 言葉なら Prog-0 2013 Lec01-15 何を伝えたいの? 良く分からない! 定規を取って ください 了解、了解! Copyright (C) 1999 - 2013 by Programming-0 Group コンピュータの言語 (コンピュータに対する指令) 人間にもいろいろな言語があるように、コンピュータにもいろ いろな言語がある 機械語 コンピュータが直接理 解出来る言葉 人間が理解しやすい 言葉 でも人間は理解する のが非常に困難 でもコンピュータは直 接理解出来ない 0111 0010 1010 1110 0001 1100 Prog-0 2013 Lec01-16 高級言語 その他にもこの丁度中間に位置 する「アセンブリ言語」というもの もある。(1年後期システム概論 で習う) main(){ int i; for(i=0;…. Copyright (C) 1999 - 2013 by Programming-0 Group 高級言語 高級言語にはいろいろな種類がある COBOL: 現在でも主に銀行系などのオンラインなどに多く使われている。 LISP: 人工知能などに良く用いられる。 BASIC: パソコンの世界では古くから使われてきた。「Visual Basic」として現在も Windowsでは割と良く使われる。 FORTRAN: 科学計算に良く用いられる。 PL/I: 汎用計算機でのプログラミング言語として一時良く用いられた。 C: 現在最も ポピュラー 11 なプログラミング言語である。 C++: Cにオブジェクト指向の考えを取り入れたもの。「VisualC++」はWindowsの 開発環境として有名。 Java: インターネットへの親和性が高く、機種に依存せずプログラムが作成でき る。携帯電話にも使用されている。 Prog-0 2013 Lec01-17 Copyright (C) 1999 - 2013 by Programming-0 Group 高級言語をコンピュータに理解させる方法 その1 コンパイラ言語 (C/FORTRANなど) コンパイル 機械語 実行 コンピュータ コンパイラは高級言語を機械語に翻訳する。この機械語プログラムを実行する。 2ステップに分かれていて面倒だが、実行スピードは速い。 その2 インタプリタ言語 (Java/BASICなど) 逐次翻訳・実行 コンピュータ インタプリタは高級言語を逐次翻訳して直接実行する。 ただし、実行スピードは遅い。 Prog-0 2013 Lec01-18 Copyright (C) 1999 - 2013 by Programming-0 Group 皆さんの演習の場合 xx.c (Cプログラムのファイル) コンパイル gcc xx.c 実行 a.out コンピュータ が実行 ./a.out 演習ではコンパイラとして「gcc」を使用する。 「gcc xx.c」(xx.cは作成したcファイルの名前)と入力することで、 このプログラムをコンパイルし、実行ファイルa.outを作成する。 更に「 ./a.out 」 と入力することで、 このa.outファイルを実行する。 12 Prog-0 2013 Lec01-19 Copyright (C) 1999 - 2013 by Programming-0 Group C言語 B言語の後継として登場(Dennis Ritchie, 1972 Bell Labs.) Ritchie はC言語でミニコンピュータのオペレーティングシステムである Unixを開発(作成)した。 やがて Unix 13 の普及につれて(それ以上に)C言語は普及した。 現在存在するコンピュータ(パソコンからスーパーコンピュータまで)で稼 働しているソフトウェアのかなりの部分がC言語で作成されている。 また、ほとんどのコンピュータにC言語のコンパイラが存在する。 つまり現在C言語は世界で一番普及しているコンピュータ言語である。 (人間の言葉で言えば英語みたいなものと言えば分かりやすい) 現在では C言語に関するANSI(アメリカ)/ISO(世界)/JIS(日本)の各標 準規格が制定されている(どれも内容は同じ。ANSIが有名)。 C++、JavaなどはCの拡張で、基本的な文法はほぼ同じである。 Prog-0 2013 Lec01-20 Copyright (C) 1999 - 2013 by Programming-0 Group Cプログラムの基本構造 #include <stdio.h> main(){ 文1; 文2; 1行目は、後で勉強する。(今はおまじない) 2行目は、プログラムの最初であることを示す。 (正確には関数mainの始まり) main の後ろに()を忘れずに。 ~ 3行目以降がプログラム本体。原則として上から 下へ順番に実行。文末にはセミコロン ; が必要。 文n; { から } の中にプログラムを記述する。 } はじめての命令文 「printf」 標準出力(ディスプレイ)にメッセージを出力する printf("Hello\n"); メッセージは ” で囲む 14 上の文の意味:メッセージ(Hello)と改行(\n)をディスプレイに表示する Prog-0 2013 Lec01-21 Copyright (C) 1999 - 2013 by Programming-0 Group Helloと表示するプログラム(p.26) kterm の画面上に Hello と表示させるプログラム(emacsで作成し、 ファイル lec01-1.c に保存したとする) #include <stdio.h> main( ){ printf("Hello\n"); } 見易さのために、キー入力を青で、 出力を赤で表示 実行結果 Prog-0 2013 Lec01-22 lec01-1.cをコンパイルする std1dc1{s1000000}1: gcc lec01-1.c std1dc1{s1000000}2: ./a.out Hello 実行 std1dc1{s1000000}3: /home/course/prog0/public_html/2013/lec/source/lec01-1.c Copyright (C) 1999 - 2013 by Programming-0 Group 改行文字(p.34)と出力の仕方の違い \n は表示を改行させる「改行文字」 出力 Hello World printf("Hello\nWorld"); printf("HelloWorld"); printf("Hello"); printf("World"); HelloWorld printfを分けても 改行はされない 注:「\」(逆(バック)スラッシュ)記号は日本語環境では「¥」記号となるので、 本によっては改行を「¥n」と表示しているものもある。 このハンドアウトでは分りやすくするために全角の「\」を使用している。実際にプログラムを作成する時には半角の 逆スラッシュを使用すること。 /home/course/prog0/public_html/2013/lec/source/lec01-2.c Prog-0 2013 Lec01-23 Copyright (C) 1999 - 2013 by Programming-0 Group 1+2を計算するプログラム (emacsで作成し、ファイル lec01-3.c に保存したとする) #include <stdio.h> main( ){ printf("1+2=%d\n",1+2); } 実行結果 %dは整数10進数で表 される値を指す。 ここではカンマの後の 式の計算結果が入る std1dc1{s1000000}1: gcc lec01-3.c std1dc1{s1000000}2: ./a.out 1+2=3 実行 std1dc1{s1000000}3: /home/course/prog0/public_html/2013/lec/source/lec01-3.c Prog-0 2013 Lec01-24 Copyright (C) 1999 - 2013 by Programming-0 Group