プログラミング入門 情報科学演習 実習課題 2015.12.07

Back to text page


実習課題

  1. 2重ループの基本

    以下のように表示するプログラムを作成しましょう.

    ( 1, 1) ( 1, 2) ( 1, 3) ( 1, 4) ( 1, 5) ( 1, 6) ( 1, 7) ( 1, 8) ( 1, 9) ( 1,10)
    ( 2, 1) ( 2, 2) ( 2, 3) ( 2, 4) ( 2, 5) ( 2, 6) ( 2, 7) ( 2, 8) ( 2, 9) ( 2,10)
    ( 3, 1) ( 3, 2) ( 3, 3) ( 3, 4) ( 3, 5) ( 3, 6) ( 3, 7) ( 3, 8) ( 3, 9) ( 3,10)
    ( 4, 1) ( 4, 2) ( 4, 3) ( 4, 4) ( 4, 5) ( 4, 6) ( 4, 7) ( 4, 8) ( 4, 9) ( 4,10)
    ( 5, 1) ( 5, 2) ( 5, 3) ( 5, 4) ( 5, 5) ( 5, 6) ( 5, 7) ( 5, 8) ( 5, 9) ( 5,10)
    ( 6, 1) ( 6, 2) ( 6, 3) ( 6, 4) ( 6, 5) ( 6, 6) ( 6, 7) ( 6, 8) ( 6, 9) ( 6,10)
    ( 7, 1) ( 7, 2) ( 7, 3) ( 7, 4) ( 7, 5) ( 7, 6) ( 7, 7) ( 7, 8) ( 7, 9) ( 7,10)
    ( 8, 1) ( 8, 2) ( 8, 3) ( 8, 4) ( 8, 5) ( 8, 6) ( 8, 7) ( 8, 8) ( 8, 9) ( 8,10)
    ( 9, 1) ( 9, 2) ( 9, 3) ( 9, 4) ( 9, 5) ( 9, 6) ( 9, 7) ( 9, 8) ( 9, 9) ( 9,10)
    (10, 1) (10, 2) (10, 3) (10, 4) (10, 5) (10, 6) (10, 7) (10, 8) (10, 9) (10,10)
    

  2. 2重ループの基本その2

    以下のように表示するように変えましょう.

    ( 1, 1)
    ( 2, 1) ( 2, 2)
    ( 3, 1) ( 3, 2) ( 3, 3)
    ( 4, 1) ( 4, 2) ( 4, 3) ( 4, 4)
    ( 5, 1) ( 5, 2) ( 5, 3) ( 5, 4) ( 5, 5)
    ( 6, 1) ( 6, 2) ( 6, 3) ( 6, 4) ( 6, 5) ( 6, 6)
    ( 7, 1) ( 7, 2) ( 7, 3) ( 7, 4) ( 7, 5) ( 7, 6) ( 7, 7)
    ( 8, 1) ( 8, 2) ( 8, 3) ( 8, 4) ( 8, 5) ( 8, 6) ( 8, 7) ( 8, 8)
    ( 9, 1) ( 9, 2) ( 9, 3) ( 9, 4) ( 9, 5) ( 9, 6) ( 9, 7) ( 9, 8) ( 9, 9)
    (10, 1) (10, 2) (10, 3) (10, 4) (10, 5) (10, 6) (10, 7) (10, 8) (10, 9) (10,10)
    

    内側の for 文の式2がポイントです.
  3. 2重ループの基本その3

    これではいかがでしょう?

    ( 1, 1) ( 1, 2) ( 1, 3) ( 1, 4) ( 1, 5) ( 1, 6) ( 1, 7) ( 1, 8) ( 1, 9) ( 1,10)
            ( 2, 2) ( 2, 3) ( 2, 4) ( 2, 5) ( 2, 6) ( 2, 7) ( 2, 8) ( 2, 9) ( 2,10)
                    ( 3, 3) ( 3, 4) ( 3, 5) ( 3, 6) ( 3, 7) ( 3, 8) ( 3, 9) ( 3,10)
                            ( 4, 4) ( 4, 5) ( 4, 6) ( 4, 7) ( 4, 8) ( 4, 9) ( 4,10)
                                    ( 5, 5) ( 5, 6) ( 5, 7) ( 5, 8) ( 5, 9) ( 5,10)
                                            ( 6, 6) ( 6, 7) ( 6, 8) ( 6, 9) ( 6,10)
                                                    ( 7, 7) ( 7, 8) ( 7, 9) ( 7,10)
                                                            ( 8, 8) ( 8, 9) ( 8,10)
                                                                    ( 9, 9) ( 9,10)
                                                                            (10,10)
    

    内側の for 文が2つになります.
  4. グラフィック表示

    ちょっと高度になりますが,三角関数を画面上に表示させてみましょう.

    C言語に用意されている三角関数である sin() cos() を使いますが,このときにはヘッダファイルとしてp.94の6.7節にあるように math.h をインクルードしなければいけません.

    また,コンパイル時にオプションも必要です.

    $ cc -lm hoge.c

    のように,math関数にlinkさせるオプションの lm を付けましょう.

    double 型の実数を利用しておよそ一周期分 sin cos を同時に表示させてみましょう.三角関数の引数は単位がラジアンなので,0から6.3くらいまでの範囲で描かせるときれいです.

                        O                   X
                              O            X
                                   O     X
                                    X   O
                               X           O
                         X                  O
                   X                       O
              X                          O
         X                            O
      X                          O
    X                      O
    X                O
      X        O
         XO
       O      X
    O               X
    O                     X
     O                          X
         O                           X
             O                           X
                  O                        X
                        O                   X
    

    上の例は角度を0から6.5radまで0.3rad刻みでプロットしています.行単位での表示しかできませんので,ちょっとおおざっぱですが,それでも三角関数には見えるでしょう.

  5. 3重ループ

    3重の for 文を使用して,以下のような表示を行なうプログラムを作 成しましょう.

    *
    
    *
    * *
    
    *
    * *
    * * *
    
    *
    * *
    * * *
    * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    * * * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    * * * * * * *
    * * * * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    * * * * * * *
    * * * * * * * *
    * * * * * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    * * * * * * *
    * * * * * * * *
    * * * * * * * * *
    * * * * * * * * * *
    

    一番外側の for で3角形を何個描くかを決めます.図では10個の三角形があるので,10回繰り返すことになります.次の for 文で各三角形の形に関して,何行描くかを決めます.これは毎回違っていますので,その規則性を探します.最後に,一番内側の for 文で各行に何個星を描くかを制御します.これも行によって異なりますので,その規則性を探します.
  6. 前問の発展

    12月になりましたので,以下のようにクリスマスツリーっぽい絵を描いてみましょう.

                *
              * * *
            * * * * *
              * * *
            * * * * *
          * * * * * * *
            * * * * *
          * * * * * * *
        * * * * * * * * *
          * * * * * * *
        * * * * * * * * *
      * * * * * * * * * * *
               III
               III
               III
    

    左から,まずスペースの処理,左側の三角部分,中央のアスタリスク,右の三角部分というように各行で4つの処理に分けています.また,下の木の幹の部分は別処理で描画しています.

    前問と同じように,木の枝のブロックを何個描くか,ブロックには何行あるか,各行にはスペースや星が何個あるか,と,順番に考えます.
  7. 設問 v の発展(難問)

    3重のループを用いて作成した設問 v の表示を90°回転させてみましょう.

                                                                   * 
                                                        *         ** 
                                              *        **        *** 
                                     *       **       ***       **** 
                             *      **      ***      ****      ***** 
                      *     **     ***     ****     *****     ****** 
                *    **    ***    ****    *****    ******    ******* 
           *   **   ***   ****   *****   ******   *******   ******** 
       *  **  ***  ****  *****  ******  *******  ********  ********* 
    * ** *** **** ***** ****** ******* ******** ********* ********** 
    


Back to text page