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

Slides:



Advertisements
Similar presentations
P2P 技術を応用した 分散システムの排他制御機構の試作 九州工業大学 情報科学センター 山之上 卓.
Advertisements

プログラミング Ⅱ 第2回 第1回(プログラミングⅠの復 習) の解説. プログラムの作り方 いきなり完全版を作るのではなく,だんだ んふくらませていきます. TicTa cToe1.
1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
平成 19 年度卒業研究 PASCAL コンパイラについ て 福永研究室 山川 武志 畑中 陽介 佐藤 遼.
第10章 マイコン機器とマイコンプロ グラム ● マイコン回路とプログラミン グ ● サーボモータ,直流モータ制 御以外のプログラム マイコンでどのようなことができるのか? モータのマイコン制御を使いこなす!
英作文の コツ!(初級編) ①主語を見分ける。 ②主語に合う動詞を見つける。 はじまり.
Fortran と有限差分法の 入門の入門の…
第十七か ぐちとうわさ話.
東京工科大学 コンピュータサイエンス学部 亀田弘之
VBAを通して プログラム言語の基本構造を学ぶ
12.3,E,-15, 12.3,E5,+,=, >,<,…,
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
データ構造とアルゴリズム 第10回 mallocとfree
数値計算及び実習 第3回 プログラミングの基礎(1).
基礎プログラミングおよび演習 第9回
プログラミング序論演習.
情報とコンピュータ 静岡大学工学部 安藤和敏
C言語 配列 2016年 吉田研究室.
2012年度 計算機システム演習 第4回 白幡 晃一.
情報科学1(G1) 2016年度.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
プログラミング論 II 電卓,逆ポーランド記法電卓
整数データと浮動小数データ 整数データと浮動小数データの違い.
繰り返し計算 while文, for文.
実例で学ぶプログラミング VBAを用いて簡単なゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
プログラミング演習 バージョン1 担当教員:綴木 馴.
Borland Delphi 6 でビジュアルプログラミング
プログラミング言語入門 手続き型言語としてのJava
東京工科大学 コンピュータサイエンス学部 亀田弘之
本時の目標 「簡単なプログラム言語の意味を理解し、マクロ機能を使って簡単なプログラムを作ることができる。」
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
地域情報学演習 VBAプログラミング 第3回 2017年10月24日
第10章 これはかなり大変な事項!! ~ポインタ~
Missing game:English なくなったのは?:日本語
情報とコンピュータ 静岡大学工学部 安藤和敏
Structured programming
情報とコンピュータ 静岡大学工学部 安藤和敏
情報とコンピュータ 静岡大学工学部 安藤和敏
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
情報とコンピュータ 静岡大学工学部 安藤和敏
Today’s Goal: Ask whether your friend did yesterday or not
プログラムの制御構造 配列・繰り返し.
COBOLプログラムの概観 プログラミング資料.
アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
オブジェクト指向プログラミングと開発環境
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報とコンピュータ 静岡大学工学部 安藤和敏
プログラムの基本構造と 構造化チャート(PAD)
Cプログラミング演習資料.
情報とコンピュータ 静岡大学工学部 安藤和敏
データ構造とアルゴリズム 第11回 リスト構造(1)
ファイルの読み込み #!/usr/bin/env perl #Perlスクリプトの指定 open(FILE, "food.txt");
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
第6回レポート解説 条件1 条件2 条件3 月の入力 月、日、曜日の表示 日の入力 曜日の入力
データ構造とアルゴリズム (第3回) 静岡大学工学部 安藤和敏
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
情報とコンピュータ 静岡大学工学部 安藤和敏
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
コンパイラ 2012年10月11日
情報とコンピュータ 静岡大学工学部 安藤和敏
OPEN文、READ文、PERFORM文
Cプログラミング演習資料.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
情報とコンピュータ 静岡大学工学部 安藤和敏
Presentation transcript:

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

4章 トップダウンプログラミング, サブルーチン, データベースの応用 サブルーチン間通信の例 データベースのための事実の記憶と出力 質問の表示と答えの検索 データベースプログラムの組み立てと注釈の付加

プログラムCommunication1 program communication1(input, output); procedure double; var r1, r2: real; begin r2 := 2 * r1; end; double; end.

プログラムCommunication1 program communication1(input, output); procedure double; var r1, r2: real; begin r2 := 2 * r1; end; double; end. communication1 double r1 2* r2

