スライド 1 - lecture.ecc.u

第5章 計算とプログラム
本章で説明すること
・計算の概観と記述法
・代表的な計算モデル
・プログラムとプログラム言語
計算の方法の図
• 取り出し型
• 分割型
• 変数(variable)
– 値を覚えておく”もの”(変数には型がある)
-代入(assignment)
• 変数に値を設定する操作,
”変数名” ← ”式” で表す
a:変数とする
a
a+b a:=a+b a=a+b など
(a:=a+1 は等式ではなく、代入を表す。)
条件判断
(a) if (条件C) then (A) endif
条件Cが成立すればAを実行する。そう
でなければ何もせず次に進む
(b) if (条件C) then (A) else (B) endif
条件Cが成立すればAを実行する。そう
でなければ、Bを実行し、次に進む
(a) if-then 文
(b) if-then-else 文
if 条件が成立するか?
if 条件が成立するか?
YES
then
実行文を実行する
YES
NO
NO
then
else
実行文1を
実行文2を
実行する
実行する
x=あなたの体重(kg);
y=あなたの身長(cm);
if ( x> ((y-100)×0.9)
then
print( 太りすぎです)
endif
if ( x> ((y-100)×0.9)
then print( 太りすぎです)
else print (正常です)
endif
While 文の例
2 のk 乗がはじめて 10000 以上になる k を求める
------------------------------------------------------------------i, k: integer;
i=2;
k=0;
while(j<10000) do
i:=2i;
k=k+1;
end
(2) 繰り返し(while文)
i=1,k=0
i < 10000 ?
while(i<10000)
No
Yes
i = 2i,
k=k+1
k を出力する (2k  10000
となる最初の k )
手続き型の例
• 例: 正の整数a, b,a/b の商q,余りr を求め
る
– 計算の手順
• 被除数(a)から除数(b)を引けるだけ引く
• 引いた回数を商,残りを余りとする
– 計算の記述
r←a
q←0
while r ≧ b do
r←r-b
q←q+1
done
添え字付き変数(配列)
A[8] : 文字
と定義すると
1
A
2
P x
3
4
5
6
7
8
1
%
r
H
A
L
A[3] の値は 1
A[8] の値は L
例 与えられた列を小さい順に並べかえる問題
(ソーティング)での逐次的アルゴリズム
---バブルソート
例 与えられた列を小さい順に並べかえる問題
(ソーティング)での再帰的アルゴリズム
--- Quick Sort
プログラム QuickSort(w); (wは数の配列)
1. wの要素の数が1以下の時はそのまま返す。
2. wの列中から任意にひとつ要素aを選ぶ;
3. wを順に見ていって、a以外の要素について、
a より小さいものはw1 の列に、
a より大きいものは w2 の列に付け加えていっ
て列 w1, w2 を作る。
4. Sort を使って、 w1’=Sort(w1), w2’=Sort(w2)
としてw1, w2 の並べ替えを行う
5. w=w1+a+w2 を答えとして出力する。
2 6 3 7 5 4 1 8
Sortの
実行例
5
2341
678
7
3
21
2
1
4
6
8
プログラム
• プログラム(program)
– 計算を記述したもの
– コンピュータを使った問題解決における活動単位
– 一般に,人間には読み書き不可能
• プログラム言語(programming language)
– プログラムを記述するための約束事をまとめたも
の
– 人工的に作られた言語(人工言語)
– 人間にも読み書き可能
プログラム言語
• プログラムを記述するための種々の約束事
– ある内容のことがらを表すための表記法の集まり
• 変数への代入(←)
• 条件付き処理(if ... then ... else ... endif)
• 反復処理(while ... do ... done)
• "内容"の集まり
– 意味(semantics)
• "表記法"の集まり
– 構文(syntax)
機械語とプログラム言語処理系
• 機械語(machine language)
– すべて2進数か,決まった長さのビットパターン
• バイナリ(binary)プログラム
– 機械語で書かれたプログラム
– コンピュータ(ハードウェア)が理解,実行できる
• 言語処理系
– "プログラム言語で書かれたプログラム" を "バイ
ナリプログラム"に変換(翻訳)するシステム
アセンブリ言語とアセンブラ
• アセンブリ言語
– 機械語の機能部分や,データの場所に人間が読
めるような名前(ニーモニック)をつけた言語
• アセンブラ(assembler)
– "アセンブリ言語で書かれたプログラム" を "バイ
ナリプログラム"に変換(翻訳)するシステム
– 最も初期から使われてきた言語処理系
高水準言語
• 高水準言語
– 人間が理解しやすい形でプログラムを読み書き
できる言語
– コンパイラを使ってバイナリプログラムに変換す
る
– 高水準言語の例: C言語,C++言語, LISP,
COBOL, Prolog, Java, Pascal
コンパイラとインタプリタ
• コンパイラ(compiler)
– プログラム言語で書かれたプログラム(ソース)を
機械語(オブジェクト)に変換(翻訳)するソフトウェ
ア
• インタプリタ
– プログラム言語で書かれたプログラム(ソース)を
解釈(interpret)してその意味通りの実行を行うソ
フトウェア
2. インタープリター方式
高級言語で書かれたプログラムを1行ず
つ解釈しながら実行する
3.中間言語方式
JAVA
(c)高級言語(ふつうのプログラミング言
語のこと)
1.高水準言語(コンパイラ方式)
ソースプログラム
コンパイラ
(文法上の誤りをチェック)
オブジェクトプログラム
I/Oなどのライブラリ
バイナリプログラム
Javaの実行過程
Java のソースプログラム
クラスファイル(中間言語)
インタプリタA
機械 A
インタプリタB インタプリタC
機械B
機械C
高水準言語の実行のされ方
高水準言語プログラム
コンパイラ
中間言語
プログラム
コンパイラ
バイナリプログラム
仮想機械
プログラム
コンピュータハードウェア
インタプリタ
プログラム