9/30 数の計算と関数(3)・配列による画像の表示(1)
緊急連絡
センターからメールで連絡があったと思いますが,7/1以降パスワードを変更していない人は,ITC-LMS, UTask-Webを利用できなくなっています.また,明日から端末も利用できなくなります.ログインしたら,すぐに
学生: 学生共通アカウント / UTokyo Student Account のサイトを見てパスワードを変更してください.1時間以内にITC-LMS, UTask-Webが利用できるようになります.
なお,パスワードを複数回変更して昔使ったパスワードに戻す行為は危険なのでやめてください.
なお,パスワード変更後にログインすると「キーチェーンのロック解除」というダイアログが頻繁に表れるようになります.教育用計算機システムのページの「問い合わせ」->「よくある質問」をたどるとパスワードを変更したら「キーチェーンのロック解除」が出るようになったに対処法が書かれています.古いパスワードを忘れていることが多いと思うので,その場合はページの一番下の「古いパスワードを忘れてしまった場合は,キーチェーンを削除して作り直す」の説明に従って下さい.
これでも治らない場合は,http://www.sodan.ecc.u-tokyo.ac.jp/?page_id=2614も参照してください.
前回の感想,質問より
- Q.
- sqrtのかわりに**(1/2)としたらエラーをはいた。**0.5にしたら動いたのでおそらくintとかそういう系のエラーであったと思われる。
- A.
-
はい.1/2 は整数同士の割り算なので,0 になります.x**0は1なので一般にはsqrt(x)とは異なる結果になりますね.自分で気がついたのは素晴らしいと思います.
「エラーをはいた」と書いてありますが,
ruby check.rb ex01.rb
の実行で結果が合わなかったということでしょうか?
- Q.
-
distanceのプログラムを作成しましたが、以下のようなエラーメッセージが表示されました。
irb(main):001:0> distance(x,y,u,v)
NameError: undefined local variable or method `x' for main:Object
from (irb):1
from /usr/bin/irb:12:in `'
- A.
-
distanceは2次元上の点(x,y)と(u,v)の間の距離を「計算する」関数を作成すれば良いということで,正しく定義されているようです.
ここでは「計算」をさせるのでdistanceの引数としては具体的な数値を与える必要があります.たとえば,点 (2,3)と点(4,5)の間の距離を計算するために,
distance(2,3,4,5)
のような入力を与えてみると期待する結果が返ると思います.
- Q.
- algo15にdistance,.rbとして保存して
load("./distance")
を使っていたターミナルで入力しましたが、ファイルが展開されなかった。別タブで入り直してから入力するとちゃんと展開できたが、なぜそのようなことが起きたか疑問だった。
- A.
-
rb の中から
load("distance.rb")
を実行して(質問では「.rb」が抜けていましたが) distance.rb をロードするには,
- distance.rb というファイルがホームフォルダ(ホームディレクトリ)の下の algo15 というフォルダ(ディレクトリ)の下に作成されている
- ターミナルで irb を実行する前に 「cd ~/algo15」(ターミナル起動直後の場合は「cd algo15」でも大丈夫) を実行してカレントディレクトリをalgo15に設定している
という条件が満たされている必要があります.症状から考えて,2番めの条件が満たされていない時にロードに失敗したのだと思われます.このあたりは,はいぱーワークブックの14.4 コマンドを使ったファイル操作を読んで理解しておいてください.
- Q.
-
irb(main):046:0> load ("./distance.rb")
SyntaxError: /home07/8176398389/algo15/distance.rb:1: syntax error, unexpected keyword_def, expecting end-of-input
endqrt((u-x)**2+(v-y)**2)
^
from (irb):46:in `load'
from (irb):46
from /usr/bin/irb:12:in `'
このようなエラーが出て動きませんでした。
- A.
-
これは,テキストエディタmiでファイルを作成した際に改行コードが「CR(Mac)」になっている時の症状ですね.前回の講義ページに改行コードを「LF(UNIX)」にして保存する方法を書いてあるので,そこを参照してファイルを保存し直してください.
前回の課題について
- ITC-LMSの掲示板9/23の課題,質問への書き込みは 9/30 14:00現在で 65名が済んでいます.
- distance, feet_to_cm, pound_to_kg を提出してくれた人が多かったのですが,自分で先の分の練習問題を解いた人もいました.
- 目立った誤りは,改行コード(が「LF(Unix)」ではなく「CR(Mac)」でファイル保存されていた),整数同士の除算(余りを切り捨てる除算で計算されてしまう),include(Math)忘れでした.
補足
- miの改行コードの変更は,miを立ち上げてメニューバーから「mi」->「モード設定」を選んでください.
の画面が出るので,モードを「Ruby」にして,改行コードを「LF(UNIX)」にして,ウィンドウを閉じてください.以降は,ファイル作成のさいに,「ファイル」->「新規」->「Ruby」で作成すると正しい改行コードが設定されているはずです.
- miで一度改行コードを「CR(Mac)」を選んで作成してしまったファイルを「LF(UNIX)」にして保存し直すには,ファイルを開いた状態で,メニューバーから「ドキュメント」->「改行コード」->「LF(UNIX)」を選んで,何かの編集をしてから(たとえばスペースを入れて削除)保存してください.
- Finderの中でダブルクリックするだけでmiを起動できるようにしたい人は,Rubyソースファイルをmiと関連付けするを読んで設定してください.
- 第1章で,irbを起動直後に,
include(Math)
を入力するように書いていますが,毎回入力するのが面倒な場合は,ホームディレクトリの下に「.irbrc」というテキストファイルを作り,その中に
include(Math)
と書いておくと,irb起動時にこのファイルの中身を実行してくれるので,毎回指定しなくても大丈夫です.ただし,このファイルの実行中にエラーが出ないように正しく記述剃る必要があります.また,
Math.sqrt(2)
のような形で指定すれば,
include(Math)
は不要です.
投票システム
vote.rbをダウンロードして,ホームディレクトリに保存してください.ドックからターミナルを起動して,
ruby vote.rb 選択肢番号
のように使います.
今日の練習,投票
関連リンク
教科書の補足
今日の課題
- 講義中に投票を求められるので,投票システムを使って投票をしてください.
- ITC-LMSの掲示板9/30の課題,質問に以下の内容を書き込んでください.プログラムを除いて100文字以上は書き込みをお願いします.
- 講義で用いた練習問題に対して自分が書いたプログラムと説明.プログラムが正しく動かなかった場合も,動かないプログラムとエラーメッセージを書きこんでください.講義で用いなかった教科書の練習問題に対して書きたい人は書きこんでも構いません.
- プログラムは基本的には,本文の中に埋め込むのが他の人の参考になって良いの
ですが,本文が長すぎて(1300文字という制限値があるかもしれません)投稿の際にエラーが出る場合は,プログラムは添付ファイルにして投稿してください.