以下のように配列を定義する.
int ary[3] = {1, 2, 3}; |
配列の先頭の要素と最後の要素を入れ換えて,配列の中身が3,2,1という順番 になるような処理を考えよ.
例題5.3を参考に,配列の要素の値を大きい順に並べ替える操作を行なうプログ ラムを考える.100以下の正の整数を乱数で5つ発生させ,それらを大きい順に並 べ変えよ.
85 48 72 41 51 85 72 51 48 41 |
例えば,上の例のように現在配列 ary に順に85,48,72,41,51が入っ
ているとします.このとき,配列の要素は以下の表のようになっています.
まず,先頭の要素(0番目)と次(1番目)の要素,2番目の要素と順に比較し,もし
後の方が大きい場合には値を入れ換える操作を行うものとします.そのとき,比
較の操作は
のように2重ループの変数 i と j を使用して行うものとし
ます.そのとき, i と j の値と配列の要素がどのように変
化していくのかを順に示すと,以下のようになります.
このように i と j が変化していくようなループを作れば完
了です.内側のループの繰り返しの回数が段々と減っているのは,次のように表
示するプログラムと同じです.
添字 0 1 2 3 4
要素 85 48 72 41 51
if(ary[i] < ary[j])
変数 i j 添字
0 1 2 3 4 操作
値 0 1 要素 85 48 72 41 51 そのまま
値 0 2 要素 85 48 72 41 51 そのまま
値 0 3 要素
85 48 72 41 51 そのまま
値 0 4 要素
85 48 72 41 51 そのまま
一巡目終了
値 1 2 要素 85 72 48 41 51 入れ換え
値 1 3 要素 85 72 48 41 51 そのまま
値 1 4 要素 85 72 48 41 51 そのまま
二巡目終了
値 2 3 要素 85 72 48 41 51 そのまま
値 2 4 要素 85 72 51 41 48 入れ換え
三巡目終了
値 3 4 要素 85 72 51 48 41 入れ換え
四巡目終了
****
***
**
*
100以下の正の整数となる乱数を9つ発生させ,以下のように乱数を表示するとと もに,各行と列の和を表示するプログラムを作成せよ.
10 69 18 97 45 38 23 106 28 8 30 66 83 115 71 |
設問iiiを改造して,対角線上の斜めの3つの数の和を求めるようにせよ.
99 28 94 77 15 84 95 3 6 204 120 |
一桁の正の整数を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列の計算が出来るようにしておきましょう.
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 文を使用して,揃うことを数値化してその数値がある値ではないときに反復処理を行っています.