情報科学概論(1年生)
2006.01.23

Back to index page



  1. 本日の作業内容

  2. 出席確認

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

    提出形式

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

  3. 前回の復習

    前回の授業で配列を扱いました.今後も重要になるのは,繰り返しと配列を組み 合わせて利用する方法です.それをもう一度おさらいしておきましょう.まずは, 配列にたくさんの値を代入するスクリプトです.

    ary = []
    
    for i in 0..99
      ary[i] = i * i * (-1)**i   #iの2乗に(-1)のi乗をかけたもの
    end
    
    p ary
    

    配列の要素を順番に取り出して計算に使用したり,出力したりするのも繰り返し の仕事です.次の例で繰り返しとの連携を確認しておい て下さい.

    # 配列の初期化
    
    num = []
    relative = ["start"]
    
    
    # とりあえず,numに乱数を代入
    
    for i in 0..rand(100)
      num[i] = rand(100)
    end
    
    
    # 配列の二つの連続する要素の大小比較を行って,文字列を決定
    
    for i in 1..num.size-1
      if num[i] > num[i-1]
        relative[i] = "increase"
      elsif num[i] < num[i-1]
        relative[i] = "decrease"
      else
        relative[i] = "same"
      end
    end
    
    
    # 二つの配列の要素を並べて出力
    
    for i in 0..num.size-1
      printf "%3d %-10s\n", num[i], relative[i]
    end
    

    ここで,最初のループは乱数配列の生成.次のループは乱数配列の要素が一つ前 の要素と比べて増加しているか減少しているかを判断してその結果を配列に格納 します.最後のループは表示のためのものです.このような配列において注意が 必要なのは繰り返しの回数と配列の要素の個数が一致するかどうかですので,自 分でもよく確認するようにしてください.

    上のスクリプトの中で # で始まっている行はRubyでは処理しません. このような行をコメント行と言います.また,一般に計算機言語ではこのような コメントを適宜置いて自分や他者に分かりやすくすることが行われています.こ のような処理を「コメントアウト」と言うこともあります.

  4. 多重配列

    配列の要素をまた配列とすることも出来ます.これにより2次元のデータや3次 元のデータを効率良く整理することも可能です. 次の例 は月とその月の日数をまとめたものです.

    day = [["Jan", 31], ["Feb", 28], ["Mar", 31], ["Apr", 30], ["May", 31],
    ["Jun", 30], ["Jul", 31], ["Aug", 31], ["Sep", 30], ["Oct", 31], ["Nov",
    30], ["Dec", 31]]
    
    print day[7], "\n"
    print day[7][0], "\n"
    

    このように [ ] で構成される配列の中にさらに [ ] を組み 合わせて多重の配列が作成できます.配列の要素の個数は揃っていなくても構い ませんし,上の例のように文字列と数値が混在しても構いません.

    要素を読み出すための方法は,配列の多重度によって変わります.上の例の結果 を見て確認して下さい.

    また,指数indexの使い方で,次のようなこともできますので,多重配列との違 いに注意して混同しないようにしましょう.

    ary1 = ["abc", "def", "ghi"]
    ary2 = ["abc", ["def", "ghi"], "jkl", "mno"]
    
    puts ary1[1,2]
    puts ary2[1,2]
    

    前回の授業でオブジェクトのサイズを返すメソッド size が,配列に 対しては要素の個数を返すメソッド動作であることを試しました. 多重配列における size メソッドの動作を次のス クリプトで確認しておきましょう.

    ary = [1, 2, [3, 4], 5, [6, 7, 8, 9], 10]
    
    p ary
    p ary.size
    p ary[2].size
    

  5. 配列の演算

    配列の和を取ることが出来ます.次の例は,要素をつなぎ合わせます.

    ary1 = ["abc", "def"]
    ary2 = ["ghi", "jkl"]
    
    p ary1 + ary2
    

  6. 演習

    • 次のような行列を多重配列で作成してみましょう.行の値が入った配列が列 の配列の中に入れ子になっているような形式とします.ここでは別に繰り 返しなどは必要なく,ただ,配列を作ってみて下さい.

      ┌         ┐
      │ 2  3  4 │
      │ 5  7  9 │
      │ 6  8  2 │
      └         ┘
      
          解答例

    • もう一つ,別の配列を下のように用意して行列の積を計算するスクリプトを作ってみま しょう.今回は,計算に繰り返しを使用してください.なお,先ほどの行 列に下の行列を右からかけます.

      ┌   ┐
      │ 3 │
      │ 5 │
      │ 8 │
      └   ┘
      
      ヒント:要素の初期値が0の配列を用意して,自己代入を利用すると短いスクリ プトですみます.

          解答例

  7. 小テスト

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

    Aクラス小テスト
    Bクラス小テスト

  8. 宿題

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

    Aクラス宿題
    Bクラス宿題

  9. 本日の用語

    • 多重配列

      配列の要素が一つの系列指数で並んでいないもの.そのため,要素を指定する指 数indexは一つでは対応できない.配列の「次元」にしたがってindexを増やす必 要がある.例えば,3重配列であれば array[i][j][k] のようになる.


目次ページに戻る