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