1/22 レコードとオブジェクト,その他


試験について


前回の感想,質問より

Q.
テスト範囲を明確に教えていあただけるとありがたいです。
A.
前回まで,「詳細が決まり次第,情報科学 共通資料(2013年度)のページで公開されます.」と書いていましたが,今年度は公開されないようですね.以下の内容以上の指定はありません.
Q.
どうでもいいのですが、sqrtと**0.5は何が違うんでしょう。 sqrtのほうがいいのかなぁ。
A.
 require 'complex'
を実行した時の定義域や,保証される誤差など,違いは微妙ですね. 位の意味はあると思います.
Q.
比較文字列の数が3つ以上になると計算量が増えそうだと思った
A.
鋭いですね.3つ以上の文字列のアラインメントを求めるのは,Multiple Sequence Alignmentといって,遺伝子(タンパク質)の働きを調べる場合には重要な問題ですが,最適なアラインメントを求めるのに必要な計算量は最悪,文字列の数の指数乗で増えます.そのため,近似的な解を求めるアルゴリズムが使われたりするようです(私の専門ではないので,詳しくは説明できませんが).
Q.
なぜ[i-1 .. i-1]というような書き方をしなければエラーが発生するのか訳が分からないよ。
文字列sのi-1番目だけからなる文字を取り出すのには s[i-1]と書きたくなりますよね.この書き方は新しいRuby処理系では「文字列sのi-1番目だけからなる文字を取り出す」という意味になりますが,教育用計算機システムのRuby処理系も含めて古いRuby処理系では「文字列sのi-1番目だけからなる文字の文字コード(整数)を取り出す」という意味になり,文字列の結合のつもりで「+」とプログラムに書いてあるのに,整数の加算をおこなおうとしてエラーになります.
Q.
今別の講義でjavaを使う機会があるのですが、javaのクラスの定義では引数を設定する段階で、 String s という用に型を宣言しますよね。 これはrubyでは特に必要ないのでしょうか?可読性という観点から行けば宣言している方が読みやすいと思うのですが。
A.
プログラミング言語にはJava言語のように「静的型付け」をおこなう言語と,Ruby言語のような「動的型付け」の言語があります.それぞれ,向き不向きがあり,大規模なプログラムを作成する際は静的片付けをおこなう言語の方が向いているのは確かですね.ただ,静的片付けをおこなう言語は, という点が初級者向けのプログラミング教育には向いていないところがあります.2005年度までは,「情報科学」の前身の「計算機プログラミング1」という講義でJava言語を扱っていましたが,導入部の「電卓として使う」レベルでも,
 import java.io.*;
 class Test{
   public static void main(String[] args){
     System.out.println(1+2);
  }
 }
のようなプログラムを Test.java というファイルに保存した上で,
 javac Test.java
 java Test
を実行して初めて「1+2」が計算できるという具合で,irbを立ち上げて「1+2」を入力するのと比べると,必要な説明の量がかなり違いますね.
Q.
レコードではたとえばPointのaとbを足すのにわざわざpoint_add(a,b)と書かなければならないのが面倒だと感じ ました。a+bでpoint_add(a,b)と同じ働きをするように"+"の定義をかえるような操作ができるとうれしいです。
A.
Ruby言語では, Ruby 1.8.7 リファレンスマニュアル の「演算子式の定義」の機能を使えばそのように書くことはできます(C++でも同様のことはできますが,Java言語ではできません). 教科書ではそこまで説明していませんが.

前回の課題について


投票システム

vote.rbをダウンロードして,ホームディレクトリに保存してください.ドックからターミナルを起動して,
ruby vote.rb 選択肢番号
のように使います.

今日の練習,投票

関連リンク


今日の課題