第3回 基礎プログラミングII レポート課題 氏名:久保田 瑛一郎 学籍番号:c109058 語学クラス:英語1 コース:社会福祉 筆記問題 A ASCIIコード表を用いる(基礎プログラミング I 第5回レポートより抜粋) ASCIIコード表を用いる(前回レポートより再掲) 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 nul soh stx eox eot enq ack bel bs ht lf vt ff cr so s 1 dle dc1 dc2 dc3 dc4 nak syn etb can em sub esc fs gs rs us 2 ! " # $ % & ' ( ) * + , - . / 3 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ 円 ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { | } ~ del 使い方(前回レポートより、16進数から文字を探す手順から、文字から16進数の 数字を求める手順に変更した。) 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 nul soh stx eox eot enq ack bel bs ht lf vt ff cr so si 1 dle dc1 dc2 dc3 dc4 nak syn etb can em sub esc fs gs rs us イ ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←← ↑ ↑ ↑ ↑ ↑ ↑ ↑ ロ 例 ASCIIコード表でemを調べる。 イ 「em」が存在する場所から横軸に見てそこにある数字を調べる。(←で表記) ロ「em」が存在する場所から縦軸に見てそこにある数字を調べる。 (↑で表記) ハ 手順イとロでさがした数字をイ、ロの順番で並べる。 よって0x19となる。 以下、自分の名前を16進数に変換した結果をこの要領で求め、まとめたものを表とする。 文字 16進数 E 0x45 i 0x69 i 0x69 c 0x63 h 0x68 i 0x69 r 0x72 o 0x6f K 0x4b u 0x75 b 0x62 o 0x6f t 0x74 a 0x61 B しかいしかいしする 歯科医師開始する = しかいし かいしする 歯科医師会資する= しかいしかい しする かめのめか かめの め か=亀の目か! かめ の めか=亀のメカ にわにはにはとりがいる にわ には にわ とり がいる=庭には二羽鳥がいる にわには にわとりがいる=庭にはニワトリがいる C 説明 簿記で使われる勘定科目をkanzyoとした。 それぞれ1月の資産、2月の資産、3月の資産 key「現金」に対して、valueは「200000」「150000」「100000」 key「当座預金」に対して、valueは「1000」「100000」「120000」 key「建物」に対して、valueは「2000000」「0」「500000」 key「車両運搬具」に対して、valueは「200000」「100000」「10000」 key「貸付金」に対して、valueは「130000」「50000」「120000」 パターン1 kanzyo ["現金"]=200000,150000,100000 kanzyo ["当座預金"]=1000,10000,120000 kanzyo ["建物"]=200000,0,500000 kanzyo ["車両運搬具"]=200000,100000,100000 kanzyo ["土地"]=130000,50000,120000 パターン2 kanzyo{"現金"=>200000,150000,100000,"当座預金=>1000,10000,120000,"建物 "=>200000,0,500000,"車両運搬具"=>200000,100000,100000,"土地"=>130000,50000,120000} プログラム問題 解いた順に示す。 A問題 a考えた設定 1月分のある企業の資産高を表示するhash_any_print.rbを作成した bもとにしたプログラム とくに無いがfor文の用法について友人と学習した部分がある。よって、考察で 示す c作成したプログラム #!/usr/koeki/bin/ruby #インタプリタであることを宣言する kanzyo=Hash.new #kanzyoはハッシュ(登録するもの ●●といえば●●) print("1月の資産高合計\n") #書類のタイトル表示 $KCODE="e" #文字コードをEUCに指定 文字化け防止 kanzyo ["現金"]=200000,150000,100000 kanzyo ["当座預金"]=1000,10000,120000 kanzyo ["建物"]=200000,0,500000 kanzyo ["車両運搬具"]=200000,100000,100000 kanzyo ["土地"]=130000,50000,120000 #以上登録内容 ●●という勘定科目の値段はこれこれ for boki in kanzyo.keys #内部変数(どんどん集める場所)をbokiと定義し、kanzyoのkeysを集める printf("%-10s\t%d\n",boki,kanzyo[boki][0]) #結果表示 end #forの終わり 実行結果 pan{c109058}% ./hash_any_print.rb [~/Ruby] 1月の資産高合計 土地 130000 当座預金 1000 建物 200000 車両運搬具 200000 現金 200000 考察 正しく表示されている。よってこのプログラムは正しい for文に出てくる実行文の意味が分からなかった。よって友人と話し合ってみた for boki in kanzyo.keys boki=内部変数的なもの →ハッシュの中味をコピーする だからこの先はこれを用いる kanzyo.keys→ハッシュの中味といってもどのハッシュか分からないので、教え てあげる。 ↓ ↓ 日本語にするとkanzyoにある色々なキーをbokiという新しいはこにコピーする D問題 a考えた設定 ある4ヶ月の売上げ合計を商店別に計算したプログラムhash_any_read.rbを作成 した bもとにしたプログラム hash_sesame.rbを参考としながら作成した c作成したプログラム #!/usr/koeki/bin/ruby #インタプリタであることを宣言する uriage=Hash.new #uriageはハッシュである total=0 #合計を求めるときにしよう $KCODE="e" #文字コードをEUCに指定する while nedan=gets #外部データ(コマンドラインktermで指定したデータ)から取り込むことを繰り返す if /(\S+)\s+(\d+)\s+(\d+)\s+(\d+)/ =~ nedan #もしこの外部データの構造が文字→空白→数字→空白→数字→空白→数字だったら uriage[$1]=[$2.to_i,$3.to_i,$4.to_i] #ただの文字列の並びからハッシュに組み立てる(外部データのどれが「なになに」でどれが「これこれ」なのかを教える end #ifのおわり end #whileのおわり for list, nedan in uriage #listと言う名前(内部変数)にして,先程の配列の内部変数であるnedanをuriageのハッシュとして全部出す printf("%s\t%s\t%d\t%d\n",list,uriage[list][0],uriage[list][1],uriage[list][2]) #結果表示 total= nedan[0] + nedan[1] + nedan[2] #合計を出す printf("一月合計\t%d\n",total) #合計表示 end #forの終わり データ 山形商店 100000 200000 400000 秋田商店 50000 10000 300000 福島商店 350000 100000 200000 青森商店 200000 340000 300000 岩手商店 100000 400000 200000 宮城商店 320000 290000 100000 c実行結果 pan{c109058}% ./hash_any_read.rb hash_any_data.dat [~/Ruby] 岩手商店 100000 400000 200000 一月合計 700000 青森商店 200000 340000 300000 一月合計 840000 宮城商店 320000 290000 100000 一月合計 710000 秋田商店 50000 10000 300000 一月合計 360000 福島商店 350000 100000 200000 一月合計 650000 山形商店 100000 200000 400000 一月合計 700000 d bc ーlを用いて試算する pan{c109058}% bc -l [~/Ruby] 100000+400000+200000 700000 200000+340000+300000 840000 320000+290000+100000 710000 50000+10000+300000 360000 350000+100000+200000 650000 100000+200000+400000 700000 quit よって試算よりこのプログラムの正確性がしめされた C 問題 a考えた設定 ある月の資産高を表示し、参考として現金の3ヶ月分の合計を表示させるプログ ラム hash_any_calc.rb を作成した b 元にしたプログラム A問題で作成したプログラムを参考に作成した c実行結果 pan{c109058}% ./hash_any_calc.rb [~/Ruby] 1月の資産高合計 土地 130000 当座預金 1000 建物 200000 車両運搬具 200000 現金 200000 参考→現金の3ヶ月合計450000円 d作成したプログラム #!/usr/koeki/bin/ruby #インタプリタであることを宣言する kanzyo=Hash.new #kanzyoはハッシュ(登録するもの ●●といえば●●) print("1月の資産高合計\n") #書類のタイトル表示 $KCODE="e" #文字コードをEUCに指定 文字化け防止 kanzyo ["現金"]=200000,150000,100000 kanzyo ["当座預金"]=1000,10000,120000 kanzyo ["建物"]=200000,0,500000 kanzyo ["車両運搬具"]=200000,100000,100000 kanzyo ["土地"]=130000,50000,120000 #以上登録内容 ●●という勘定科目の値段はこれこれ for boki in kanzyo.keys #内部変数(どんどん集める場所)をbokiと定義し、kanzyoのkeysを集める printf("%-10s\t%d\n",boki,kanzyo[boki][0]) #結果表示 total=kanzyo[boki][0]+kanzyo[boki][1]+kanzyo[boki][2] #一月の現金収入の合計を求める end printf("参考→現金の3ヶ月合計%d円\n",total) #結果表示 e考察 bc-lで試算する pan{c109058}% bc -l [~/Ruby] 200000+150000+100000 450000 quit よってこのプログラムは正しい B問題 a考えた設定 資産の勘定科目をあいうえお順で並びかえるプログラム を作成した b 元にしたプログラム C問題のhash_any_calc.rb を並びかえるように変更した c実行結果 pan{c109058}% ./hash_any_sort.rb [~/Ruby] 1月の資産高合計 土地 130000 当座預金 1000 建物 200000 車両運搬具 200000 現金 200000 d考察 現金→車輌運搬具→建物とあいうえお順でならべたかったのだが上手く行かなかっ た。文字コードがえいきょうしているとおもわれる 2 感想 今回は講義の内容もレポートの問題も前回までとくらべ格段に難しかった。とく に並び換えである。しかしfor文の用法について、少しだけではあるけれども、 深く理解できたように思う。それだけでも今回の経験値になったように思うので よかった。 繰り返す物語の例は、皆と重複するのもつまらないので、違うもので考えてみた が、アンパンマンしか思い浮かばなかった。しかも1話の物語の中での繰り返し ではなく、全体として毎話下記のようなことが繰り返されている 余力と時間があれば演習問題にも挑戦したい!! バイキンマンに町の「誰かが」いじめられる→たすけてアンパンマンと言う→ア ンパンマン登場→しかしバイキンマンになにか液体をかけられる→ジャムおじさ んがアンパンマンのかおをつくる→「たまにここでトラブル」→バタ子さんがア ンパンマンの顔を投げる→アンパンマン復活→バイキンマン倒す→はひふへほー とバイキンマンが言う→町の人が幸せに暮らす→終わる 「」内だけは変わることがある 参考文献 西村まどか 2010講義ノート 基礎プログラミングII第2回 要素の一部分を使って 並び換えをするには http://roy.e.koeki-u.ac.jp/~madoka/2010/r2/02/02_15_theme_14_sorthasharraycomp.html 西村まどか 2010講義ノート 基礎プログラミングII第2回 レポート課題 http://roy.e.koeki-u.ac.jp/~madoka/2010/r2/02/rpt/rpt.html 西村まどか 2010講義ノート 基礎プログラミングII第3回 レポート課題 共同学習者:横山 広樹