講評: 余りをつかったのはよいアイディアでした。 整数 i について、(-1)**i * i をすればよかったのではないでしょうか。 ---- 11 月 14 日 第 7 回レポート 「Method を自分で作ろう」 学籍番号: c106XXXX 氏名: XXXXXXX 語学クラス: 中国語選択XX 系: 社会系 1.筆記問題 A. def nitijou(kaisuu) for 0..kaisuu.length # 生活する end end def megane(glasses) # 眼鏡をかける end print("一日を過ごします。\n") a = 0 while a < 7 nitijou(seikatu) # 生活をするメソッドを呼ぶ # 授業を受ける部分 megane(a) # a+1 回眼鏡をかけます a += 1 end print("今日は %d 回眼鏡をかけました。\n",a) 2. A.( onephrase.rb ) a. 考えた設定 スペースを空けてコマンドライン入力した文字をつなげて表示するプログラム。 b. プログラムコード #!/usr/koeki/bin/ruby n = 0 word = Array.new if ARGV[0|1] == nil STDERR.puts("スペースを空けて文字を入力して下さい。\n") STDERR.puts("例: あ い う\n") exit(1) end while true if ARGV[n] == nil then break else word[n] = ARGV[n] n += 1 end end a = 0 #for n in word # printf("%s",word[a]) #a += 1 #end n.times do printf("%s",word[a]) a += 1 end print("\n終わり\n") c. 変更点 airline.rb をもとにした。 times do -- end を使った。 d. 結果画面 ・正しく入力した場合 irsv{c106179}% ./onephrase.rb こ が ら し [~/Ruby] こがらし 終わり ・スペースを空けないで入力した場合 irsv{c106179}% ./onephrase.rb こがらし [~/Ruby] スペースを空けて文字を入力して下さい。 例: あ い う ・例外 irsv{c106179}% ./onephrase.rb こが らし [~/Ruby] こがらし 終わり e. 考察 正しく入力した場合とスペースを空けないで入力した場合は正しく表示された。 しかし、例外で「こが らし」と入力した場合は、つなげて表示された。 今回はコメント文にしたが、for文 の場合でも正しく表示された。 f. 参考文献 西村先生のHP 〜 予約プログラム 〜 http://roy/~madoka/2007/r2/06/06-03-airline.html B.( game.rb ) a. 考えた設定 よく眠るほど育つ子猫を育成するゲーム。 b. プログラムコード #!/usr/koeki/bin/ruby def sleep(nemui) nemui.times do print("zzz...") end print("\n") end def item(mei) STDERR.print("[1]\t枕\n") STDERR.print("[2]\tふとん\n") STDERR.print("[3]\t子守歌\n") end def cat(suimin,zz) x = 5 * suimin - zz return x end printf("眠くて仕方がない子猫がいます。\n") STDERR.printf("どんな名前にしますか?: ") name = gets.chomp if name == "" then name = "にゃんこ" end printf("%s という名前になった。\n\n",name) manzoku = 1 nemuru = 1 day = 0 print("よく眠ると大きくなります\n") print("どの睡眠グッズを与えますか?\n") while true sleep(manzoku) item(name) ans = gets.chomp!.to_i manzoku += day * ans nemuru += cat(day,ans) if manzoku > 5 break end if nemuru > 5 break end sleep(ans) day += 1 end sleep(nemuru) if nemuru > 12 printf("%sは満足に眠れました。\n",name) elsif nemuru <= 8 printf("%sはもう少し眠りたかったようです。\n",name) else printf("%sはまだまだ寝足りなかったようです。\n",name) end c. 変更点 rubiocci.rb を参考にした。 d. 結果画面 irsv{c106179}% ./game.rb [~/Ruby] 眠くて仕方がない子猫がいます。 どんな名前にしますか?: にゃんこ という名前になった。 よく眠ると大きくなります どの睡眠グッズを与えますか? zzz... [1] 枕 [2] ふとん [3] 子守歌 2 zzz...zzz... zzz... [1] 枕 [2] ふとん [3] 子守歌 3 zzz...zzz...zzz... zzz...zzz...zzz...zzz... [1] 枕 [2] ふとん [3] 子守歌 3 zzz...zzz...zzz...zzz...zzz...zzz...zzz...zzz... にゃんこはもう少し眠りたかったようです。 e. 考察 予想通りに結果が表示された。 f. 参考文献 西村先生のHP 〜るびおっち〜 http://roy/~madoka/2007/r2/07/07-11-rubiocci.html C.( intsum.rb ) a. 考えた設定 1から入力した整数までの和を求める。偶数は - 奇数は + の計算をする。 b. プログラムコード #!/usr/koeki/bin/ruby if ARGV[0] == nil STDERR.puts("整数の和を求めます。数字を入力して下さい。\n") exit(1) end x = ARGV[0].to_i ki = 0 guu = 0 1.step(x, 2) do |wa| ki += wa end 2.step(x+1, 2) do |wa| guu += wa end print("答え: ") check = x % 2 if check == 0 printf("%d\n", ki - guu) else check == 1 printf("%d\n", guu - ki) end c. 変更点 additionodd.rb を参考にした。 check = x % 2 の部分で、入力した数値の余りを利用し偶数か奇数かを判断させた。 余りが 1 であった場合は、偶数 - 奇数 の計算をする。 余りが 0 であった場合は、奇数 - 偶数 の計算をする。 d. 結果画面 irsv{c106179}% ./intsum.rb 5 [~/Ruby] 答え: 3 irsv{c106179}% ./intsum.rb 6 [~/Ruby] 答え: -3 e. 考察 irsv{c106179}% bc -l [~/Ruby] 1 - 2 + 3 - 4 + 5 3 quit irsv{c106179}% bc -l [~/Ruby] 1 - 2 + 3 - 4 + 5 - 6 -3 quit よって計算は正しい。 計算の途中式を表示させたかったが、偶数の場合は - 、 奇数の場合は + の記 号つける方法がわからなかった。 予想では、if文 を使えば上手く表示されるはずである。 f. 参考文献 西村先生のHP 〜 続・ガウスくんとルビ緒 〜 http://roy/~madoka/2007/r2/07/07-06-step.html 剰余(割り算の余り)を求める http://www.openspc2.org/reibun/Ruby/calc/006/index.html 3. 感想 Aの onephrase.rb をやったことで times メソッドと for文は同じ働きをしてい ることがわかった。 Cの intsum.rb で偶数を奇数を判断させるにはどうすればいいのか悩んだ。 しかし、割り算の余りを利用することで解決した。