第3回 基礎プログラミング II レポート課題 氏名:川島哲 学籍番号:c109048 語学クラス:英語3 コース(系):政策マネ 1. 1-1 川島哲 ↓ Kawashima Satoru ↓ K=0x4b a=0x61 w=0x77 a=0x61 s=0x73 h=0x68 i=0x69 m=0x6d a=0x61 S=0x53 a=0x61 t=0x74 o=0x6f r=0x72 u=0x75 0x=4b6177617368696d615361746f7275 )10進数の場合 K=75 a=97 w=119 a=97 s=115 h=104 i=105 m=109 a=97 S=83 a=97 t=116 o=111 r=114 u=117 0d=759711997115104105109978397116111114117 )参考 ASCIIコード IT用語辞典 http://e-words.jp/p/r-ascii.html 1-2 くるまで まってよう →車で待ってよう →来るまで待ってよう あいつがにくかった →あいつが憎かった →あいつが肉買った にくしみはきえない →憎しみは消えない →肉染みは消えない )参考 Wikipedia ぎなた読み http://ja.wikipedia.org/wiki/%E3%81%8E%E3%81%AA%E3%81%9F%E8%AA%AD%E3%81%BF 1-3 ゲーム機に関連する項目をhash 配列hardとする hardのkeyとvalueは値段(円)と海外名、会社名にした hard[ファミリーコンピュータ]のvalueは25000,NES,任天堂 hard[メガドライブ]のvalueは21000,GENESIS,セガ hard[スーパーファミコン]は25000,SNES,任天堂 hard[プレイステーション]は39800,PlayStaition,SCE hard[ピピンアットマーク]は64800,Pippin@,バンダイ+アップル hash配列表記1 hard[ファミリーコンピュータ]="25000","NES","任天堂" hard[メガドライブ]="21000","GENESIS",セガ hard[スーパーファミコン]="25000","SNES","任天堂" hard[プレイステーション]="39800",PlayStation,"SCE" hard[ピピンアットマーク]="64800","Pippin@","バンダイ+アップル" hash配列表記2 hard{ "ファミリーコンピュータ"=>["25000","NES","任天堂"],"メガドライブ"=>["21000","GENESIS","セガ"] "スーパーファミコン""=>["25000","SNES","任天堂"],"プレイステーション"=>["39800","PlayStation","SCE"] "ピピンアットマーク"=>"64800",Pippin@","バンダイ+アップル" } 2. プログラムA a,設定 筆記問題1で考えた設定をそのまま利用する、ゲーム機と値段と海外名、会社 を文章として表示する。 b,プログラム名:hash__print.rb #!/usr/koeki/bin/ruby $KCODE="e" #EUC変換 hard = Hash.new hard["ファミリーコンピュータ"]=25000,"NES","任天堂" hard["メガドライブ"]=21000,"GENESIS","セガ" hard["スーパーファミコン"]=25000,"SNES","任天堂" hard["プレイステーション"]=39800,"PlayStation","SCE" hard["ピピンアットマーク"]=64800,"Pippin@","バンダイ+アップル" #ゲーム名に対し、値段(円),海外名,会社 print("ゲーム機一覧\n") for game , price in hard #一覧を表示させる #gameをkeyに設定,priceを関連付ける printf("%s(海外名:%s)は発売当時%d円で%sが発売しました。\n",game,price[1],price[0],price[2]) end c.元にしたプログラム 前回課題で作ったhash_for.rbに今回の時間DLしたわらしべ長者のプログラムを 参考に付け加えた。 d.実行画面 pan{c109048}% ./hash_ary__print.rb [~/Ruby] ゲーム機一覧 スーパーファミコン(海外名:SNES)は発売当時25000円で任天堂が発売しました。 ファミリーコンピュータ(海外名:NES)は発売当時25000円で任天堂が発売しました。 ピピンアットマーク(海外名:Pippin@)は発売当時64800円でバンダイ+アップルが発売しました。 メガドライブ(海外名:GENESIS)は発売当時21000円でセガが発売しました。 プレイステーション(海外名:PlayStation)は発売当時39800円でSCEが発売しました。 e.考察 正しく表示された。 しかしピピンアットマークは会社名がふたつあり[,]を使うと上手く反応しない のではと思い[+]を使用した。 なので次は[,]に変更して表示してみる。 e-2,ぷログラム2 #!/usr/koeki/bin/ruby $KCODE="e" #EUC変換 hard = Hash.new hard["ファミリーコンピュータ"]=25000,"NES","任天堂" hard["メガドライブ"]=21000,"GENESIS","セガ" hard["スーパーファミコン"]=25000,"SNES","任天堂" hard["プレイステーション"]=39800,"PlayStation","SCE" hard["ピピンアットマーク"]=64800,"Pippin@","バンダイ,アップル" #ゲーム名に対し、値段(円),海外名,会社 ↑+から変更 print("ゲーム機一覧\n") for game , price in hard #一覧を表示させる #gameをkeyに設定,priceを関連付ける printf("%s(海外名:%s)は発売当時%d円で%sが発売しました。\n",game,price[1],price[0],price[2]) end 実行結果2 pan{c109048}% ./hash_ary__print.rb [~/Ruby] ゲーム機一覧 スーパーファミコン(海外名:SNES)は発売当時25000円で任天堂が発売しました。 ファミリーコンピュータ(海外名:NES)は発売当時25000円で任天堂が発売しました。 ピピンアットマーク(海外名:Pippin@)は発売当時64800円でバンダイ,アップルが発売しました。 メガドライブ(海外名:GENESIS)は発売当時21000円でセガが発売しました。 プレイステーション(海外名:PlayStation)は発売当時39800円でSCEが発売しまし た。 考察 上手く反映されたので問題ないといえる 参考) hash_strawich.rb /西村まどか http://roy/~madoka/2010/r2/prog/hash_strawrich.rb プログラムB a, 順番を値段が低い順に表示する。 b,プログラム名:hash_ary_sort.rb #!/usr/koeki/bin/ruby $KCODE="e" #EUC変換 hard = Hash.new hard["ファミリーコンピュータ"]=25000,"NES","任天堂" hard["メガドライブ"]=21000,"GENESIS","セガ" hard["スーパーファミコン"]=25000,"SNES","任天堂" hard["プレイステーション"]=39800,"PlayStation","SCE" hard["ピピンアットマーク"]=64800,"Pippin@","バンダイ,アップル" #ゲーム名に対し、値段(円),海外名,会社 print("値段が低い順に表示します。\n") #どのような順で表示するか for game in hard.keys.sort{|a,b| hard[a][0]<=> hard[b][0]}.each{|game| printf("%sの値段は%d円です。\n",game,hard[game][0])} end c. プログラムAで作成したhash_ary_print.rbに授業ページを参考に改変した。 d.実行結果 pan{c109048}% ./hash_ary_sort.rb [~/Ruby] 値段が低い順に表示します。 メガドライブの値段は21000円です。 ファミリーコンピュータの値段は25000円です。 スーパーファミコンの値段は25000円です。 プレイステーションの値段は39800円です。 ピピンアットマークの値段は64800円です。 e.考察 上手く実行された。 しかし実行結果を見た友人に値段が高い順に並べた方がいいと言われ、 またprintfも「値段順に並べる」というコンセプトだと見にくいものだと感じた ので少し変えてみることにした。 改変後プログラム #!/usr/koeki/bin/ruby $KCODE="e" #EUC変換 hard = Hash.new hard["ファミリーコンピュータ"]=25000,"NES","任天堂" hard["メガドライブ"]=21000,"GENESIS","セガ" hard["スーパーファミコン"]=25000,"SNES","任天堂" hard["プレイステーション"]=39800,"PlayStation","SCE" hard["ピピンアットマーク"]=64800,"Pippin@","バンダイ,アップル" #ゲーム名に対し、値段(円),海外名,会社 print("値段が高い順に表示します。\n") #どのような順で表示するか for game in hard.keys.sort{|b,a| hard[a][0]<=> hard[b][0]}.each{|game| printf("値段:%d円\tゲーム機名:%s\n",hard[game][0],game)} end 変更部分 ・print文を「高い順」表示 ・元:|a,b|hard[a][0]<=> hard[b][0]} の最初の|a,b|を入れ替えた。 ・printfを文章型式から要点だけ表示するものに変更 実行結果 pan{c109048}% ./hash_ary_sort.rb [~/Ruby] 値段が高い順に表示します。 値段:64800円 ゲーム機名:ピピンアットマーク 値段:39800円 ゲーム機名:プレイステーション 値段:25000円 ゲーム機名:ファミリーコンピュータ 値段:25000円 ゲーム機名:スーパーファミコン 値段:21000円 ゲーム機名:メガドライブ 考察 変更前のものより見やすくなった。 参考) 基礎プログラミングII 第4回 /神田直弥 http://roy/~naoya/rubyII/4.html プログラムC a. もしこれらのハードを一辺に購入したら一体いくらになるのか?をシュミレート するプログラム b.プログラム名:hash_ary_calc.rb #!/usr/koeki/bin/ruby $KCODE="e" #EUC変換 hard = Hash.new hard["ファミリーコンピュータ"]=25000,"NES","任天堂" hard["メガドライブ"]=21000,"GENESIS","セガ" hard["スーパーファミコン"]=25000,"SNES","任天堂" hard["プレイステーション"]=39800,"PlayStation","SCE" hard["ピピンアットマーク"]=64800,"Pippin@","バンダイ,アップル" #ゲーム名に対し、値段(円),海外名,会社 print("値段が高い順に表示します。\n") for game in hard.keys.sort{|b,a| hard[a][0]<=> hard[b][0]}.each{|game| printf("値段:%d円\tゲーム機名:%s\n",hard[game][0],game)} end #ここまで前問プログラムのコードと同じ total=0 print("\n") #一行空ける for game,price in hard #valueをpriceに設定 total += price[0] #一つ目のvalueを足していく end printf("以上のゲームを一度に購入した場合%d円かかります。\n",total) c. 前問で作成したプログラムに合計を出すコードを追加した。 d.実行結果 pan{c109048}% ./hash_ary_calc.rb [~/Ruby] 値段が高い順に表示します。 値段:64800円 ゲーム機名:ピピンアットマーク 値段:39800円 ゲーム機名:プレイステーション 値段:25000円 ゲーム機名:ファミリーコンピュータ 値段:25000円 ゲーム機名:スーパーファミコン 値段:21000円 ゲーム機名:メガドライブ 以上のゲームを一度に購入した場合175600円かかります。 e.考察 計算が正しいか確かめる。 pan{c109048}% bc -l [~/Ruby] 64800+39800+25000+25000+21000 175600 プログラムの計算結果と同じなので合っていると言える。 これはゲーム機なので無理だがもし別の商品だったら平均値等を出せたかもしれ ない。 )参考 基礎プログラミングII 第三回 /神田直弥 http://roy/~naoya/rubyII/3.html 3.感想 桃太朗 途中から 犬が来る→キビ団子を欲しいとねだる→家来になる→サルが来る→キビ団子をね だる→家来になる→キジがくる→キビダンゴをねだる→家来になる %s「桃太朗さん!キビ団子をください」 桃「家来になるならあげよう」 こうして%sは家来になりました。 %sの部分にキジ、サル、犬を当てはめられる 4.共同学習者 田村周 藤井駿