以下のように配列を定義する.
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 |
5×5のマトリックス状に●もしくは○をランダムに表示する.出現確率はそれぞ れ1/2ずつとする.その操作を何度か繰り返し,○のところに●が出た場合には ●で置き換えるが,●の部分に○が出ても置き換えないとする.すなわち,段々 と●が多くなるようにし,全部が●になる まで繰り返すプログラムを作成せよ.
●●○○○ ○●●○● ○○●●○ ○●●○● ○○○●○ ●●○○○ ●●●○● ●○●●● ○●●○● ●●●●○ ●●●●○ ●●●○● ●○●●● ●●●○● ●●●●○ ●●●●○ ●●●○● ●○●●● ●●●○● ●●●●○ ●●●●○ ●●●○● ●○●●● ●●●●● ●●●●○ ●●●●● ●●●○● ●●●●● ●●●●● ●●●●● ●●●●● ●●●○● ●●●●● ●●●●● ●●●●● ●●●●● ●●●●● ●●●●● ●●●●● ●●●●● |
上の例は,最初の1回分とそれ以後の修正分とでループを分けています.修正の 部分は while 文を使用して,全部黒丸になることを数値化してその数値 により終了の判定を行っています.
一桁の正の整数を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