第5回 何度も呼び出そう レポート課題 氏名:菅原彩花 学籍番号:c1101253 語学クラス:英語6 コース:政策マネジメントコース 1、筆記問題 A、ASCIIコード S 0x53 0d83 U 0x55 0d85 G 0x47 0d71 A 0x41 0d65 W 0x57 0d87 A 0x41 0d65 R 0x52 0d82 A 0x41 0d65 S 0x53 0d83 A 0x41 0d65 Y 0x59 0d89 A 0x41 0d65 K 0x4b 0d75 A 0x41 0d65 10進数の合計 83+85+71+65+87+65+82+65+83+65+89+65+75+65=1045 16進数の合計 =415 53 + 55 ----- A8 + 47 ----- EF + 41 ----- 130 + 57 ----- 187 + 41 ----- 1C8 + 52 ----- 21A + 41 ----- 25B + 53 ----- 2AE + 41 ----- 2EF + 59 ----- 348 + 41 ----- 389 + 4B ----- 3D4 + 41 ----- 415 0d1045を0xに変換すると、 16)1045 5 ----- 16) 65 1 ----- 16) 4 4 ----- 0 0d1045=0x415 0x415を0dに変換すると、 4 1 5 * * * 256 16 1 ↓ ↓ ↓ 1024 16 5 1024+16+5=1045 0x415=0d1045 以上からASCIIコードで自分の名前を合計した10進数、16進数の合計がそれぞれ 一致するので計算が正しいことがわかる。 B、def文 def cake(egg,mix,milk) boll=eggとmixとmilkを混ぜ合わせる furaipan=bollの中身をいれて焼く dish=furaipanで焼いたホットケーキを盛りつける end cake(1個,200g,100cc) print("ホットケーキができたよ!\n") 2、プログラム問題 A、組み合わせを求めるプログラム a、考えた設定 優勝したチームのメンバーのうち代表として表彰される人の組み合わせを求める プログラム。 b、作成したプログラム #!/usr/koeki/bin/ruby def factional(n) #関数を定義する。 if n == 1 #1が代入されたときには1を返す 1 else n * factional(n-1) #1以外の数が代入されたときは代入した数-1を返す end #ifのおわり end #defのおわり def combi(ninzuu,daihyo) #関数を定義する if ninzuu==daihyo #チームの人数と代表者の人数が同じときは1を返す 1 else factional(ninzuu)/(factional(daihyo) * factional(ninzuu-daihyo)) #チームの人数<代表者のときには、mCn = m! / (n!(m-n))の計算をする end #ifのおわり end #defのおわり STDERR.printf("チームメンバーは何人いますか?:") member = gets.to_i #チームの人数を入力させる。to_iで整数に変換 STDERR.printf("代表として表彰台に行く人は何人いますか?:") go = gets.to_i #代表者の人数を入力させる。to_iで整数に変換 if member < go #チームの人数<代表者のときは再入力させる print("計算できません。チームメンバーよりも少ない人数を入力して下さい。\n") else #チームの人数>代表者のときには組み合わせを表示する。 printf("%d人から%d人選ぶときの組み合わせは、%d通りです。\n",member,go,combi(member,go)) end c、実行結果 (1)メンバー=代表者のとき チームメンバーは何人いますか?:3 代表として表彰台に行く人は何人いますか?:3 3人から3人選ぶときの組み合わせは、1通りです。 (2)メンバー>代表者のとき チームメンバーは何人いますか?:5 代表として表彰台に行く人は何人いますか?:2 5人から2人選ぶときの組み合わせは、10通りです。 (3)メンバー<代表者のとき チームメンバーは何人いますか?:3 代表として表彰台に行く人は何人いますか?:5 計算できません。チームメンバーよりも少ない人数を入力して下さい d、考察 bc -lを使って確かめ算をする。 (1)のとき 3C3= (3*2*1)/(3*2*1) 1.00000000000000000000 よって1通り (2)のとき 10C3= (5*4*3)/(3*2*1) 10.00000000000000000000 よって10通り 以上よりプログラムの計算は正しいと言える。 3、感想 機械的な動作を繰り返すもの 車のワイパー、車のウインカー、自動ドアなど。 筆記問題のASCIIコードの合計を求める計算では10進数で表を見間違えていたと ころがあったので、計算がなかなか合わなくて大変だった。 プログラムの問題では組み合わせを求める方法をすっかり忘れていたので、組み 合わせを求める方法を確認するところから始めた。 4、参考文献 ASCIIコード表 URL:http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html 基礎プログラミングII第5回「何度も呼び出そう」 URL:http://roy/~madoka/2011/r2/05/ 2010年度基礎プログラミングII講義ノート URL:http://roy/~madoka/2010/r2/ ------------------- 東北公益文科大学 公益学部 公益学科 2年 菅原彩花 c110125@f.koeki-u.ac.jp