講評: 確認しました。 失敗した部分にきちんと説明をつけているようですね。 間違えたところを乗り越えることが大事です。 今後も集中して臨みましょう。 ---- 11 月 07 日 第 6 回レポート 「コマンドライン入力」 学籍番号 : c106XXXX 氏名 : XXXXXXXX 語学クラス : 中国語クラス 系 : 社会系 ------------------------------------------------------------ 1. 本棚の整理 バイト先でのボトルキープのお酒の名前の整理 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - B. TVショッピングのオペレーター お客さんの、名前、欲しい商品、配達先の郵便番号、住所、電話番号、支払方法 等。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C. ./program.rb ロディオボーイ 999-3333 酒田市飯森山2-2 坂田 須木子 090-99990-9999 一括 と、ktermに入力すると、program.rbの mono = ARGV[0] に ロディオボーイ が、入り adress = ARGV[1] に 999-3333 が、入り adress2 = ARGV[2] に 酒田市飯森山2-2 が、入り name = ARGV[3] に 坂田 須木子 が、入り tel = ARGV[4] に 090-99990-9999 が、入り kane = ARGV[5] に 一括 が、入る。 ------------------------------------------------------------ 2. A. ☆考えた設定☆ TVショッピングのオペレーターの業務プログラム ☆作成したプログラムコード☆ reservation.rb #!/usr/koeki/bin/ruby if ARGV[0] == nil || ARGV[1] == nil || ARGV[2] == nil || ARGV[3] == nil || ARGV[4] == nil || ARGV[5] == nil || ARGV[6] == nil STDERR.print("コマンドライン入力に失敗しました\n") STDERR.print("./ruby kadai6.rb\n 商品名\n 郵便番号\n 住所\n 氏名\n 連絡先\n 支払方法\n\nの順に入力\n\n") STDERR.print("(例: ./ruby kadai6.rb ろでお 998-0055 酒田1-2 齋藤 糖子 090-8800-0044 三回払い)のように入力\n\n") exit(1) end mono = ARGV[0] address = ARGV[1] address2 = ARGV[2] name = ARGV[3] name2 = ARGV[4] tel = ARGV[5] kane = ARGV[6] name3 = name + " " + name2 #名前の合体 苗字と大角のスペースとし名前がくっつく printf("\n予約情報確認\n") printf("商品名:%s\n",mono) printf("郵便番号: %s\n",address) printf("住所: %s\n",address2) printf("氏名: %s%s\n",name,name2) printf("連絡先: %s\n",tel) printf("支払方法: %s\n",kane) open ("ticket.out","w") do | x | x.print"+------------------------------+\n" x.print"|+++++++++++発送伝票+++++++++++|\n" x.print"+------------------------------+\n" x.printf("|商品名 :%-21s|\n",mono) x.printf("|郵便番号:%-21s|\n",address) x.printf("|住所 :%-21s|\n",address2) x.printf("|氏名 :%-21s|\n",name3) x.printf("|連絡先 :%-21s|\n",tel) x.printf("|支払方法:%-21s|\n",kane) x.print"+------------------------------+\n" #||の間を全体で30文字として、%-21sの前までで半角で9文字使ってるから30-9で21となり、%-21sとなる。 end ☆もとにしたプログラムからの変更点☆ ARGVを増やした。 nilも増やし発送伝票に、入力漏れがないようにした。 openメソットを使い発券できるようにした。 ☆プログラムを実行した結果画面☆ (正しい入力が出来た時の 結果画面 例 ) irsv{c106090}% ./reservation.rb ろでお 998-0055 酒田1-2 齋藤 糖子 090-8800-0044 三回払い 予約情報確認 商品名:ろでお 郵便番号: 998-0055 住所: 酒田1-2 氏名: 齋藤糖子 連絡先: 090-8800-0044 支払方法: 三回払い irsv{c106090}% cat ticket.out [~/Ruby] +------------------------------+ |+++++++++++発送伝票+++++++++++| +------------------------------+ |商品名 :ろでお | |郵便番号:998-0055 | |住所 :酒田1-2 | |氏名 :齋藤 糖子 | |連絡先 :090-8800-0044 | |支払方法:三回払い | +------------------------------+ (入力漏れがあった時の 結果画面 例 ) irsv{c106090}% ./reservation.rb ろでお 998-0055 酒田1-2 齋藤 糖子 [~/Ruby] コマンドライン入力に失敗しました ./ruby kadai6.rb 商品名 郵便番号 住所 氏名 連絡先 支払方法 の順に入力 例: (./ruby kadai6.rb ろでお 998-0055 酒田1-2 齋藤 糖子 090-8800-0044 三回払い)のように入力 ☆参考文献☆ まどか先生のHP(予約プログラム) http://roy/~madoka/2007/r2/06/06-03-airline.html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - B. ☆考えた設定☆ 2つの数値をコマンドラインに入力し、 かけ算して求めるプログラム ☆作成したプログラムコード☆ twomulti.rb #!/usr/koeki/bin/ruby if ARGV[0] == nil || ARGV[1] == nil STDERR.print("コマンドラインがありません。\n") STDERR.print("./twomulti.rb 30 80のように後ろに二つ数字を入力して下さい。\n") exit(1) end x = ARGV[0].to_i y = ARGV[1].to_i #.to_iがないと文字列として扱ってしまい、数字として扱わせるためにつける z=x*y #求めたい数値 printf("%d * %d = %d\n",x,y,z) ☆もとにしたプログラムからの変更点☆ ARGV[ ]に.to_iをつけた。 nilも増やし入力漏れがないようにした。 ☆プログラムを実行した結果画面☆ (正しい入力が出来た時の 結果画面 例 ) irsv{c106090}% ./twomulti.rb 40 3 [~/Ruby] 40 * 3 = 120 irsv{c106090}% ./twomulti.rb 30 80 [~/Ruby] 30 * 80 = 2400 (入力漏れがあった時の 結果画面 例 ) irsv{c106090}% ./twomulti.rb [~/Ruby] コマンドラインがありません。 ./twomulti.rb 30 80のように後ろに二つ数字を入力して下さい。 ☆導き出された結果の考察☆ irsv{c106090}% bc -l [~/Ruby] 40 * 3 120 irsv{c106090}% bc -l [~/Ruby] 30 * 80 2400 ☆参考文献☆ まどか先生のHP(予約プログラム) http://roy/~madoka/2007/r2/06/06-03-airline.html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C. ☆考えた設定☆ 任意の数の数値をコマンドライン入力し、 かけ算して求めるプログラム ☆作成したプログラムコード☆ multi2.rb #!/usr/koeki/bin/ruby if ARGV[0] == nil STDERR.print("コマンドラインがありません。\n") STDERR.print("./multi2.rb 3 60 4 のように、掛けたい数字を入力して下さい。\n") exit(1) end i=0 sum=1 #これはかけ算だから1にした x=[] while true if ARGV[i]==nil #エンターを押せば終了 break end x[i]=ARGV[i].to_i i+=1 end #配列にすることでコマンドラインを無限に出来るようにした。 #.to_iがないと文字列として扱ってしまい、数字として扱わせるためにつける for k in x #x配列から1こづつ取り出して、変数kにいれる。 sum *= k #kをかけつづける end printf("%d\n",sum) ☆もとにしたプログラムからの変更点☆ ARGV配列を、変数を使い表した。 while trueを、付けることで、コマンドラインを無限に出来るようにした。 for文を使って、コマンドラインで、入力した数値を繰り返し掛けるようにし た。 ☆プログラムを実行した結果画面☆ (正しい入力が出来た時の 結果画面 例 ) irsv{c106090}% ./multi2.rb 2 2 2 2 2 2 2 2 2 2 [~/Ruby] 1024 irsv{c106090}% ./multi2.rb 3 4 5 6 [~/Ruby] 360 (入力漏れがあった時の 結果画面 例 ) irsv{c106090}% ./multi2.rb [~/Ruby] コマンドラインがありません。 ./mult ☆導き出された結果の考察☆ irsv{c106090}% bc -l [~/Ruby] 2*2*2*2*2*2*2*2*2*2 1024 irsv{c106090}% bc -l [~/Ruby] 3*4*5*6 360 ☆参考文献☆ まどか先生のHP(予約プログラム) http://roy/~madoka/2007/r2/06/06-03-airline.html ------------------------------------------------------------- 3. 感想 reservation.rbのプログラムの時に、 address = ARGV[1].to_iと、.to_iを付けたら、数値として扱ってしまい 998-0055は、998-55となってしまった。 telも、同様に、数値の頭のにある 0 が消えて 090-0055-0378が、 90-55-378と、表示されたので、 .to_iを外し、%dではなく%sとした。