Presentation is loading. Please wait.

Presentation is loading. Please wait.

第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1.

Similar presentations


Presentation on theme: "第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1."— Presentation transcript:

1 第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1

2 5.1 計算とその記述方法 計算の例: 計数(counting) 計算のやり方 計数のやり方の種類 ある集合Aの要素数を求める
取り出し型 要素を1つ1つ,指折り数えていくやり方 分割型 自分の手に余る仕事を下請けに出していくやり方

3 計算の方法 - 分割型 集合に対して用意されている処理 計算 空か,要素が1つだけであるかを判定する 空でない2つの集合に分割する
Aが空なら<答>は0,要素数が1なら<答>は1 そうでなければ AをBとCに分割(BもCも空集合ではない) <答> = Bの要素数 + Cの要素数

4 計算の方法の図 取り出し型 分割型

5 5.1.2 計算の記述 (1)変数と条件判断 a:変数(型が決まっている) 代入
  代入 a=a+1 は等式ではなく、代入を表す。特に a:=a+1 と書くこともある。 5

6 値を覚えておく”もの(変数には型がある:整数型、実数型、文字型など) -代入(assignment) 変数に値を設定する操作,表記は
変数(variable) 値を覚えておく”もの(変数には型がある:整数型、実数型、文字型など) -代入(assignment) 変数に値を設定する操作,表記は 変数名 := 式、変数名←式 など   a:変数としてそこに a+b を代入する   a ← a+b a:=a+b a=a+b など (a:=a+1 は等式ではなく、代入を表す。) 6 6

7 A 添え字付き変数(配列) A[8] : 文字 と定義すると A[3] の値は 1 A[8] の値は L 1 2 3 4 5 6 7 8
A P x % r H A L A[3] の値は 1 A[8] の値は L 7 7

8 条件Cが成立すればAを実行する。そうでなければ何もせず次に進む
条件判断 if (条件C) then (A) endif 条件Cが成立すればAを実行する。そうでなければ何もせず次に進む (b) if (条件C) then (A) else (B) endif 条件Cが成立すればAを実行する。そうでなければ、Bを実行し、次に進む 8

9 x=あなたの体重(kg); y=あなたの身長(cm); if ( x> ((y-100)×0.9) then print 太りすぎです
endif else print 正常です 9

10 (b) if-then-else 文 (a) if-then 文 if 条件が成立するか? then 実行文を実行する
YES NO if 条件が成立するか? YES NO then 実行文1を 実行する else 実行文2を 実行する 10

11 i < 10000 ? while(i<10000) i = 2i, k=k+1 (2) 繰り返し(while文)
No Yes i = 2i, k=k+1 k を出力する 11

12 -------------------------------------------------------------------
While 文の例 (反復処理の例)  2 のk 乗がはじめて 以上になる k を求める i, k: integer; i=2; k=0; while (j<10000) do begin i:=2*i; k=k+1; end write(k) 12

13 手続き型の例 例: 正の整数a, b,a/b の商q,余りr を求める 計算の手順 計算の記述 r ← a q ← 0
引いた回数を商,残りを余りとする 計算の記述    r ← a    q ← 0    while r ≧ b do    r ← r - b    q ← q + 1    done 13 13

14 計算の記述 問題 考え方 今年の八十八夜(立春から数えて88日目)は何月何日か.ただし今年の立春は2月4日であり,今年は平年である.
2月4日の87日後は"2月をはみ出す" → 2月の残り日数( = 24日)を引く( = 63日) 3月63日は3月を越す → 31日を引く( = 32日) 4月32日は4月を越す → 30日を引く( = 2日) 5月2日は5月に収まる!→ 最終的な答えは5月2日

15 計算の記述 - より明確に 2月4日の87日後 91 > 28(2月の日数) 63 > 31(3月の日数)
<残り日数> = → 2月91日 91 > 28(2月の日数) <残り日数> = 月の日数 → 3月63日 63 > 31(3月の日数) <残り日数> = 月の日数 → 4月32日 32 > 30(4月の日数) <残り日数> = 月の日数 → 5月2日 2 < 31(5月の日数)なので計算終了

16 八十八夜問題の解法手順 <残り日数> ← 4+87 if <残り日数> > 28(2月の日数)
then <残り日数> ← <残り日数> - 28 if <残り日数> > 31(3月の日数) then <残り日数> ← <残り日数> - 31 if <残り日数> > 30(4月の日数) then <残り日数> ← <残り日数> - 30 if <残り日数> > 31(5月の日数) then (6月以降の処理) else "5月"<残り日数>"日"と表示 endif else "4月"<残り日数>"日"と表示 else "3月"<残り日数>"日"と表示 else "2月"<残り日数>"日"と表示

17 配列の例 例: daymonth [2] = 28 配列名 = daymonth 添え字 = 2  値 = 28

18 解法手順の改良 6月以降については"(6月以降の処理)"としか書いていない ”m(n月の日数)”という表現が何度も現れている
実際に6月以降の処理が必要になったときに正しい答えが求まる保証がない もっとすっきりと,12月まで対処できる方法は? ”m(n月の日数)”という表現が何度も現れている 例: 28(2月の日数) もっとすっきりと記述する方法は?

19 八十八夜問題の解法手順 - 改良版 <残り日数> ← 4+88 m ← 2
while <残り日数> > daymonth[m] do <残り日数> ← <残り日数> - daymonth[m] m ← m + 1 done ”<残り日数>と月の日数の比較を繰り返し行う”  手順を,”反復処理”と”配列”を使うことですっきりと記述することができた 19 19

20 5.3.2 プログラム言語処理系 機械語のプログラム(バイナリプログラムとも言う) 機械が直接実行できる
機械語のプログラム(バイナリプログラムとも言う) 機械が直接実行できる アセンブリ言語は、機械語に1対1に対応している。人間にとって意味の分かりやすい表現にしてある。 (最も原始的だが、処理速度が抜群に速い)   7.1.2 機械語レベルのプログラム例p.156図7.2に、詳しい記述がある アセンブラは、アセンブリ言語のプログラムを機械語に翻訳するソフト。 20

21 機械語とバイナリプログラム 機械語(machine language) 1) 機械(CPU)が直接実行する命令。
2) すべて2進数で決まったビット長をもつ。 3) 32ビットの計算機というときは、その機械語の ビット長が32であることを意味する。 機械語はそのままでは人間には読み書きできないので、プログラミング言語を用いる バイナリ(binary)プログラム コンピュータ(ハードウェア)がそのまま実行できる機械語で書かれたプログラム 通常 .exe という拡張子をつけてある。 21 21

