["Ex1.9 g-b", "solution1", "float", 1, 1.0, 1.0, -2.0], ["Ex1.9 g-b", "solution1", "float", (-5+Math.sqrt(13))/6, 3.0, 5.0, 1.0], ["Ex1.9 g-c", "solution2", "float", (1-Math.sqrt(5))/2.0, 1.0, -1.0, -1.0], ["Ex1.9 g-c", "solution2", "float", (-5-Math.sqrt(13))/6, 3.0, 5.0, 1.0],
def feet_to_cm(f,i) 30.48 * (f + i / 12) endのように,iが整数の時に i / 12が整数同士の除算(余りを切り捨てる除算)になってしまう人がいました.これは,
def feet_to_cm(f,i) 30.48 * (f + i / 12.0) endのように書くことで正しいプログラムになります.このような誤りはチェックプログラムを
ruby check.rb ex01.rbのようにして動かしておけば発見できたはずなので,チェックプログラムを動かす習慣をつけてください.
include(Math) def distance(x, y, u, v) sqrt((x - u) ** 2 + (y - v) ** 2) endもちろん,\( \sqrt{x} \) は \( x^{\frac{1}{2}} \) なので以下のように書いても良い.
def distance(x, y, u, v) ((x - u) ** 2 + (y - v) ** 2) ** 0.5 endなお,上のプログラムの0.5を (1/2) とすると整数同士の割り算で0になってします.
include(Math) def det(a, b, c) b ** 2 - 4 * a * c end def solution1(a, b, c) (-b + sqrt(det(a, b, c))) / (2 * a) end def solution2(a, b, c) (-b - sqrt(det(a, b, c))) / (2 * a) end def quadratic(a, b, c, x) a * x ** 2 + b * x + c end2a で割る部分を (-b + sqrt(det(a, b, c))) / (2 * a) でなく,(-b + sqrt(det(a, b, c))) / 2 * a と書くと((-b + sqrt(det(a, b, c))) / 2) * a と解釈されて,左から計算がおこなわれるので注意が必要になります.
def solsub(a, b, c) sqrt(det(a, b, c)) / (2 * a) end def solution1(a, b, c) -b / (2 * a) + solsub(a, b, c) end def solution2(a, b, c) -b / (2 * a) - solsub(a, b, c) endと書けますが,特に簡単にはならないので,この講義では課題の要件から外しました.
mkdir algo17のようにします.そして,ターミナルを開くたびに
cd algo17と入力してからirbを動かしてください.詳しくは,はいぱーワークブック「14.4 コマンドを使ったファイル操作」を参照してください.
cd algo17 unzip allcode.zipを実行してください.
cd algo17を済ませてから,
ruby vote.rb 選択肢番号のように使います.
irbを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」の15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.
cd ~/algo17と入力してください.これらの機能を使うと,irbを抜けずにvoteできます.
ターミナルの基本的な使い方は,はいぱーワークブックの15.2 ターミナルの基本的な使い方を,より高度な使い方は,15.4 ターミナルの便利な使い方を参照してください.
cdというコマンドと「~」の意味は,はいぱーワークブックの14.4 コマンドを使ったファイル操作の14.4.1 ディレクトリを読むと分かります.
iruby notebookを実行すると,Webブラウザ上で対応するタブが開きます.
include(Math)を入力するように書いています. 毎回入力するのが面倒な場合は,ホームディレクトリの下に「.irbrc」というテキストファイルを作り,その中に
include(Math)と書いておくと,irb起動時にこのファイルの中身を実行してくれるので,毎回指定しなくても大丈夫です.ただし,このファイルの実行中にエラーが出ないように正しく記述剃る必要があります.また,
Math.sqrt(2)のような形で指定すれば,
include(Math)は不要です.
ruby check.rb ex01.rbと実行すると,関数を与えた時の入力と出力があっていることが確認できます. 詳しくは,補足説明 (練習問題確認プログラムの使い方)を御覧ください.