講評: コードは問題ありませんが、日本語を何とかレポート仕様に 直してから送信して下さい。 ---- 11 月 07 日 第 6 回レポート 「コマンドライン入力」 学籍番号:c106XXXX 氏名:XXXXXXXX 語学クラス:英語XX 系:環境系 1.筆記問題 A.集合場所に集まった人を50音順に並べる。集合場所にランダムにきた人達をき ちんと並びかえさせる時。番号が適当な人がきたときにどんどん誰の隣に行って 下さいと言う感じになるので同じだと思う B.電話でのアンケートをする人 年齢,性別,出身地,お住いの地区 C.コマンドライン入力によって入力された複数の数字や文字列は、ARGV[n]の様 な形で、配列としてしまわれる。例えば、program.rbがチケット予約するときに 使うプログラムとする。必要な情報は、名前・電話番号・席番号とする。実際に プログラムを実行し、正しくデータが入力された場合、ARGV[0]はお客様の氏名 ARGV[1]は電話番号ARGV[2]は席情報となる。 2.プログラム ----------------A--------------------- a.考えた設定 筆記問題のBの中身をモデルにprint文の中をかえコマンドラインの中身を変える。 b.プログラム本体 #!/usr/koeki/bin/ruby if ARGV[0] == nil #もし何も入力されていない場合 STDERR.print("対称に情報入力してください\n")#失敗した時のprint文 STDERR.print("年齢 性別 出身地 お住いの地区 の順に入力\n")#失敗した時のprint文 exit(1) #何かしら失敗したときのexit end #if文のend nen = ARGV[0] #コマンドライン配列の一個目の数字 sei = ARGV[1] #コマンドライン配列の二個目の数字 shushinn = ARGV[2] #コマンドライン配列の三個目の数字 chiku = ARGV[3] #コマンドライン配列の四個目の数字 printf("個人情報確認\n") #printf文です printf("年齢: %-10s\n",nen) #printf文です printf("性別: %-10s\n",sei) #printf文です printf("出身地: %-10s\n",shushinn) #printf文です printf("お住いの地区: %-10s\n",chiku) #printf文です c.もとにしたプログラムからの変更点 コマンドラインの変数を変え、プリント文の中身を変えました。 d.結果画面 個人情報確認 年齢: 19 性別: ♂ 出身地: 山形 お住いの地区: 酒田 e.考察 失敗の所のifの設定を変えたかったが無理だったので、諦めてしまった 性別の部分は別にif文を作ってエラーを出せないものかと考えた。 f.参考文献 航空券予約 URL:http://roy/~madoka/2007/r2/06/06-03-airline.html ----------------B--------------------- a.考えた設定 def文を駆使して数字を計算させて最後に表示させる b.プログラム本体 #!/usr/koeki/bin/ruby def factorial(m,n) # defで計算する return m * n # returnで計算をprint文の所に返す。 end # defのendです。 if ARGV[0] == nil #もし何も入力されていない場合 STDERR.print("数字を入力\n") #失敗した時のprint文 STDERR.print("数字を2つ入力してください\n") #失敗した時のprint文 exit(1) #何かしら失敗したときのexit end #if文のend suji = ARGV[0].to_i #コマンドライン配列の一個目の数字 kazu = ARGV[1].to_i #コマンドライン配列の二個目の数字 printf("%s × %s の計算\n",suji,kazu) #print文二つの数字を出す。 factorial(suji,kazu) #def文に代入する printf( "%d * %d = %d\n",suji,kazu,factorial(suji,kazu)) #printfで答えを表示させる c.もとにしたプログラムからの変更点 元にしたプログラムのコマンドラインの変数を変更してdef文をいれた d.結果画面 2 × 8 の計算 2 * 8 = 16 e.考察 コマンドラインの変数がおかしくなってしまった。最初はdefを使わずに計算し ようとしていたが全然駄目だったがdef文でできるようになった。bc-lでも計算 してできたのでよかった。 f.参考文献 航空券予約 URL:http://roy/~madoka/2007/r2/06/06-03-airline.html そのひとつ前の数かける ... URL:http://roy/~madoka/2007/r2/06/06-06-factorial.html ----------------C--------------------- a.考えた設定 def文を使って計算して、while文やif文を駆使してつくる b.プログラム本体 #!/usr/koeki/bin/ruby def keisan(seki,kakeru) # defで計算します return seki * kakeru # returnで計算結果を返す end # def文のendです。 if ARGV[0|1] == nil #もしもARGV[0|1]に何も入力されていなければ STDERR.print("数字が正しく入力されていません!!\n") #何か失敗したときのprint文を表示させる STDERR.print("入力し直してください\n") #何か失敗したときのprint文を表示させる STDERR.print("計算する場合は必ずスペースを空けるようお願いします\n") #何か失敗したときのprint文を表示させる exit(1) #なにかしら失敗したときのexit文 end #if文のend gou = 0 #変数です suji = Array.new #配列を新しく作ることを宣言する while true #while文です if ARGV[gou] == nil #もしARGV[gou] == nilの時whileから抜け出す then break else #それ以外の場合 suji[gou] = ARGV[gou].to_i #ARGV[gou].to_iをsuji[gou]にいれる。 gou += 1 #そうしたらgouにプラス1する end #if文のendです。 end #while文のendです。 print("計算の答えは!?\n") #print文 sleep 2 #ここで2秒間を空ける print("答えは\n") #print文 sleep 2 #print文 k = 0 #変数です kai = 1 #変数です while gou > k #whileで gouがkを超えたとき if k == 0 #もしもkが0の時、配列・数字の一番先頭をだす printf("%d",suji[k]) #print文です else #それ以外の場合配列の要素をだす printf(" * %d",suji[k]) #print文です end #if文のendです kai = keisan(kai,suji[k]) #ふたつの合計をたす。 k += 1 #kにプラス1する end #whileのendです printf(" = %d \n",kai) #print文です。 c.もとにしたプログラムからの変更点 def文をたしたりwhile文を足したりと、全部ごちゃまぜで作りました。 d.結果画面 irsv{c106***}% ./multi2.rb 2 2 2 2 [~/Ruby] 計算の答えは!? 答えは 2 * 2 * 2 * 2 = 16 e.考察 計算式を出してみたりdef文をまた使ったりと今回は、前ならったヤツが活躍し たと思う。bc-lで計算してでたのでよかった。しかし最初は並びかえで作ろうと 思ったが出来なかった。 f.参考文献 航空券予約 URL:http://roy/~madoka/2007/r2/06/06-03-airline.html そのひとつ前の数かける ... URL: http://roy/~madoka/2007/r2/06/06-06-factorial.html 感想 全体的に苦戦したが、cのやつではwhileやif,elseなどを覚えていてできたので 前期で学習したことは無駄ではなかったと言う事を実感しました。