情報科学概論(再履修)
2004.11.26

Back to index page



  1. 本日の作業内容

  2. 出席確認

    電子メールで出席確認をします.宛先など以下の情報を用いてメールを作成し, 出席申告してください.なお,キーワードは授業中に紹介します.

    提出形式

    宛先 justice@mag.shimane-u.ac.jp
    件名 AttendR11-26_ruby_s0340**
    本文 学生番号
    氏名
    キーワード
     
    (改行)
    (改行)
    キーワードは授業中に紹介
    注意 「件名」および「添付書類名」の**をそのままにしないで,必ず自分の学生番号 に修正して下さい.また,ABクラス別は指示にしたがって下さい.

  3. unless

    if と意味が逆になるのが unless 文です.これも英語の意 味そのままですので,「もし〜でなければ」となります.すなわち,if 文では条件が「真」のときに処理が実行されましたが,unless では,条件が「偽」のときに処理が行われます.

    a = 10
    b = rand(2)
    
    if b != 0
      div = a / b
    else
      div = "不可能"
    end
    
    printf "a = %d, b = %d\n", a, b
    print "a / b = ", div, "\n"
    

    上の例では if 文を使用しています.これを変 換してみると,次の例のようになります.

    a = 10
    b = rand(2)
    
    unless b == 0
      div = a / b
    else
      div = "不可能"
    end
    
    printf "a = %d, b = %d\n", a, b
    print "a / b = ", div, "\n"
    

    unless 文においても else は使えますが,elsif に相当するものはありません.注意してください.

  4. case

    いくつかの選択肢について場合分けする場合に,elsif を用いること が可能であることは先週紹介しました.条件式によってはここで紹介する case 文を使用する方が簡単になる場合もあります. 次の例は,m として与えた月が何日あるかを返すスクリプトです.

    m = rand(12) + 1
    
    case m
    when 2
      d = "28 or 29"
    when 4,6,9,11
      d = "30"
    else
      d = "31"
    end
    
    printf "%d月は%s日.\n", m, d
    

    when による条件指定はいくつでも置くことが可能です.また,上記の 例のように,一つの when のところに複数の条件を置くことも可能で す.

    when による場合分けはより柔軟な指定方法が可能です. 次の例は範囲指定するものです.

    a = (rand(30) - 10) / 10.0
    
    case a
    when 0..1
      d = "in"
    else
      d = "out of"
    end
    
    printf "The number is %s the range 0 ≦ x ≦ 1.\n", d
    

    この例では引数として与えた数値が0と1の範囲内にあるかを判定しています.す なわち,0 ≦ x ≦ 1 を判定しています.注意するのは,範囲指定でも 両側が決まっていないもの,例えば,正か負かを判定するような場合にはちょっ とした工夫が必要なことです.数値が正であるか,負であるか,それとも0であ るかを判定するには,次のようにします.

    a = (rand(30) - 10) / 10.0
    
    case a
    when 0
      d = "zero"
    when 0..(1.0/0)
      d = "positive"
    else
      d = "negative"
    end
    
    printf "The number is %s.\n", d
    

    また,「以上」や「以下」の判定は実現できますが,「大なり」「小なり」は工 夫が必要です.上の例では先に0であるかを判定させておいて,その後で正の判 定に移るようにしています.

  5. 演習

    • 例題の改良

      上のふたつのスクリプトは乱数を利用していますが,発生させた乱数が何である かを表示する部分が無いために,正しい処理となっているのか確認できません. 改良してみましょう.

    • 元号判定

      先週の授業で紹介した西暦から元号への変換について,case 文に変換 することを試してみましょう.年の判定の方をcase 文に変換し,月の 方は if 文のままで試してみるのが,簡単です.最初の年月日の指定 は次のようにするのが良いでしょう.ただ,動作を確認するためには重要な年月 を当てて試す必要があるので,必要に応じてコメントアウトして使用することも 練習してください.

      year = rand(150) + 1868
      month = rand(12) + 1
      

    解答例は後から紹介します.

  6. 小テスト

    授業の終わりに小テストを実施します.アナウンスに注意していて下さい.

    再履修クラス小テスト

  7. 宿題

    宿題に関する案内が授業の終わりに紹介されます.注意にしたがって提出してく ださい.

    再履修クラス宿題

  8. 本日の用語

    • unless

      条件式が偽のときに与えられた処理をする if と逆の構文

    • case

      複数の場合分けに対応できる条件判断法

    • ..

      範囲の指定を表す記号.1..5 のように書くと1以上5以下の数が該当 する.


目次ページに戻る