10/29 関数から「計算」へ


質問と回答

Q.
講義を休んでしまったのですが,今から課題を提出しても良いでしょうか?
A.
講義中の投票は今からは提出できませんが,その他の課題は試験当日まで提出を 受け付けます.ただ,学習のためにはなるべく早く出しておいた方が良いでしょう.
Q.
これまでの課題の修正や、課題の範囲外でやった問題の解答は、どの掲示板に投稿したらよいですか?
A.
課題や問題に関する講義をやった日の掲示板に投稿してください.
Q.
掲示板に投稿をしたら表示が乱れてしまいました.
A.
CFIVEの掲示板 は wiki 記法でさまざまな整形が行えますが,たまたまwiki記法のコマンドと一致 してしまうと,wiki記法のコマンドと解釈されて思いもよらない整形をされてしまうことがあります.また,行中のタブやスペースは無視されてしまっています. 行頭に半角スペースを入れると「整形済みテキスト」になるので,プログラムには適しています.
Q.
ドットずつ色情報を打ち込むのが非常にめんどくさいのですがどうにかならないでしょうか?
A.
第3章で「繰り返しによる画像の作成」をやりますが、手で入力をする面倒を体験した上で、プログ ラムに繰り返し実行させることのメリットを実感するという意図があってこのようにしています.
Q.
コピー&ペーストでは動いたプログラムをファイルに保存してからloadしたら,
 irb(main):065:0> load("irb/solutions")
 ./irb/solutions:1: warning: else without rescue is useless
 SyntaxError: ./irb/solutions:1: syntax error, unexpected tINTEGER, expecting kDO or '{' or '('
 endnd 0 b**2 - 4*a*c == 0
のようなエラーが出た.
A.
テキストエディタで保存する際の改行コードが「LF(Unix)」ではなく「CR(Mac)」に なっている場合に起きます.miの場合は,メニューで改行コードを選べるので,「LF(Unix)」を選んでください.http://www.ecc.u-tokyo.ac.jp/announcement/2008/10/21_1113.html の操作をするとそれ以降,ファイル作成時にRubyモードを選ぶと「LF(Unix)」が標準になります. 1
Q.
3通り以上の場合分けの時に,「else if」でつなげて最後に「end」を一つ書いたが 「SyntaxError」になってしまった.
A.
else ifと書いても対応する数だけendを入れるとうまくいきます.
 if 条件式1
   式1
 else if 条件式2
   式2
 else
   式3
 end
 end
といった具合です.元々の構文規則で
 if 条件式1
  式1
 else
  式4
 end
となっているところの式4がたまたま,
 if 条件式2
  式2
 else
  式3
 end
だったと考えると,endがいくつ必要か分かるでしょう.

なお,Rubyリファレンスマニュアルにあるように,Ruby言語では

 if 条件式1
  式1
 elsif 条件式2
  式2
 elsif 条件式3
  式3
 else
  式4
 end
のようにしてendを一つで済ませる構文も用意されていますが,この講義では扱いません.
Q.
テキストエディタで書いたプログラムを"関数名.rb"として保存し、ターミナル上でirbを一度 終了したうえで、irbを再起動し、load("./関数名.rb")により、ファイルを読み込む際に、関数名の部分に日本語 を用いても大丈夫ですか?
A.
ECCSの環境では一応動くようですが,他の環境にファイルを移動した時の漢字コード問題などで 問題が生ずることもあるので,関数名,ファイル名には日本語は用いない方が無難です.
Q.
Rubyには演算子「++」はないのですか?
A.
「x++」のように書く代わりに,「x+=1」と書くことはできます.
Q.
solutionsは解の個数が無限個の時は何を返すのがいいのでしょうか?
A.
問題文が想定していない入力にどう対処するかは難しいですね.「対応せよ」と 書かれていない今回のような課題問題では対応する必要はありませnが,実際に他の 人と共同で動かすプログラムを作る場合には,気がついたら,「正常な答えと 区別が付く値(たとえば,この問題では -1, nilなど)を返す」,「例外を発生 させる」などの方針を決めてプログラミングした上で,ドキュメントに残すこ とが重要です.

前回までの補足


前回の課題について


投票システム

サーバIPアドレス,学生証番号を入れるのが面倒だと思われるので,投票用のスクリプトをnewvote.rbに置き換えました.ダウンロードして,ホームディレクトリに保存します.ドックからターミナルを起動して,
ruby newvote.rb 選択肢番号
のように使います.

練習,投票

関連リンク


今日の課題