講評: 確認しました。number == 0 のときと それ以外の動作が同じなのですが、 やりかけたままだったのでしょうか? ---- 11 月 07 日 第 6 回レポート 「コマンドライン入力」 学籍番号 :C106XXXX 氏名 :XXXXXXXX 語学クラス:英語 系 :社会系 1 A 名簿を作るときに、このような仕組みが使われていると思う。 名簿を、あいうえお順や学籍番号順に並べるときに 例えばタザワという名前を基準に考えると、アイタはタザワより前に名簿を作る ことが出来る。 また、学籍番号が14の場合、56は14より後に名簿を作ることが出来る。 B インターネットで顧客に、誕生日にジャスコ(顧客のいる地域) で買い物をするとお得だという情報を送信するとき、 顧客の名前 顧客のメールアドレス 顧客の誕生日 顧客の住所 が必要になる。 C コマンドラインで入力するとき name = ARGV[0] → 顧客の名前 mail = ARGV[1] → 顧客のメールアドレス birthday = ARGV[2] → 顧客の誕生日 address = ARGV[3] → 顧客の住所 が、それぞれの配列にしまわれている。 2 A a. 考えた設定 レストランでの予約をし、正常に予約ができたら 予約情報による発券が出来るプログラム。 b. 作成したプログラムコードそのもの #!/usr/koeki/bin/ruby if ARGV[0] == nil STDERR.print("予約情報に不備があります。\n") STDERR.print("例: 姓 \名 \人数 \コースの順に入力しましょう。\n") exit(1) end firstname = ARGV[0] lastname = ARGV[1] people = ARGV[2] food = ARGV[3] printf("予約情報確認\n") printf("氏名: %-10s%-10s\n",firstname,lastname) printf("人数: %-10s\n",people) printf("コース: %-10s\n",food) open("reservation.txt","w") do |restaurant| restaurant.printf("氏名: %-10s%-10s\n",firstname,lastname) restaurant.printf("人数: %-10s\n",people) restaurant.printf("コース: %-10s\n",food) end c. もとにしたプログラムからの変更点 airline.rb をもとに変数を変更した。 surname → firstnam prenom → lastname departure → people arrival → food また ファイルに書き込むには を参考に open("書き込むデータ","w") do |変数| end をプログラムの内容に合うように変更した。 d. プログラムを実行した結果画面 ●正常に予約された場合 irsv{c106145}% ./reservation.rb 田澤 祥子 3 梅 [~/Ruby] 予約情報確認 氏名: 田澤 祥子 人数: 3 コース: 梅 irsv{c106145}% cat reservation.txt [~/Ruby] 氏名: 田澤 祥子 人数: 3 コース: 梅 ●正常に予約されない場合 irsv{c106145}% ./reservation.rb [~/Ruby] 予約情報に不備があります。 例: 姓 名 人数 コースの順に入力しましょう。 e. 導き出された結果の考察 プログラムで作成した通りに、実行された。 f. 参考文献 西村先生のHP 予約プログラム http://roy/~madoka/2007/r2/06/06-03-airline.html ファイルに書き込むには http://roy/~madoka/2007/r1/08/08-09-openwrite.html B a. 考えた設定 数値を2つ入力すると、かけ算されるプログラム。 b. 作成したプログラムコードそのもの #!/usr/koeki/bin/ruby if ARGV[0] == nil STDERR.print("数値を2つ入力して下さい。\n") exit(1) end number = ARGV[0].to_i figure = ARGV[1].to_i answer =0 answer =number * figure printf("数値: %d*%d\n",number,figure) printf("答え: =%d\n",answer) c. もとにしたプログラムからの変更点 airline.rb を参考に変数を変更した。 surname → number prenom → figure d. プログラムを実行した結果画面 ●正常に入力された場合 irsv{c106145}% ./twomulti.rb 3 4 [~/Ruby] 数値: 3*4 答え: =12 ●正常に入力されない場合 irsv{c106145}% ./twomulti.rb [~/Ruby] 数値を2つ入力して下さい。 ●数値が1つしか入力されない場合 irsv{c106145}% ./twomulti.rb 3 [~/Ruby] 数値: 3*0 答え: =0 irsv{c106145}% ./twomulti.rb 35 [~/Ruby] 数値: 35*0 答え: =0 e. 導き出された結果の考察 正常に入力された場合 irsv{c106145}% bc -l [~/Ruby] 3*4 12 quite 計算は正しかった。 また、正常に入力されない場合 エラーメッセージがきちんと表示された。 しかし、数値を1つしか入力しない場合 数値*0の計算になってしまった。 f. 参考文献 西村先生のHP 予約プログラム http://roy/~madoka/2007/r2/06/06-03-airline.html a. 考えた設定 好きな数値を入力すると、掛け算するプログラム b. 作成したプログラムコードそのもの #!/usr/koeki/bin/ruby if ARGV[0] == nil STDERR.print("数値を入力して下さい。\n") STDERR.print("入力された数値をかけ算します。\n") exit(1) # 数値が入力されない場合は強制終了 end n = 0 answer = Array.new while true if ARGV[n] == nil then break else answer[n] = ARGV[n].to_i n += 1 end end number = 0 result = 1 while n > number if number == 0 printf(" %d",answer[number]) else printf("* %d",answer[number]) end result *= answer[number] number += 1 end printf("= %d\n",result) c. もとにしたプログラムからの変更点 whlie-end を2つ使い 任意の計算ができるように変更した。 d. プログラムを実行した結果画面 ● 正常に登録した場合 irsv{c106145}% ./multi2.rb 23 4 5 [~/Ruby] 23* 4* 5= 460 irsv{c106145}% ./multi2.rb 7 8 9 [~/Ruby] 7* 8* 9= 504 irsv{c106145}% ./multi2.rb 1 2 3 4 5 6 7 [~/Ruby] 1* 2* 3* 4* 5* 6* 7= 5040 irsv{c106145}% ./multi2.rb 50 12 33 45 4 5 [~/Ruby] 50* 12* 33* 45* 4* 5= 17820000 ●正常に登録されない場合 irsv{c106145}% ./multi2.rb [~/Ruby] 数値を入力して下さい。 入力された数値をかけ算します。 e. 導き出された結果の考察 irsv{c106145}% bc -l [~/Ruby] 23*4*5 460 7*8*9 504 1*2*3*4*5*6*7 5040 50*12*33*45*4*5 17820000 quite 計算は正しかった。 f. 参考文献 西村先生のHP 反復計算の構造 http://roy/~madoka/2007/r1/03/03-02-review_while.html 3 今回のレポートで、コマンドライン入力という方法でのプログラム作成が 楽しかった。 コマンド入力での方法は、インターネットでの予約など 必要な情報を入力するさいに、とても便利な方法だと思った。 前回のレポートより、講義で学んだことを生かして プログラムを作成出来たので、よかったです。