情報とコンピュータ 静岡大学工学部 安藤和敏 2004.11.22.

Slides:



Advertisements
Similar presentations
プログラミング Ⅱ 第2回 第1回(プログラミングⅠの復 習) の解説. プログラムの作り方 いきなり完全版を作るのではなく,だんだ んふくらませていきます. TicTa cToe1.
Advertisements

情報とコンピュータ 静岡大学工学部 安藤和敏 1章 プログラミング入門 ― 決定木のコーディング.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公
初年次セミナー 第8回 データの入力.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
情報とコンピュータ 静岡大学工学部 安藤和敏
Fortran と有限差分法の 入門の入門の…
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
データ構造とアルゴリズム 第10回 mallocとfree
数値計算及び実習 第3回 プログラミングの基礎(1).
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
C言語 配列 2016年 吉田研究室.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
数値計算及び実習 第7回 プログラミングの基礎(5).
情報処理Ⅱ 2005年12月9日(金).
情報科学1(G1) 2016年度.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
第4回放送授業.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
初年次セミナー 第2回 文字の出力.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
整数データと浮動小数データ 整数データと浮動小数データの違い.
繰り返し計算 while文, for文.
Borland Delphi 6 でビジュアルプログラミング
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
情報とコンピュータ 静岡大学工学部 安藤和敏
情報とコンピュータ 静岡大学工学部 安藤和敏
情報とコンピュータ 静岡大学工学部 安藤和敏
第7回 プログラミングⅡ 第7回
情報とコンピュータ 静岡大学工学部 安藤和敏
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
情報基礎Ⅱ (第11回) 月曜4限 担当:北川 晃.
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
情報基礎Ⅱ (第5回) 月曜4限 担当:北川 晃.
第2回課題 配布した通り.氏名・学生番号を忘れないこと.
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
情報とコンピュータ 静岡大学工学部 安藤和敏
Cプログラミング演習資料.
データ構造とアルゴリズム 第11回 リスト構造(1)
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
ポインタとポインタを用いた関数定義.
情報とコンピュータ 静岡大学工学部 安藤和敏
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
情報処理基礎 2006年 6月 29日.
ループだよ!難しいよ! 第5章 while(ループ);.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
Cプログラミング演習資料.
第10回 関数と再帰.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
情報処理Ⅱ 小テスト 2005年2月1日(火).
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミング 3 ポインタ(1).
情報とコンピュータ 静岡大学工学部 安藤和敏
Presentation transcript:

情報とコンピュータ 静岡大学工学部 安藤和敏 2004.11.22

4章 トップダウンプログラミング, サブルーチン, データベースの応用 内部変数を持つサブルーチン 配列を引数とするサブルーチン サブルーチン間通信の例

Pascalにおけるサブルーチンの定義 プログラムの中に という一文を入れるだけで右の4行が画面に表示される. procedure Byline; begin writeLn('-----------------------------'); writeLn(' This program is written by '); writeLn(' Lady Emily Dunsmore '); end; プログラムの中に Byline; という一文を入れるだけで右の4行が画面に表示される. ----------------------------- This program is written by Lady Emily Dunsmore

サブルーチン呼び出し 主プログラムの中に入れられた という文は,サブルーチン呼び出しと呼ばれる. program FirstSubrutine(input, output); var ;{変数宣言} procedure Byline; begin writeLn('-----------------------------'); writeLn(' This program is written by '); writeLn(' Lady Emily Dunsmore '); end; Byline; … end. 主プログラムの中に入れられた Byline; という文は,サブルーチン呼び出しと呼ばれる.

引数を持つサブルーチン procedure Byline2(var name: string); begin writeLn('-----------------------------'); writeLn(' This program is written by '); writeLn(' ',name); end; name という新しい変数は,出力したい名前(が格納されているメモリ中の記憶領域を)指し示す. このような変数は,サブルーチンの仮引数と呼ばれる. 仮引数の宣言は,サブルーチン名の後に括弧に入れておく.

プログラムSecondSubrutine program SecondSubrutine(input, output); var n1,n2,n3: string; procedure Byline2(var name: string); begin writeLn('-----------------------------'); writeLn(' This program is written by '); writeLn(' ',name); end; n1 := 'Kazutoshi Ando'; n2 := 'Kenjiro Takayanagi'; Byline2(n2); Byline2(n1); end. Byline2の呼び出しにおいて,サブルーチンに渡されているn1とn2は,実引数と呼ばれる.

SecondSubrutine実行の状況 program SecondSubrutine(input, output); var n1,n2: string; procedure Byline2(var name: string); begin writeLn('-----------------------------'); writeLn(' This program is written by '); writeLn(' ',name); end; n1 := 'Kazutoshi Ando'; n2 := 'Kenjiro Takayanagi'; Byline2(n2); Byline2(n1); end. n1 Kazutoshi Ando n2 Kenjiro Takayanagi name ?

プログラムThirdSubrutine program ThirdSubrutine(input, output); var n1: string; procedure Byline2(var name: string); {省略} procedure Getname(var authorname: string); begin writeLn('Type your name.'); readLn(authorname); end; GetName(n1); Byline2(n1); end.