プログラムCommunication2 program communication2(input, output); procedure double; var r1, r2: real; begin readLn(r1); r2 := 2 * r1; writeLn(r2); end; double; end.

プログラムCommunication2 program communication2(input, output); procedure double; var r1, r2: real; begin readLn(r1); r2 := 2 * r1; writeLn(r2); end; double; end. communication2 double r1 2* r2

プログラムCommunication3 program communication3(input, output); var num: real; procedure double(var x: real); r1, r2: real; begin r1 := x; r2 := 2 * r1; writeLn(r2); end; readLn(num); double(num); end.

プログラムCommunication3 program communication3(input, output); var num: real; procedure double(var x: real); r1, r2: real; begin r1 := x; r2 := 2 * r1; writeLn(r2); end; readLn(num); double(num); end. communication3 num x r1 2* r2 double

プログラムCommunication4 program communication4(input, output); var num, ans: real; procedure double(var x, y: real); r2: real; begin r2 := 2 * x; y := r2; end; readLn(num); double(num,ans); writeLn(ans); end.

プログラムCommunication4 program communication4(input, output); var num, ans: real; procedure double(var x, y: real); r2: real; begin r2 := 2 * x; y := r2; end; readLn(num); double(num,ans); writeLn(ans); end. communication4 num ans x y 2* r2 double

プログラムCommunication5 program communication5(input, output); var num, ans: real; procedure double(var x, y: real); begin y := 2 * x; end; readLn(num); double(num,ans); writeLn(ans); end.

プログラムCommunication5 program communication5(input, output); var num, ans: real; procedure double(var x, y: real); begin y := 2 * x; end; readLn(num); double(num,ans); writeLn(ans); end. communication5 num ans 2* x y double

プログラムCommunication6 program communication6(input, output); var num: real; procedure double(var x: real); begin x := 2 * x; end; readLn(num); double(num); writeLn(num); end.

プログラムCommunication6 program communication6(input, output); var num: real; procedure double(var x: real); begin x := 2 * x; end; readLn(num); double(num); writeLn(num); end. communication6 num 2* x double

データベースプログラム ダンスモア家のコンピュータの中にあったような情報の蓄積は,データベースと呼ばれる. データベースに情報を記憶させ,データベースを検索して,質問に答えるプログラムは,データベースプログラムと呼ばれる. 我々は,データベースプログラムを作ろうとしている.

問題を扱いやすくできるように表現する(1) 家族の情報は,一連の事実として平叙文で記憶されているとする. メイソン氏は3時に来た. (Mr. Maison visited at 3:00 P.M.) メイソン氏は薬剤師である. (Mr. Maison is a chemist.)

事実の構造化 (英文の)事実の大部分は,次の形である. (Mr. Maison) (visited at) (3:00 P.M.) (名詞句) (相互関係) (名詞句) noun1 relation noun2 (Mr. Maison) (visited at) (3:00 P.M.) (Mr. Maison) (is) (a chemist.)

事実の記憶 var noun1, relation, noun2: string; begin noun1 := ’Mr. Mason’; relation := ’is’; noun2 := ’a chemist.’; end. noun1 relation noun2 Mr. Mason is a chemist.

事実の読み込み var noun1, relation, noun2: string; begin readLn(noun1); readLn(relation); readLn(noun2); end. Mr. Mason is a chemist. noun1 relation noun2 Mr. Mason is a chemist.

事実を記憶するための配列 ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ type stringarray100 = array[1..100] of string; var noun1A, relationA, noun2A: stringarray100; noun1A relationA noun2A 1 Mr. Mason 1 is 1 a chemist. 2 The professor 2 visited at 2 3:00 P.M. 3 3 3 ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ 100 100 100 stringarray100 の型定義がテキストと異なることに注意!

last (最後の事実の場所を表す) ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ var last: integer; noun1A relationA noun2A 1 Mr. Mason 1 is 1 a chemist. 2 The professor 2 visited at 2 3:00 P.M. 3 3 3 ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ 100 100 100 last 2

プログラム Database1 program Database1(input, output); type stringarray100 = array[1..100] of string; var command: string; noun1A, relationA, noun2A: stringarray100; last: integer; procedure help; (省略) procedure InputFact; (省略) procedure PrintFacts; procedure Find;

