第7回 ゼミ紹介 レポート課題 氏名 : 畠山貴衣 学籍番号 : C1101709 語学クラス : 英語6 コース(系) : 政策マネジメントコース [1] A-a 仕様書 --------------------------------------------------------------------------- *仕様書* <企画の意図> 後期で習ったことを使用してプログラムを考えたところ、 Hash配列に書き込み をして出力できるスケジュール帳を作成した。 このプログラムでは、 Hash と def メソッドを使用している。 <プログラムの内容> ・名前を入力し、自分の予定を自由に書き込んで一覧で見ることができる。 バラバラに打ち込んでも、最後の一覧表示の際に小さい月から表示される。 <今後の課題> 今回はプログラムを閉じてしまうと内容が消えてしまっていたが、閉じても名前 を入力すれば過去の予定も表示できるように改良して行きたい。 また、11月と2月では11月が先に表示されてしまうので、月順に並び変えられな かった点も改善したい。 <連絡先> プログラムに関して、意見・質問等ございましたら、 下のアドレスまでご連絡下さい。 ad : c110170@f.koeki-u.ac.jp <ご注意> このプログラムの著作権は、東北公益文科大学 畠山貴衣が保有しています。 このプログラムの入手・実行・改変は自由に行うことができます。 取り扱うことで生じた問題に関して、著作権者は一切責任を負いませんので、 ご了承下さい。 A-b 作成したプログラム (設定)---------------------------------------------------------------------- ・スケジュールを入力して出力するプログラム (作成したプログラム)-------------------------------------------------------- #!/usr/koeki/bin/ruby $KCODE = 'e' # このプログラムの文字コード schedule = Hash.new #hash配列をscheduleと設定 def ques(name) #メソッドの設定 print("\n") printf("%sさんの予定を書き込んで下さい(Ctrl-D で終了)\n",name) print("3月の場合は、03月と入力\n") end STDERR.print("スケジュール帳に予定を書き込みましょう♪\n") print("あなたの名前を入力して下さい。\n") name = gets.chomp #名前を入力してもらう if name == "" #名前が空欄だったとき name = "you" #名前をyouと置く end while true #繰り返しのメソッド ques(name) #初めに設定したdefメソッドを引用 print("日付 : ") #表示文 hiduke = gets #日付(key)の入力 if hiduke == nil # Ctrl-D が入力されたら while true を抜ける break end print("予定 : ") #表示文 schedule[hiduke] = gets.chomp.to_s #valueを入力して記録 end #whileのend STDERR.print("入力終了 \n\n") #while true を抜けたときに表示するメソッド printf("☆%sさんの今後の予定☆\n",name) print"------------------------------\n" #p schedule #確認のためschedule に入っているデータを全て表示 #p schedule.sort #小さい順に並んでいるか確認 for hiduke, yotei in schedule.sort #配列に入っているものを一覧表示 printf("%s★%s \n", hiduke, yotei) #表示の仕方の指定 end #forに対するend print"------------------------------" (変更点)-------------------------------------------------------------------- ・今回はもとにしたプログラムはありません。 参考にしたのは、以下のプログラムです。 第2回 なになにといえばこれこれ 6.Hashの対を表示するには (→最後の出力の部分に適応) hash_sesame.rb (→配列の取りこみ) def_rubiocchi.rb (→名前の部分とdefの質問文) (実行結果)------------------------------------------------------------------ 1.日付を(/)で表現した場合 pan{c110170}% ./kadai.rb [~/public_html/advertise2] スケジュール帳に予定を書き込みましょう♪ あなたの名前を入力して下さい。 はたけ はたけさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 11/11 予定 : ポッキーの日 はたけさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 12/31 予定 : 大晦日 はたけさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 01/01 予定 : お正月 はたけさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 入力終了 ☆はたけさんの今後の予定☆ ------------------------------ 01/01 ★お正月 11/11 ★ポッキーの日 12/31 ★大晦日 ------------------------------% 2.日付に漢字が入る場合 pan{c110170}% ./kadai.rb [~/public_html/advertise2] スケジュール帳に予定を書き込みましょう♪ あなたの名前を入力して下さい。 はたけ はたけさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 03月31日 予定 : 卒業 はたけさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 11月11日 予定 : ポッキーの日 はたけさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 12月25日 予定 : クリスマス はたけさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 入力終了 ☆はたけさんの今後の予定☆ ------------------------------ 03月31日 ★卒業 11月11日 ★ポッキーの日 12月25日 ★クリスマス ------------------------------% 3.名前を入力しなかった場合 スケジュール帳に予定を書き込みましょう♪ あなたの名前を入力して下さい。 youさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 11/11 予定 : ポッキーの日 youさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 12/25 予定 : クリスマス youさんの予定を書き込んで下さい(Ctrl-D で終了) 3月の場合は、03月と入力 日付 : 入力終了 ☆youさんの今後の予定☆ ------------------------------ 11/11 ★ポッキーの日 12/25 ★クリスマス ------------------------------% (考察)--------------------------------------------------------------------- 今回のプログラムでは、17行目で名前が入力されていない場合、"you"と表示す ると定めており、実行してみた結果、きちんとyouと表示されていたのでこれは 問題ないと言える。 ************************************************* pan{c110170}% ./kadai.rb [~/Ruby] スケジュール帳に予定を書き込みましょう♪ あなたの名前を入力して下さい。 youさんの予定を書き込んで下さい(Ctrl-D で終了) ************************************************* しかし、48行目で配列(scedule)を降順に並べるための .sort メソッドを使用し ているにも関らず、11月と3月では11月が早く表示されてしまう。 ************************************************* ------------------------------ 11月11日 ★ポッキーの日 3月31日 ★卒業式 ------------------------------% ************************************************* これは、はじめの数が 1 と 3 であるため、11月がはじめに来てしまうと言うこ とが推測される。 これを解決するためには、上から何文字目を比べる対象として捕らえるかを指定 するか、若しくは 03月という風に 0 付けるしかない。 ************************************************* ☆youさんの今後の予定☆ ------------------------------ 01/01 ★お正月 03/03 ★ひな祭り 11/11 ★ポッキーの日 12/31 ★大晦日 ------------------------------% ************************************************* しかし、これではあまり実用的ではない。 よって、どうにか .sortの指定は出来ないか試してみたが、 結果、出来なかったので、03月と打ってもらうように print でコメントを増や した。 その他は、日付に漢字が入っていても正常に並べ替えが出来ているため、 問題はないといえる。 ----------------------------------------------------------------------------- A-d 広告ページ 広告ページトップ : http://roy/~c110170/advertise2/ 仕様書 : http://roy/~c110170/advertise2/siyousho.text 取扱説明書 : http://roy/~c110170/advertise2/setumei.text プログラム : http://roy/~c110170/advertise2/kadai.rb ホームページ : http://roy.e.koeki-u.ac.jp/~c110170/ [2]感想 ------------------------------------------------------------------ 今回は自由課題だったため、習ったことを1つでも多く取り入れることを目標に 作成してきたが、思ったよりも単純なプログラムになってしまったのが残念だっ た。最初は、プログラムで打ち込んでもらったこと全てを記録し、名前が同じ だった場合に前のデータを自動で検索できるようなものを作成したかったが、 私の力量で、期間1週間では作ることは出来ませんでした。 しかし、自分で1から組み立てたプログラムが正常に起動した時は嬉しかった。 [3]参考文献 --------------------------------------------------------------- ・プログラム 西村先生 後期プログラミング授業ページ http://roy/~madoka/2011/r2/ ・ホームページ 神田先生 第10回 http://roy/~naoya/ruby/css.html 共同製作者 : 伊藤桜子 齋藤陽香 ----------------------------------- 東北公益文科大学  公益学部 公益学科 2年 畠山貴衣  c110170@f.koeki-u.ac.jp