ThirdSubrutine実行の状況 program ThirdSubrutine(input, output); var n1: string; procedure Byline2(var name: string); {省略} procedure Getname(var authorname: string); begin writeLn('Type your name.'); readLn(authorname); end; Getname(n1); Byline2(n1); end. n1 Kazutoshi Ando name ? authorname ?

プログラムThirdSubrutine1 program ThirdSubrutine1(input, output); var n1, n2: string; procedure Byline2(var name: string); {省略} procedure Getname(var authorname: string); begin writeLn('Type your name.'); readLn(authorname); end; GetName(n1); Byline2(n2); end.

ThirdSubrutine1実行の状況 program ThirdSubrutine1(input, output); var n1, n2: string; procedure Byline2(var name: string); {省略} procedure Getname(var authorname: string); begin Getname(n1); Byline2(n2); end. n1 Kazutoshi Ando n2 name ? authorname ?

内部変数を持つサブルーチン サブルーチンの仮引数は,記憶場所をもたないが,サブルーチンの内部で記憶場所を必要とする場合がある. サブルーチンの内部で,記憶場所を持つ変数を使う方法を以下に示す.

内部変数を持つサブルーチン var x, m, y, z3, num1: integer; begin ... z3 := xの階乗 y := mの階乗 num1 := yの階乗 end.

内部変数を持つサブルーチン Program Factorial2(input, output); var x, m, y, z3, y, num1: integer; Factorial(var out, n: integer); {後で} begin ... Factorial(z3, x); {z3 := xの階乗} Factorial(y, m); {y := mの階乗} Factorial(num1, y); {num1 := yの階乗} end. 計算結果 入力

プログラム Factorial program Factorial(input, output); var i, n, product: real; begin readln(n); product := 1; i :=1; while i <= n do product := product * i; i := i + 1; end; writeLn(n:8:2,'の階乗は,',product:8:2,'です.'); end.

サブルーチンFactorial procedure Factorial(var out, n: integer); var i: integer; begin out := 1; i := 1; while i <= n do out := i * out; i := i + 1; end; 内部変数の宣言

サブルーチンPower procedure Power(var out, a, n: integer); var i: integer; begin out := 1; i := 1; while i <= n do out := out * a; i := i + 1; end; 内部変数の宣言

プログラム Factorial2 program Factorial2(input, output); var n0, product: integer; procedure Factorial(var out, n: integer); {省略} begin n0 := 10; Factorial(product, n0); writeLn(n0,'の階乗は,',product,'です.'); end.

サブルーチン内に現れる変数について,この本で用いられる規則 サブルーチン内に現れる全ての変数は,以下の2種類に限る そのサブルーチンの仮引数 そのサブルーチンの内部変数

プログラム Factorial3 program Factorial3(input, output); var i, n0, product: integer; procedure Factorial(var out, n: integer); { var i: integer; 内部変数を使わない} begin {前と同じなので省略} end; i:=100; n0 := 10; Factorial(product, n0); writeLn(n0,'の階乗は,',product,'です.'); writeLn(' i = ', i); end.

配列を引数とするサブルーチン サブルーチンは,配列を仮引数として扱うこともできる. ここでは,(配列に記憶されている)数列の総和を求めるプログラムを例にとって説明する. プログラムは,整数を読み込む ReadArray と読み込んだ整数を全て足し合わせる AddArray の2つの手続きを用いる. integerarray100という型が, type integerarray100 = array[1..100] of integer; と宣言されていると仮定する.

サブルーチンReadArray procedure ReadArray(var n: integer; var B: integerarray100); var i: integer; begin writeLn('How many entries?'); readLn(n); i := 1; while i<=n do writeLn('Input entry ',i); readln(B[i]); i := i+1; end;

サブルーチンAddArray procedure AddArray(var n: integer; var C: integerarray100; var answer: integer); var i: integer; begin answer := 0; i := 1; while i <= n do answer := C[i] + answer; i := i+1; end;

プログラム ReadAddArray program ReadAddArray(input, output); type integerarray100 = array[1..100] of integer; var n, answer: integer; A: integerarray100; procedure ReadArray(...); procedure AddArray(...); begin writeLn('Read:'); ReadArray(n,A); writeLn('Add up.'); AddArray(n,A,answer); writeLn('The answer: ',answer); end.

レポートについて 課題:次の(1)か(2)のどちらかを選択しなさい.  (1)前回のレポート「あなたが興味のある事柄に関して決定木を作り,それをプログラムに書け.」のプログラムを,サブルーチンを用いて単純化せよ.(ヒントは,p. 153の練習問題4にある.) ただし,前回のレポートで提出した決定木の内容があまりにも陳腐である場合は,プログラムだけではなく,決定木も新たに考え直して欲しい.  (2)これまで学んだことを使って,何か意味のあるプログラムを作れ. 提出方法(1):決定木を記述した Microsoft Word ファイル,及び,Pascal のプログラム(ソースファイル)をEメールに添付して送信しなさい. 提出方法(2):プログラムの説明が書かれた文書(MS Word),及び,Pascal のプログラム(ソースファイル)をEメールに添付して送信しなさい. Eメールの宛先は,ic@coconut.sys.eng.shizuoka.ac.jp Eメールの送信アドレスは,大学から配布されたものを用いること. Eメールの件名には,学籍番号と氏名,及び,選んだ課題((1)または(2))を記載すること. 提出期限は,11月30日(火)17:00 までである.