プログラム Database1 begin noun1A[1] := 'Lord Dunsmore'; relationA[1] := 'is married to'; noun2A[1] := 'Lady Dunsmore.'; noun1A[2] := 'The gardener'; relationA[2] := 'is married to'; noun2A[2] := 'the maid.'; last := 2; command := 'start'; while command <> 'q' do write('Command:'); readLn(command); if command = 'f' then Find; if command = 'help' then help; if command = 'i' then InputFact; if command = 'p' then PrintFacts; end; writeLn('終了しました.'); end.

入力ルーチン(InputFact) 入力ルーチン:   メモリ内に新しい記憶場所を設定する.   新しい事実を読み込んで,そこに記憶す   る. 入力

サブルーチンInputFact(1) procedure InputFact; begin writeLn('Input a fact. Type three fields on sequential lines.'); last := last + 1; readLn(noun1A[last]); readLn(relationA[last]); readLn(noun2A[last]); end;

サブルーチンInputFact(2) procedure InputFact(var n1,r,n2:stringarray100; var last:integer); begin writeLn('Input a fact. Type three fields on sequential lines.'); last := last + 1; readLn(n1[last]); readLn(r[last]); readLn(n2[last]); end;

出力ルーチン(PrintFacts) 出力ルーチン:   事実が入っている各記憶場所ごとに,   その内容を出力する. 出力

検索ルーチン(Find) 検索ルーチン: 検索 ユーザの質問を読む. 事実が入っている各記憶場所調べて, 質問-事実比較器を呼び出す.   ユーザの質問を読む.   事実が入っている各記憶場所調べて,    質問-事実比較器を呼び出す.    比較器が「answer」と報告すれば,      その事実を出力する. 検索 質問-事実 比較器

サブルーチンFind procedure Find(var n1, r, n2: stringarray100; var last: integer); var noun1, relation, noun2, result: string; i: integer; begin writeLn('Give the query. ‘); writeLn('Type three fields on sequential lines.'); readLn(noun1);readLn(relation);readLn(noun2); writeLn('THE RELATED FACTS:'); i := 1; while i<=last do QFCompare(noun1,relation,noun2,n1[i],r[i],n2[i],result); if result = 'answer' then writeLn(n1[i],r[i],n2[i]); i := i+1; end;

サブルーチンQFCompare(1) procedure QFCompare(var Qnoun1, Qrel, Qnoun2, Fnoun1, Frel, Fnoun2, an: string); begin if (Qnoun1 = Fnoun1) and (Qrel = Frel) and (Qnoun2 = Fnoun2) then an := 'answer'; end else an := 'no'; end;

サブルーチンQFCompare(2) procedure QFCompare(var Qnoun1, Qrel, Qnoun2, Fnoun1, Frel, Fnoun2, an: string); begin if ((Qnoun1 = '?') or (Qnoun1 = Fnoun1)) and (Qrel = Frel) and (Qnoun2 = Fnoun2) then an := 'answer'; end else an := 'no'; end;

注釈(コメント)の付加 コメント:{ } 囲まれた部分は,コメント文(注釈文)と呼ばれ,コンパイラはコメントを完全に無視する. コメント:{ } 囲まれた部分は,コメント文(注釈文)と呼ばれ,コンパイラはコメントを完全に無視する. コメントの目的:後でプログラムを読んだり変更する人のため. コメントには以下の3種類がある. プログラムヘッダ. コードブロックヘッダ. ラインコメント.

関係データベース この章で作ったデータベースは関係データベースと呼ばれるものの一種である. 我々のデータベースにおける各事実は,3つのフィールドを持つが,一般のデータベースはもっと多くの(数十の)フィールドを持つ. 我々のデータベースには推論の機能はない. (Jill) (is a sister of) (Nancy.) (Nancy) (is a sister of) (Barbara.)

データベースの推論機能 我々のデータベースには推論の機能はない. (Jill) (is a sister of) (Nancy.) (Nancy) (is a sister of) (Barbara.) という2つの事実がデータベースに入っているならば, (?) (is a sister of) (Barbara.) という質問には,Jill と Nancy と言う答えを期待したいところであるが,そう答えてくれない. 商用のデータベースシステムではこのような推論機能が実現されている.

今日はおしまい p. 167, 174の練習問題あるいは,この章のその他の練習問題を自力でやってみることは,この章の話を理解できたかどうかの確認になるであろう.