情報科学演習 実習課題 2014.01.06

Back to text page


実習課題

  1. 値の並べ替え1

    以下のように配列を定義する.

    	    int ary[3] = {1, 2, 3};
    

    配列の先頭の要素と最後の要素を入れ換えて,配列の中身が3,2,1という順番 になるような処理を考えよ.

  2. 値の並べ替え2

    例題5.3を参考に,配列の要素の値を大きい順に並べ替える操作を行なうプログ ラムを考える.100以下の正の整数を乱数で5つ発生させ,それらを大きい順に並 べ変えよ.

    
     85  48  72  41  51
     85  72  51  48  41
    
    

    例えば,上の例のように現在配列 ary に順に85,48,72,41,51が入っ ているとします.このとき,配列の要素は以下の表のようになっています.

    添字01234
    要素8548724151

    まず,先頭の要素(0番目)と次(1番目)の要素,2番目の要素と順に比較し,もし 後の方が大きい場合には値を入れ換える操作を行うものとします.そのとき,比 較の操作は

        if(ary[i] < ary[j])
    
    
    

    のように2重ループの変数 i j を使用して行うものとし ます.そのとき, i j の値と配列の要素がどのように変 化していくのかを順に示すと,以下のようになります.

    変数ij添字 01234操作
    01要素8548724151そのまま
    02要素8548724151そのまま
    03要素 8548724151そのまま
    04要素 8548724151そのまま
    一巡目終了
    12要素8572484151入れ換え
    13要素8572484151そのまま
    14要素8572484151そのまま
    二巡目終了
    23要素8572484151そのまま
    24要素8572514148入れ換え
    三巡目終了
    34要素8572514841入れ換え
    四巡目終了

    このように i j が変化していくようなループを作れば完 了です.内側のループの繰り返しの回数が段々と減っているのは,次のように表 示するプログラムと同じです.

    
    ****
    ***
    **
    *
    
    

  3. 2次元配列の基本

    100以下の正の整数となる乱数を9つ発生させ,以下のように乱数を表示するとと もに,各行と列の和を表示するプログラムを作成せよ.

     10  69  18  97
     45  38  23 106
     28   8  30  66
     83 115  71
    

  4. 設問iiiの改造

    設問iiiを改造して,対角線上の斜めの3つの数の和を求めるようにせよ.

         99  28  94
         77  15  84
         95   3   6
    204             120
    

  5. 行列式の計算

    一桁の正の整数を9つ発生させることを行って,3行3列の行列を作る.次にその行列式の値を求めるプログラムを作成せよ.

    
    Matrix
    2 3 8
    6 3 2
    9 5 2
    
    Determinant = 34
    

    2次元の配列を使用します.行列式の計算は添字の規則性をしっかり見つけて下さい.2重の for 文を使用して左上から右下への積の和を計算し,再び別に2重の for 文で右上から左下への積を引いていくようにしてください.

    ちなみに,配列の添字の並びは行列式の計算では以下のようになることは工学系の学生には「常識」ですね.

    00*11*22 + 01*12*20 + 02*10*21
    - 02*11*20 - 01*10*22 - 00*12*21


    なお,このプログラムでは正方行列の行もしくは列の数を変数 m で置き,m を変えるだけで4行4列や5行5列の計算が出来るようにしておきましょう.
  6. 配列要素の書き換え

    5×10のマトリックス状のエリアの左半分に最初は o を,右半分に x を表示させておきます.その後各位置に半々の確率で書き換えをするかどうかの操作を行い,左半分は段々 x に,右半分は o へと変更していくプログラムを作成しましょう.すなわち, o のところがランダムに確率1/2で x に,右側はその反対になるようにします.ただし,一度変えたところはもうそのまま固定します.

    o o o o o x x x x x 
    o o o o o x x x x x 
    o o o o o x x x x x 
    o o o o o x x x x x 
    o o o o o x x x x x 
    
    x o x x o x o o o x 
    x o x o x x x x o o 
    x x o o x o x x x x 
    o x o x o o o x o x 
    x o x o o o o o o x 
    
    x x x x o o o o o x 
    x x x o x x o x o o 
    x x o x x o x x x o 
    o x x x o o o x o x 
    x x x x x o o o o o 
    
    x x x x o o o o o x 
    x x x x x x o x o o 
    x x o x x o o o x o 
    x x x x o o o x o o 
    x x x x x o o o o o 
    
    x x x x x o o o o o 
    x x x x x x o o o o 
    x x o x x o o o o o 
    x x x x x o o o o o 
    x x x x x o o o o o 
    
    x x x x x o o o o o 
    x x x x x o o o o o 
    x x o x x o o o o o 
    x x x x x o o o o o 
    x x x x x o o o o o 
    
    x x x x x o o o o o 
    x x x x x o o o o o 
    x x x x x o o o o o 
    x x x x x o o o o o 
    x x x x x o o o o o 
    

    用意した配列は matrix[2][5][5] というものですが,これ以外にもやり方はいろいろあるはずです.

    また,上の例では,最後の1回分だけはループの外に出して,全部が揃ったことを判定した後で表示させています.修正の部分は while 文を使用して,揃うことを数値化してその数値がある値ではないときに反復処理を行っています.

Back to text page