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

Back to index page



  1. 本日の作業内容

  2. 出席確認

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

    提出形式

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

  3. 多重 for ループ

    for ループは何重にでも重ねることが出来ます.条件分岐のときの 「入れ子」と同じ考え方ですが,繰りかえしになる分だけ見た目がややこしくな ります.先ずは,2重になった簡単な例を見てみましょう.

    for i in 1..3
      printf "外側ループ %d 回目\n", i
      for j in 1..2
        printf "  内側ループ %d 回目\n", j
      end
      printf "  内側ループ終了\n"
    end
    
    printf "外側ループ終了\n"
    

    フローチャートでは図1のようになります.

    図1 二重の for ループの例

    結果の表示を良く見て下さい.出力結果の中でどの変数がいつ出力されているか, どの行が実行されているかをじっくり眺めてループの回り方を理解して下さい.

    こんどはより複雑な例を見てみましょう. 次の例 は3重にループが回るスクリプトです.

    for i in 1..3
      for j in 1..4
        for k in 1..5
          printf "i = %d, j = %d, k = %d\n", i, j, k
        end
      end
    end
    

    このループはトータルで60回回りますが,どのような順番でループが回っているかは 結果の方を良く見て下さい.kに関する一番内側のループが全部終わったらjの値 が一つ増えて行き,jが全部終わったらiが増えてまた順に実行して行くようになっ ているのが分かるかと思います.このようなループの回り方を理解しておくこと が大事です.

    先ほどの例をほんの少し改良してみましょう. 次のスクリプト ではどうなるでしょうか

    for i in 1..3
      for j in i..4
        for k in j..5
          printf "i = %d, j = %d, k = %d\n", i, j, k
        end
      end
    end
    

    どのような違いがあるのか,結果の方を良く見て下さい.

  4. 行列要素表示

    多重のループを活用すると,数値や文字などを2次元に配置させることが出来る ようになります.これは,数学の行列要素を表示するのにも役立ちます.

    A11 A12 A13 
    A21 A22 A23 
    A31 A32 A33
    

    上に示すような行列の要素を表示することを考えてみましょう.ここで,添字の 数字はループのカウンタを利用して行います.2重のループとなりますが,一番 内側のループで要素を3個表示したら一旦抜けだし,外側のループで処理をする, という流れになるのが分かるでしょうか.を示しま す.

    for i in 1..3
      for j in 1..3
        printf "A%d%d ", i, j
      end
      printf "\n"
    end
    

    これは3×3の行列ですので,要素の表示は全部で9個,すなわち9回要素を出 力します.しかし,トータルの行数は3行なので改行文字の出力は3回です.9 回回るループと3回しか回らないループを用意して,役割を良く考える必要があ ります.

  5. 演習

    • 次に示すような行列の要素を表示させてみましょう.ただし,数字部分 はループカウンタを利用することとします.

      A11 A12 A13 A14 A15
      A21 A22 A23 A24 A25 
      A31 A32 A33 A34 A35
      A41 A42 A43 A44 A45
      

        解答例

    • 次のような文字列を表示してみましょう.

      01201201201
      0120120120
      012012012
      01201201
      0120120
      012012
      01201
      0120
      012
      01
      0
      

        解答例

    • 次に示すようなランダムなモザイク模様的なテキスト出力に挑戦してみましょ う.これには乱数を 利用しています.乱数ですから,実行するたびに結果は異なるものとなり ます.また,表示には文字としての"□"と"■"を用いています.この文字 は自分で好きなものに変更しても構いません.

      □□□□□□■□□□■□□□■■
      ■□■■□■■■□■■□■□□■
      ■■■□■□□□■□■■■□■□
      □■□□□■■□□□□□■□□□
      ■□□□■□□□■■■■■□□□
      □□□■■■■■■■□■■□■■
      □■■■□■■■■■□□□□□□
      □□■■□□■□■□■□□□■□
      □■□□□■□■■■■■□■□□
      □□■■□□■□□□□□□□■□
      □■■□□■□■□■□■□□□□
      ■■□■□■□□□■□□■□■■
      ■■■□■□□■□■□■□■■□
      ■□■□■■■■□■□□■□□■
      □■□■□■□■■■■■■□■■
      ■■□■■■□■■■■□■■□■
      

        解答例

    • 次のような規則性のあるパターンはどうでしょうか.試してみましょう.

      ■□□□□□□□□□□□□□□■
      □■□□□□□□□□□□□□■□
      □□■□□□□□□□□□□■□□
      □□□■□□□□□□□□■□□□
      □□□□■□□□□□□■□□□□
      □□□□□■□□□□■□□□□□
      □□□□□□■□□■□□□□□□
      □□□□□□□■■□□□□□□□
      □□□□□□□■■□□□□□□□
      □□□□□□■□□■□□□□□□
      □□□□□■□□□□■□□□□□
      □□□□■□□□□□□■□□□□
      □□□■□□□□□□□□■□□□
      □□■□□□□□□□□□□■□□
      □■□□□□□□□□□□□□■□
      ■□□□□□□□□□□□□□□■
      

        解答例

  6. 小テスト

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

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

  7. 宿題

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

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

  8. 本日の用語


目次ページに戻る