情報処理Ⅱ 2007年12月17日(月).

Slides:



Advertisements
Similar presentations
情報処理Ⅱ 第7回:2003年12月2日(火). 問題(授業がつまらない人のため に) ぷよ連結問題 前提 : フィールドを2次元 配列で定義し,各マスの 「ぷよ」を int 型の値で表現 する. ある地点を入力に取り,そ れと連結する「ぷよ」の個 数を求めよ. 消去できる「ぷよ」 (N 個以上 連結するぷよと,それに隣接する特.
Advertisements

情報処理Ⅱ 第1回 2006年10月6日(金).
アルゴリズムとデータ構造 第2回 線形リスト(復習).
Generic programming と STL
情報処理Ⅱ 2006年12月8日(金).
情報処理Ⅱ 第10回 2004年12月14日(火).
第13回構造体.
第12回構造体.
プログラミング演習(2組) 第12回
情報処理Ⅱ 2005年10月7日(金).
情報処理Ⅱ 2005年12月9日(金).
問題 1 フィボナッチ数列 xn は次で定義される。
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
情報処理Ⅱ 第9回 2004年12月7日(火).
プログラミング論 関数ポインタ と 応用(qsort)
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
関数の定義.
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
プログラミング 3 構造体(2).
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
第11回 プログラミングⅡ 第11回
プログラミング 4 整列アルゴリズム.
整数データと浮動小数データ.
情報処理Ⅱ 第14回 2006年1月23日(月).
アルゴリズムとデータ構造 2010年7月26日
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
コンパイラ 2011年10月20日
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
ポインタとポインタを用いた関数定義.
情報処理Ⅱ 2006年12月15日(金).
アルゴリズムとデータ構造1 2008年7月24日
情報処理Ⅱ 第2回 2006年10月13日(金).
第5回 プログラミングⅡ 第5回
高度プログラミング演習 (11).
情報処理Ⅱ 2006年12月22日(金).
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
情報処理Ⅱ 第7回 2004年11月16日(火).
情報処理Ⅱ 2005年10月28日(金).
情報処理Ⅱ 2007年12月3日(月) その1.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
情報処理Ⅱ 2007年2月2日(金).
プログラミング演習I 2003年6月11日(第9回) 木村巌.
情報処理Ⅱ 2005年12月16日(火).
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
第10回 関数と再帰.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
プログラミング 2 静的変数.
Presentation transcript:

情報処理Ⅱ 2007年12月17日(月)

本日の内容 関数,再帰,構造体を用いたプログラムの読解 ファレイ数列 両替

ファレイ数列 0より大きく1より小さい分数で,既約かつ分母が7以下のものを,小さいものから順に出力できるか? 「既約」なので,2/4 は出してはいけない. 3/7 と 2/5 って,どっちが大きい?? 再帰関数を使えば,すっきり書ける. 理論的には,「木の探索」と関係がある. farey.c

ファレイ数列の構成

ファレイ数列生成のプログラミング 分母の最大値をコマンドライン引数から取る. 再帰呼び出しをする関数print_numbersを定義する. 再帰関数を作るとき,最初に引数の意味・用途を決める! 引数は,a1/b1 < a2/b2 を満たす非負整数a1, b1, a2, b2と,分母の上限n.戻り値なし. a1/b1より大きくa2/b2より小さい分数で,既約かつ分母がn以下のものを,小さいものから順に出力する. mainから print_numbers(0,1,1,1,n); と呼び出す. 0/1より大きく1/1より小さい分数で,既約かつ分母がn以下のものを,小さいものから順に出力する.

両替問題の仕様(1) 両替機の両替部分をシミュレート(模倣)する. 入金に対して,どの紙幣・貨幣を何枚出せばいいかを出力する. 「崩す」(一万円札を千円札10枚にするなど)のは考えない. 金額に関する情報 一万円,五千円,千円の各紙幣(bill)の枚数 500円,100円,50円,10円,5円,1円の各硬貨(coin)の枚数 合計金額(amount) ⇒ 構造体のメンバ? ○ シミュレート,シミュレーション × シュミレート,シュミレーション 理由: 英語のつづりがsimulate, simulationだから. 100 100 100 100 500 50 10 10 10 5 5 5 5 moneychanger.c

両替問題の考え方 知りたい情報,行いたい操作 紙幣・貨幣がそれぞれ何枚ある(入金された,出金しないといけない)かを知る 合計金額を求める 両替する 両替前の「紙幣・貨幣の枚数の情報」に対して, 両替後の「紙幣・貨幣の枚数の情報」を求める

両替問題のプログラミング(1) 金銭構造体 struct money {  int bill_10000, bill_5000, bill_1000;  int coin_500, coin_100, coin_50, coin_10, coin_5, coin_1;  };

両替問題のプログラミング(2) 定義した関数 いずれの関数も,構造体ポインタを引数にとる void print_money(struct money *moneyp); 枚数と総額を出力する int calc_amount(struct money *moneyp); 総額を求める struct money *change_money(struct money *moneyp); 両替する いずれの関数も,構造体ポインタを引数にとる 関数内では,「moneyp->メンバ名」でアクセスする 「calc」は,「calculate (計算する)」という単語による.

プログラムの読み方(1) 定義/宣言/参照しているヘッダファイル・型・変数・関数の意味と関連付けを考えながら読む ⇒静的分析 変数に具体的な値を与える.各行でどんな処理が行われ,オブジェクト(メモリ)の中身がどのように変わっていくか考えながら読む ⇒動的分析 関連付けを考える際のアドバイス ・ライブラリ関数を使う際,どんなヘッダファイルをインクルードすべき(している)か? ・関数プロトタイプがあれば,関数の実体はどこで定義されているか? ・変数は,どこで宣言されているか? 有効範囲はどこからどこまでか? どこで初期化(宣言時かもしれないし,そうでないかもしれないし,&変数名による関数呼び出しの中で代入されるかもしれない)されているか? ・代入文の左辺と右辺の型は何か? 合っているか? 暗黙の型変換が起こるか? (実引数と仮引数の受け渡しでも,代入が行われることに注意する.)

プログラムの読み方(2) 技法(手段)に着目する ファレイ数列の問題では,再帰…全体と,その一部分とが相似関係になっている 両替問題では,グリーディ法(貪欲法)…1万円札から順に枚数を求める 再帰: http://ai6sys4.sys.wakayama-u.ac.jp/mod/resource/view.php?id=665 グリーディ法: http://itpro.nikkeibp.co.jp/article/COLUMN/20070914/281936/?P=3

IDE Integrated Development Environmentの略, 統合開発環境とも呼ばれる. ハードディスクのIDEは,Integrated Drive Electronicsの略 エディタ,コンパイラ,デバッガなど,プログラミングに必要なツールが一つのインターフェースで統合して扱えるような環境のこと. デバッガとは…プログラムの不具合(バグ)の発見や修正を支援するソフトウェア.Linuxではgdbコマンドが利用可能. IDEの例:Eclipse,Visual C++,Turbo C++ など http://d.hatena.ne.jp/keyword/IDE

Eclipse オープンソースの統合開発環境 もともとIBMが開発したもので,現在は Eclipse Foundationが開発・管理している. プラグインにより機能を付加できる. Javaに限らず様々なプログラミング言語の開発に利用可能 情報処理Ⅲで利用されている. 自宅で使いたい人へ ①Eclipse,②C/C++ Development Tools (CDT), ③コンパイラ・デバッガをインストールする eclipse:食,日食,月食 http://www.ooyashima.net/db/prog.htm CDTについて http://eclipsewiki.net/eclipse/?C%2FC%2B%2B%20%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3 http://freepg.fc2web.com/cpp/topic_eclipse_cdt_001.html http://www.seshop.com/detail.asp?pid=6709