講評: 2 つ以上情報が抜けている場合を調べると、もう少し仕組みを 理解できたのではないかと思います。 ---- 学籍番号:C106XXXX 氏名:XXXXXXXX 語学クラス:英語XX 系:社会系 筆記問題 1. トランプの並べ替えで使われた考え方について、 日常生活において似て いる仕組みを発見し、根拠とともに答えよ。 学生を出席番号順に並べるときの処理 例えば、入学した学生をあいうえお順に並べて番号をつけるときにquicksort のように並べ替えでしていると思ったのでこれにしました。 2. 電話などによるオペレーターの仕事を一つ選び、 どのような情報を必要 とするか、考えよ。 インターネット接続に関するオペレーター 必要とする情報としては 登録者名 お住いの地域 マンション住まいか プロバイダ契約 3. 上記の情報をコマンドライン入力したときに、 ARGV 配列にしまわれてい るようすを説明せよ。 プログラム名は仮に program.rb とする。 ARGV[0]にまず最初に出力される文字、航空券のプログラムで言えば苗字が入 り、ARGV[1]には次に出力される文字、名前が入るなどして、 ARGV[0]から次々 と1、2、3と続く配列番号に入るようになっている。 例 契約内容 氏名: 佐藤 貴洋 お住い地域(都道府県): 山形県 マンション住まい(yes or no): no プロバイダ契約: ocn 以下のプログラムについて、できる範囲まで提出せよ。 1. 上記の情報でもよい。コマンドライン入力によるプログラム エラー処理、予約情報による発券などができると得点が高い。 プログラム #!/usr/koeki/bin/ruby if ARGV[0] == nil STDERR.print("苗字が抜けています\n") exit(1) elsif ARGV[1] == nil STDERR.print("名前がありません\n") exit(1) elsif ARGV[2] == nil STDERR.print("都道府県を入力して下さい\n") exit(1) elsif ARGV[3] == nil STDERR.print("マンション住まいか教えて下さい\n") exit(1) elsif ARGV[4] == nil STDERR.print("プロバイダを決めて下さい\n") exit(1) end surname = ARGV[0] name = ARGV[1] eria = ARGV[2] mansyon = ARGV[3] probaida = ARGV[4] printf("契約内容\n") printf("氏名: %-10s%-10s\n",surname,name) printf("お住い地域(都道府県): %-10s\n",eria) printf("マンション住まい(yes or no): %-10s\n",mansyon) printf("プロバイダ契約: %-10s\n",probaida) open("keiyaku.txt","w") do |naiyou| naiyou.printf("氏名: %-10s%-10s\n",surname,name) naiyou.printf("お住い地域(都道府県): %-10s\n",eria) naiyou.printf("マンション住まい(yes or no): %-10s\n",mansyon) naiyou.printf("プロバイダ契約: %-10s\n",probaida) end 実行結果 irsv{c106107}% ./reservation.rb 佐藤 貴洋 山形県 no ocn [~/Ruby] 契約内容 氏名: 佐藤 貴洋 お住い地域(都道府県): 山形県 マンション住まい(yes or no): no プロバイダ契約: ocn irsv{c106107}% cat keiyaku.txt [~/Ruby] 氏名: 佐藤 貴洋 お住い地域(都道府県): 山形県 マンション住まい(yes or no): no プロバイダ契約: ocn irsv{c106107}% ./reservation.rb 佐藤 貴洋 山形県 no [~/Ruby] プロバイダを決めて下さい irsv{c106107}% ./reservation.rb 佐藤 貴洋 山形県 [~/Ruby] マンション住まいか教えて下さい irsv{c106107}% ./reservation.rb 佐藤 貴洋 [~/Ruby] 都道府県を入力して下さい 2. 2つの数値をコマンドライン入力により与え、 かけ算して求めるプログ ラム twomulti.rb プログラム #!/usr/koeki/bin/ruby def kakeza(ka, su) return ka *= su end kakezan = ARGV[0].to_i suuji = ARGV[1].to_i printf("%d × %d\n",kakezan, suuji) printf("%5d \n", kakeza(kakezan, suuji)) 実行結果 irsv{c106107}% ./twomulti.rb 5 9 [~/Ruby] 5 × 9 45 irsv{c106107}% ./twomulti.rb 30 5 [~/Ruby] 30 × 5 150 計算確かめ irsv{c106107}% bc -l [~/Ruby] 5*9 45 30*5 150 3. 任意の数の数値をコマンドライン入力により与え、 かけ算して求めるプ ログラム プログラム #!/usr/koeki/bin/ruby def kakeza(ka, su, ji) return ka * su * ji end kakezan = ARGV[0].to_i suu = ARGV[1].to_i ji = ARGV[2].to_i printf("%d × %d × %d\n",kakezan, suu, ji) printf("%5d \n", kakeza(kakezan, suu, ji)) 実行結果 irsv{c106107}% ./multi2.rb 5 9 7 [~/Ruby] 5 × 9 × 7 315 計算確かめ irsv{c106107}% bc -l [~/Ruby] 5*9*7 315 quit 3.感想。忘れていたところや、よく復習したところについて述べ、何のどのあたり をを参考に解決したか、などを記せ。 2A.で何処がエラーになっているのかというのを分かるようにした。 かけ算の所でARGVを.to_iするのを忘れて、なぜ間違えているのかTAと一緒に 悩んでしまった。 参考にしたHP 成績処理 (6 June)(ファイルに書き込むには) http://roy/~madoka/2007/r1/08/08-09-openwrite.html プログラム実行時に情報を一緒に入力するには(航空券予約) http://roy/~madoka/2007/r2/06/06-03-airline.html