オブジェクト指向言語論 第三回 知能情報学部 新田直也.

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

関数 C 言語では、関数を組み合わせてプログラムを構成する
オブジェクト指向言語論 知能情報学部 新田直也.
情報処理Ⅱ 2007年12月17日(月).
プログラミング論 I 関数の再帰呼び出し
プログラミング言語論 理工学部 情報システム工学科 新田直也.
情報処理Ⅱ 2005年12月9日(金).
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
第4回放送授業.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
プログラミング論 ファイル入出力
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング2 関数の再帰呼び出し
アルゴリズムとデータ構造 補足資料5-2 「サンプルプログラムsetop.c」
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
プログラミング論 ファイル入出力
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
第5回放送授業.
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
オブジェクト指向プログラミングと開発環境
再帰的手続き.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
プログラミング 3 2 次元配列.
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
第10回 関数と再帰.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング言語論 プログラミング言語論 演習5 解答と解説 演習5 解答と解説 1 1.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
プログラミング演習I 補講用課題
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

オブジェクト指向言語論 第三回 知能情報学部 新田直也

最小プログラミング言語 構造化プログラミングから手続き呼び出しを取ったもの. Whileプログラム(D.M.Ritchie, C言語の作者) 単純だが,どんな計算でもできることが理論的に証明されているプログラム言語 (チューリングマシンと等価,計算万能) プログラム理論の研究で使われる. 例) 表示意味論(denotational semantics),プログラム検証 制御構造として,連接,判断(if文),前判定反復(while文のみを持つ) →構造化定理参照

Whileプログラムの構文 自然数(0を含む)を表す有限個の変数を持つ. 代入文は以下の3通りのみ. 条件式は以下の1通りのみ. 変数 = 0; 変数 = 変数; 変数++; (変数 = 変数 + 1;) 条件式は以下の1通りのみ. 変数 < 変数 プログラムは再帰的に以下のように構成される. プログラム ::= 代入文 または プログラム プログラム または if (条件式) { プログラム } else { プログラム } または while (条件式) { プログラム }

Whileプログラムの例(加算) z = x + y の計算 z = x; c = 0; while (c < y) { z++; }

Whileプログラムの例(減算) z = y - x の計算 z = 0; c = x; while (c < y) { z++; }

Whileプログラムの例(乗算) z = x * y の計算 z = 0; c = 0; while (c < y) { d = 0; while (d < x) { z++; d++; } c++;

手続き 手続き:一連の処理を行う機能単位. FORTRAN, Basic --- サブルーチン Pascal --- プロシージャ(手続き) C, C++ --- 関数 Java --- メソッド 名前をつけることができ,その名前でさまざまな場所から何度でも呼び出すことができる(処理の再利用) . C言語では関数として扱われる.

手続きの有効性 z = x * y を行うWhile プログラム z = 0; c = 0; while (c < y) { int plus(int z, int x) { int d = 0; while (d < x) { z++; d++; } return z; main() { int z = 0; int c = 0; while (c < y) { z = plus(z, x); c++; z = 0; c = 0; while (c < y) { d = 0; while (d < x) { z++; d++; } c++;

手続きの定義と呼び出し int plus(int z, int y) { int d = 0; while (d < y) { } return z; main() { int z = 0; int c = 0; while (c < y) { z = plus(z, y); c++; 関数plusの定義(関数宣言) 関数plusの呼出し

手続きの引数と戻り値 int plus(int z, int y) { int d = 0; while (d < y) { z++; } return z; main() { int z = 0; int c = 0; while (c < x) { z = plus(z, x); c++; 仮引数:定義側の引数 戻り値 実引数:呼出し側の引数

手続きの定義と呼び出しの考え方(1/3) 高校の数学を思い出そう. 関数f(x)が以下のように定義されているとき, f(x) = x2+3x+2 f(3)の値は? f(5)の値は? これらの値が計算できるのなら,プログラミング言語における手続き呼び出しの仕組みもわかるはず. int f(int x) { return (x * x + 3 * x + 2); } main() { printf(“%d, %d\n”, f(3), f(5));

手続きの定義と呼び出しの考え方(2/3) 数学の関数とプログラミング言語の関数の考え方は基本的に同じ. f(x) = x2+3x+2 f(3)の3およびf(5)の5は,実引数である. 関数呼び出し時に実引数の値が仮引数に代入される. 関数呼び出しは値を持ち,計算結果がその値になる. 関数定義(関数宣言) 関数呼び出し(値は20になる) 関数呼び出し(値は42になる)

手続きの定義と呼び出しの考え方(3/3) より複雑な場合も同様. 内側の式から先に評価される. f(x) = x2+3x+2 f(f(3))の値は? 内側の式から先に評価される. f(3) = 32+3*3+2 = 20 f(f(3)) = f(20) = 202+3*20+2 = 462

手続きの型 int plus(int z, int *y) { int d = 0; while (d < *y) { z++; } return z; main() { int z = 0; int c = 0; while (c < y) { z = plus(z, &x); c++; すべての関数は型を持つ. 関数定義と呼出し側で型が一致 してなければならない.

前方参照とプロトタイプ宣言 プロトタイプ宣言 後方参照 前方参照 int plus(int z, int x) { int d = 0; while (d < x) { z++; d++; } return z; main() { int z = 0; int c = 0; while (c < y) { z = plus(z, x); c++; int plus(int, int); main() { int z = 0; int c = 0; while (c < y) { z = plus(z, x); c++; } int plus(int z, int y) { int d = 0; while (d < y) { z++; d++; return z; プロトタイプ宣言 後方参照 前方参照

再帰呼び出し(1) (もちろん)関数の中で関数を呼出すことが可能. main() { printf(“%d\n”, max3(12, 15, 11)); } int max3(int x, int y, int z) { return max2(max2(x, y), z); } int max2(int x, int y) { if (x >= y) return x; else return y; }

再帰呼び出し(2) 関数の中で自分自身を呼び出すとどうなるか? int factorial(int x) { if (x == 1) { return 1; } else { return x * factorial(x – 1); } }