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

Slides:



Advertisements
Similar presentations
情報処理基礎 A ・ B 第 5 回 プログラミング入門 操作の自動化を実現する仕組み. 2004/11/16 ・ 17 情報処理基礎 A ・ B 2 本日の内容 処理の自動化~プログラムの概念 ハードウェアとソフトウェア プログラミング言語 Excel における処理の自動化 入力支援の機能 分析ツール.
Advertisements

オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
ループで実行する文が一つならこれでもOK
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
FORTRAN 科学技術計算用 数値演算精度を重視したシステム K=0 DO 10 I=0,N,1 K=K+I 10 CONTINUE
数値計算及び実習 第3回 プログラミングの基礎(1).
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
オブジェクト指向言語論 知能情報学部 新田直也.
コンパイラ 第9回 コード生成 ― スタックマシン ―
C言語 配列 2016年 吉田研究室.
2012年度 計算機システム演習 第4回 白幡 晃一.
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
§3.3 プログラミング 第10回 今日の目標 高級言語のプログラムを実行するまでの過程を示せる インタープリタの仕組みを説明できる
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
プログラムはなぜ動くのか.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
2016年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
関数 関数とスタック.
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
コンピュータの原理 1E17M053-9 奈良 皐佑 1E17M070-7 師尾 直希        1E17M078-6 渡邊 惇.
情報処理3 第5回目講義         担当 鶴貝 達政 11/8/2018.
§3.3 プログラミング 第10回 今日の目標 高級言語のプログラムを実行するまでの過程を示せる インタープリタの仕組みを説明できる
プログラミング言語入門 手続き型言語としてのJava
情報の科学的 な理解(2) 情報科教育法 8回目 2005/6/4 太田 剛.
プログラミング入門 電卓を作ろう・パートIV!!.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
プログラミング言語入門.
コンピュータに計算させる命令を確かめよう!
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
VBで始めるプログラミング こんにちは、世界。 /28 NARC.
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
プログラムの基本構造と 構造化チャート(PAD)
制御文の役割と種類 IF文 論理式と関係演算子 GO TO文
プログラミング言語入門 2013 (C言語 初級) 演習期間 担当 参考資料 採点 10/24 - 1/23 (全10回) 松澤,鈴木,児玉
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
プログラミング演習I 2003年4月30日(第3回) 木村巌.
コンパイラ 2012年10月1日
基礎プログラミング演習 第6回.
コンピュータアーキテクチャ 第 2 回.
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
プログラミングⅡ 第2回.
2017年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
コンピュータアーキテクチャ 第 2 回.
ウェブデザイン演習 第6回.
情報処理Ⅱ 第7回 2004年11月16日(火).
第6回放送授業.
コンパイラ 2012年10月11日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
2014年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
1.2 言語処理の諸観点 (1)言語処理の利用分野
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
6.3 インタプリタ (1)インタプリタ(interpreter)とは
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

手続き型の例 例: 正の整数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

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

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

八十八夜問題の解法手順 <残り日数> ← 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月"<残り日数>"日"と表示

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

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

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

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

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

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

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

アセンブリ言語 --- 命令の例 (テキスト 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

1から10までの和のアセンブリプログラム アドレス 命令 意味 高水準言語 1001 load 2001 AC ← 2001 sum ← sum+1 1002 add 2002 AC ← AC + 2002 1003 store 2001 2001 ← AC 1004 load 2002 AC ← 2002 i ← i - 1 1005 subtract 2003 AC ← AC - 2003 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

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

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

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

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