22 プログラム言語 アセンブリ言語--- 機械語に同等 高級言語 人間が理解しやすい形でプログラムを読み書きできる言語
コンパイラ、インタープリターを使ってバイナリプログラムに変換する 高級言語の例: C言語,C++言語, LISP, COBOL, Prolog, Java, Pascal, BASIC 22 22

23 (b)アセンブリ言語(低級言語とは言わないが)
個々の機械語に英語のニックネームをつけて人間が使いやすくしたもので、ニーモニックとも呼ばれる。機械語に1対1に対応している。 アセンブリ言語のプログラムを機械語に翻訳するソフトをアセンブラという。 23

24 アセンブリ言語 --- 命令の例 (テキスト p.155)
種類 内容 意味 データ転送命令 load A store A アドレスAのデータを演算レジスタ(AC)に読み込む ACのデータをアドレスAに書き込む 計算命令 add A subtract A アドレスAのデータをACの値に加える アドレスAのデータをACの値から引く 分岐命令 jump A  jumpzero A アドレスAにプログラムの実行を移す ACのデータが0の場合,アドレスAにプログラムの実行を移す その他 write halt ACのデータを出力する プログラムの実行を停止する 24 24

25 1から10までの和のアセンブリプログラム アドレス 命令 意味 高水準言語 1001 load 2001 AC ← 2001
sum ← sum+1 1002 add 2002 AC ← AC 1003 store 2001 2001 ← AC 1004 load 2002 AC ← 2002 i ← i - 1 1005 subtract 2003 AC ← AC 1006 store 2002 2002 ← AC 1007 jumpzero 1009 条件分岐(ジャンプ) while i ≠ 0 1008 jump 1001 無条件ジャンプ 1009 1010 write 結果の出力 write(sum) 1011 halt プログラム停止 2001 変数(結果) sum ← 0 2002 10 変数( i の初期値) i ← 10 2003 1 定数 25 25

26 (c)高級言語(ふつうのプログラミング言語のこと)
1.高水準言語(コンパイラ方式) ソースプログラム   (文法上の誤りをチェック) バイナリプログラム コンパイラ オブジェクトプログラム I/Oなどのライブラリ 26

27 高級言語で書かれたプログラムを1行ずつ解釈しながら実行する 3.中間言語方式 JAVA
2. インタープリター方式 高級言語で書かれたプログラムを1行ずつ解釈しながら実行する 3.中間言語方式 JAVA 27

28 Javaの実行過程 Java のソースプログラム クラスファイル(中間言語) インタプリタA インタプリタB インタプリタC
         クラスファイル(中間言語) インタプリタA インタプリタB インタプリタC 機械 A 機械B 機械C 28

29 高水準言語の実行のされ方 高水準言語プログラム コンパイラ 中間言語 プログラム インタプリタ プログラム コンパイラ 仮想機械 プログラム
バイナリプログラム コンピュータハードウェア 29 29


Download ppt "第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1."

Similar presentations


Ads by Google