計算機プログラミングI 火曜日 5時限 担当: 増原英彦 第1回 2000年10月

計算機プログラミングI
担当: 増原英彦
•
•
•
•
第1回
履習にあたって
プログラミングとは?
プログラムの作成・コンパイル・実行・修正
練習
1
計算機プログラミングI (増原) 2003年度
履習にあたって
• Webページ参照
2
計算機プログラミングI (増原) 2003年度
プログラミングとは
• プログラム
• プログラミング
– アルゴリズム
• プログラミング言語
– 機械語・高級言語・Java言語
– コンパイル・インタプリタ・仮想機械
3
計算機プログラミングI (増原) 2003年度
プログラムとは
計算機に情報を処理させる手順の記述
• cf. ソフトウェアとほぼ同義
– ソフトウェアはプログラムの他にデータも含む
– 「ソフト」でないプログラムもある
(e.g., ファームウェア)
• コンピュータのある所には必ず
プログラムがある
4
計算機プログラミングI (増原) 2003年度
プログラミングとは
• 狭義: ある手順を計算機に行わせる
プログラムを記述すること
• 広義: 与えられた問題の解決方法を考え,
それを行うプログラムを作ること
※ アルゴリズム: 問題を解決するための
自明でない手順
– 計算機だけが対象ではない
– e.g., ガウスの消去法、ドント方式、……
5
計算機プログラミングI (増原) 2003年度
プログラミング言語とは
プログラムを記述するための人工言語
• 言語なので文法・意味が決められている
• 計算機が実行できる
• 沢山ある: 1976年時点で米国防省で
使われていたプログラミング言語の
種類はいくつ? 
Audrey A. Hook, “A Survey of Computer Programming Languages” (1995)
• Java言語はプログラミング言語のひとつ
6
計算機プログラミングI (増原) 2003年度
プログラミング言語とは
プログラムを記述するための人工言語
• 言語なので文法・意味が決められている
• 計算機が実行できる
• 沢山ある: 1976年時点で米国防省で
使われていたプログラミング言語の
種類はいくつ?  450以上
Audrey A. Hook, “A Survey of Computer Programming Languages” (1995)
• Java言語はプログラミング言語のひとつ
7
計算機プログラミングI (増原) 2003年度
プログラミング言語の種類
2種類に大別できる
• 機械語 (machine languages):
計算機のCPUが直接実行できる
単純な命令の羅列
• 高級言語 (high-level languages):
人間が理解しやすいように
設計された言語
Java言語も高級言語の1つ
8
計算機プログラミングI (増原) 2003年度
機械語
2:
3:
4:
5:
6:
7:
8:
xorl %eax,%eax
xorl %edx,%edx
addl %edx,%eax
incl %edx
cmpl $99,%edx
jle 4
leave
計算機のCPUが
直接実行できる
単純な命令の羅列
• 人間には読み書きしづらい
EAXの値を0にせよ
EDXの値を0にせよ
EAXの値をEDXだけ増やせ
EDXの値を1増やせ
EDXの値と99を比較せよ
EDXの方が小さかったら4へ行け
退避していたEBPの値を戻せ
(e.g., 数式は四則演算に分解;
文字列は文字コードを並べて表現)
• CPUごとに違う  異なる種類の計算機で
同じプログラムを動かすことは難しい
9
計算機プログラミングI (増原) 2003年度
高級言語
人間が理解しやすいように設計された言語
• 複雑な処理・データを簡単に書ける
(e.g., 数式・文字列)
• 計算機は直接実行できない
翻訳(コンパイル)して実行
通訳プログラム(インタプリタ)を通して実行
Java言語は?
10
計算機プログラミングI (増原) 2003年度
高級言語の例 (Java言語)
/** 最初のプログラムの例 */
public class T21 {
public static void main(String[] args){
TurtleFrame f;
//変数 f の型宣言
f = new TurtleFrame(); //TurtleFrameを作成しfに代入
Turtle m = new Turtle(); //Turtle を作成し,m の初期値として代入
Turtle m1 = new Turtle(); //もう1つ作成し,m1 の初期値として代入
f.add(m);
//f に m を追加
f.add(m1);
//f に m1 を追加
m.fd(100);
//m よ前に 100 進め
m.rt(90);
//m よ右に 90 度回れ
m.fd(150);
//m よ前に 150 進め
m1.rt(90);
//m1 よ右に 90 度回れ
m1.fd(100);
//m1 よ前に 150 進め
}
}
11
計算機プログラミングI (増原) 2003年度
プログラムの実行方式
作成
機械語
プログラム
12
計算機プログラミングI (増原) 2003年度
プログラムの実行方式
作成
高級言語
プログラム
機械語
プログラム
機械語
プログラム
(オブジェクト
コード)
13
計算機プログラミングI (増原) 2003年度
プログラムの実行方式
作成
高級言語
プログラム
機械語
プログラム
機械語
プログラム
(オブジェクト
コード)
通訳プログラム
(インタプリタ)
14
計算機プログラミングI (増原) 2003年度
プログラムの実行方式
機械語
プログラム
作成
機械語
プログラム
(オブジェクト
コード)
高級言語
Java言語
プログラム
通訳プログラム
(インタプリタ)
仮想機械語
プログラム
実行
仮想機械
プログラム
15
計算機プログラミングI (増原) 2003年度
プログラムのコンパイルと実行
• ライブラリプログラムのコピー
• コンパイル
• 実行
16
計算機プログラミングI (増原) 2003年度
プログラムの編集
•
•
•
•
•
すでにあるプログラムをコピー
エディタを使って編集
コンパイル
実行
誤りの修正 (デバグ)
17
計算機プログラミングI (増原) 2003年度
課題
18
計算機プログラミングI (増原) 2003年度