_ProgII2007/1116
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[takataka]] | [[ProgII2007]]
*Prog2 2007 実習 11月16日(金) [#d8d77674]
#contents
*わけわかめ? [#o4fcc14d]
「ひーん,わけわかめ〜,何から手をつけたらいいのかわからへん〜」という人は,[[こちら>ProgII2007/wakame0]]へどうぞ.
*今日の課題 [#t8b47367]
-課題A,Bは,実習開始と同時にチェックをはじめます.
-課題C,Dは,チェックしません.
-最後にチェックテストをします.
ヒープソートとクイックソートのプログラムに関するものです.
**課題A,B共通の注意 [#p2ca07a7]
-ソースファイルは prog2/ex1116 に保存すること.
-整数値がいくつか入力されると,それらをint型の配列に格納し,降順に並べかえて出力するものとすること.
-値の入力部分は,10月19日の課題Fに示したように,値の個数をプログラムが自分で数えて処理できるものにすること.
**課題A hsort.c [#lab2175c]
ヒープソートによる並べかえのプログラムを作成し動作確認しなさい.
ただし,上記の「課題A,B共通の注意」ならびに下記の注意に気をつけること.
-ソースファイル名は hsort.c とすること.
-このプログラムでは,次のように少なくとも4つの関数を定義することになるでしょう
--main()
--PrintData()
--DownHeap()
--HeapSort()
-関数 HeapSort() 内の適当なところで PrintData() を呼ぶようにして,以下の出力例のように途中経過がわかるようにすること.
#pre{{
71 41 99 50 63 87 hoge ← キーボードからの入力
ヒープつくってます♪
[ 71] [ 41] [ 87] [ 50] [ 63] [ 99]
[ 71] [ 41] [ 87] [ 50] [ 63] [ 99]
[ 41] [ 50] [ 87] [ 71] [ 63] [ 99] ← ここでヒープ完成
ヒープ化して交換しまくりです♪
[ 99] [ 50] [ 87] [ 71] [ 63] [ 41] ← 5番目確定
[ 99] [ 63] [ 87] [ 71] [ 50] [ 41] ← 4番目確定
[ 99] [ 71] [ 87] [ 63] [ 50] [ 41] ← 3番目確定
[ 87] [ 99] [ 71] [ 63] [ 50] [ 41] ← 2番目確定
[ 99] [ 87] [ 71] [ 63] [ 50] [ 41] ← 1,0番目確定
[ 99] [ 87] [ 71] [ 63] [ 50] [ 41] ← main()中で呼ばれた PrintData() の出力
}}
**課題B qsort.c [#y5a0cb7d]
クイックソートによる並べかえのプログラムを作成し動作確認しなさい.
ただし,上記の「課題A,B共通の注意」ならびに下記の注意に気をつけること.
-ソースファイル名は qsort.c とすること.
-このプログラムでは,次のように少なくとも4つの関数を定義することになるでしょう
--main()
--PrintData()
--qs()
--QuickSort()
-関数 QuickSort() は,次のように単に qs() を呼ぶだけのものです.他の三つのソートでは,main()から呼ばれる関数は配列とその要素数の二つを引数にとっているので,それにあわせるためにこのような関数を定義します.
#pre{{
void QuickSort(int data[], int n)
{
qs(data, 0, n-1);
}
}}
-関数 qs() 内で基準値を求めた直後に変数 first, last, r の値を次のように出力し,途中経過がわかるようにすること.
#pre{{
71 41 99 50 63 87 fuga ← キーボードからの入力
first = 0, last = 5, r = 99 ← 最初に呼ばれた qs(配列, 0, 5) の基準値は 99
first = 1, last = 5, r = 50 ← そこから呼ばれた qs(配列, 1, 5) の基準値は 50
first = 1, last = 3, r = 71
first = 4, last = 5, r = 50
[ 99] [ 87] [ 71] [ 63] [ 50] [ 41] ← main()中で呼ばれた PrintData() の出力
}}
**課題C gnuplotで関数のグラフを描こう [#r1aab46a]
[[gnuplotの使い方>gnuplot]]の1章から4章までを読みながら実際にgnuplotを使ってみなさい.
それができたら,次のことをやってみなさい.
+ 曲線 &mimetex(y = x^2); と曲線 &mimetex(y = 10x\log{x}); を重ねたグラフを描く.ただし,&mimetex(x); の範囲は 0から10まで とする
+ &mimetex(x); の上限を大きくして,グラフがどのように変化して見えるか観察する
**課題D gnuplotで数値データを可視化しよう [#f939bdf8]
+ emacs等のエディタで,次の内容のファイルを作成し,適当なファイル名で保存する(ファイル名は何でも構いませんが,C言語のソースではないのだから hoge.c みたいな名前はやめときましょう.混乱するだけです).~
//
http://tortoise1.math.ryukoku.ac.jp/~takataka/course2007/prog2/dat20071116.png
//
+[[gnuplotの使い方>gnuplot]]の5章を読み,上記のファイルの1列目の値を横軸に,2列目の値を縦軸にとったグラフを描きなさい.
+上記に重ねて,1列目の値を横軸にとって3列目の値を縦軸にとったグラフを描きなさい
+[[gnuplotの使い方>gnuplot]]の6章を読み,グラフのスタイルを 'linespoints' に変えてみなさい
*チェックテスト [#p1abbe89]
//今日はチェックテストはありません
今日のチェックテストにはRLSを用います.
[[今日のチェックテスト>http://r-els.media.ryukoku.ac.jp/mod/quiz/view.php?id=2226]]
終了行:
[[takataka]] | [[ProgII2007]]
*Prog2 2007 実習 11月16日(金) [#d8d77674]
#contents
*わけわかめ? [#o4fcc14d]
「ひーん,わけわかめ〜,何から手をつけたらいいのかわからへん〜」という人は,[[こちら>ProgII2007/wakame0]]へどうぞ.
*今日の課題 [#t8b47367]
-課題A,Bは,実習開始と同時にチェックをはじめます.
-課題C,Dは,チェックしません.
-最後にチェックテストをします.
ヒープソートとクイックソートのプログラムに関するものです.
**課題A,B共通の注意 [#p2ca07a7]
-ソースファイルは prog2/ex1116 に保存すること.
-整数値がいくつか入力されると,それらをint型の配列に格納し,降順に並べかえて出力するものとすること.
-値の入力部分は,10月19日の課題Fに示したように,値の個数をプログラムが自分で数えて処理できるものにすること.
**課題A hsort.c [#lab2175c]
ヒープソートによる並べかえのプログラムを作成し動作確認しなさい.
ただし,上記の「課題A,B共通の注意」ならびに下記の注意に気をつけること.
-ソースファイル名は hsort.c とすること.
-このプログラムでは,次のように少なくとも4つの関数を定義することになるでしょう
--main()
--PrintData()
--DownHeap()
--HeapSort()
-関数 HeapSort() 内の適当なところで PrintData() を呼ぶようにして,以下の出力例のように途中経過がわかるようにすること.
#pre{{
71 41 99 50 63 87 hoge ← キーボードからの入力
ヒープつくってます♪
[ 71] [ 41] [ 87] [ 50] [ 63] [ 99]
[ 71] [ 41] [ 87] [ 50] [ 63] [ 99]
[ 41] [ 50] [ 87] [ 71] [ 63] [ 99] ← ここでヒープ完成
ヒープ化して交換しまくりです♪
[ 99] [ 50] [ 87] [ 71] [ 63] [ 41] ← 5番目確定
[ 99] [ 63] [ 87] [ 71] [ 50] [ 41] ← 4番目確定
[ 99] [ 71] [ 87] [ 63] [ 50] [ 41] ← 3番目確定
[ 87] [ 99] [ 71] [ 63] [ 50] [ 41] ← 2番目確定
[ 99] [ 87] [ 71] [ 63] [ 50] [ 41] ← 1,0番目確定
[ 99] [ 87] [ 71] [ 63] [ 50] [ 41] ← main()中で呼ばれた PrintData() の出力
}}
**課題B qsort.c [#y5a0cb7d]
クイックソートによる並べかえのプログラムを作成し動作確認しなさい.
ただし,上記の「課題A,B共通の注意」ならびに下記の注意に気をつけること.
-ソースファイル名は qsort.c とすること.
-このプログラムでは,次のように少なくとも4つの関数を定義することになるでしょう
--main()
--PrintData()
--qs()
--QuickSort()
-関数 QuickSort() は,次のように単に qs() を呼ぶだけのものです.他の三つのソートでは,main()から呼ばれる関数は配列とその要素数の二つを引数にとっているので,それにあわせるためにこのような関数を定義します.
#pre{{
void QuickSort(int data[], int n)
{
qs(data, 0, n-1);
}
}}
-関数 qs() 内で基準値を求めた直後に変数 first, last, r の値を次のように出力し,途中経過がわかるようにすること.
#pre{{
71 41 99 50 63 87 fuga ← キーボードからの入力
first = 0, last = 5, r = 99 ← 最初に呼ばれた qs(配列, 0, 5) の基準値は 99
first = 1, last = 5, r = 50 ← そこから呼ばれた qs(配列, 1, 5) の基準値は 50
first = 1, last = 3, r = 71
first = 4, last = 5, r = 50
[ 99] [ 87] [ 71] [ 63] [ 50] [ 41] ← main()中で呼ばれた PrintData() の出力
}}
**課題C gnuplotで関数のグラフを描こう [#r1aab46a]
[[gnuplotの使い方>gnuplot]]の1章から4章までを読みながら実際にgnuplotを使ってみなさい.
それができたら,次のことをやってみなさい.
+ 曲線 &mimetex(y = x^2); と曲線 &mimetex(y = 10x\log{x}); を重ねたグラフを描く.ただし,&mimetex(x); の範囲は 0から10まで とする
+ &mimetex(x); の上限を大きくして,グラフがどのように変化して見えるか観察する
**課題D gnuplotで数値データを可視化しよう [#f939bdf8]
+ emacs等のエディタで,次の内容のファイルを作成し,適当なファイル名で保存する(ファイル名は何でも構いませんが,C言語のソースではないのだから hoge.c みたいな名前はやめときましょう.混乱するだけです).~
//
http://tortoise1.math.ryukoku.ac.jp/~takataka/course2007/prog2/dat20071116.png
//
+[[gnuplotの使い方>gnuplot]]の5章を読み,上記のファイルの1列目の値を横軸に,2列目の値を縦軸にとったグラフを描きなさい.
+上記に重ねて,1列目の値を横軸にとって3列目の値を縦軸にとったグラフを描きなさい
+[[gnuplotの使い方>gnuplot]]の6章を読み,グラフのスタイルを 'linespoints' に変えてみなさい
*チェックテスト [#p1abbe89]
//今日はチェックテストはありません
今日のチェックテストにはRLSを用います.
[[今日のチェックテスト>http://r-els.media.ryukoku.ac.jp/mod/quiz/view.php?id=2226]]
ページ名: