第6講 配列
第4話 2次元配列
を実現するプログラム例
#include<stdio.h> //prinf()を使えるようにするためにインクルード
#include<stdlib.h> //rand()を使用できるようにインクルード
#include <time.h> //time()を使用できるようにインクルード
void f();
int main() {
f();
return(0);
}
void f() {
int a[3][4], i, j; //配列aと制御変数i,jの宣言
//srand((unsigned)time(NULL)); //乱数の系列決定するシード値を現在時刻から取得
//ランダムデータ発生
for (i = 0; i<3; i++) {
for (j = 0; j<4; j++) {
a[i][j] = rand() % 100;
}
}
//データ表示
for (i = 0; i<3; i++) {
for (j = 0; j<4; j++) {
if (a[i][j]<10)printf(" %d ", a[i][j]);
if (a[i][j] >= 10)printf("%d ", a[i][j]);
}
printf("\n");
}
}
さて、の左右を反対にする、すなわち中央のところで線対称変換をさせたもの
も表示させるとすると、
#include<stdio.h> //prinf()を使えるようにするためにインクルード
#include<stdlib.h> //rand()を使用できるようにインクルード
#include <time.h> //time()を使用できるようにインクルード
void f();
int main() {
f();
return(0);
}
void f() {
int a[3][4], i, j; //配列aと制御変数i,jの宣言
//srand((unsigned)time(NULL)); //乱数の系列決定するシード値を現在時刻から取得
//ランダムデータ発生
for (i = 0; i<3; i++) {
for (j = 0; j<4; j++) {
a[i][j] = rand() % 100;
}
}
//データ表示
for (i = 0; i<3; i++) {
for (j = 0; j<4; j++) {
if (a[i][j]<10)printf(" %d ", a[i][j]);
if (a[i][j] >= 10)printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\n");
//左右反転した行列の表示
for (i = 0; i<3; i++) {
for (j = 0; j<4; j++) {
if (a[i][3-j]<10)printf(" %d ", a[i][3-j]);
if (a[i][3-j] >= 10)printf("%d ", a[i][3-j]);
}
printf("\n");
}
}
とします。
さて、のような数字の並びを行列といいます。
行は横列、列は縦列を表します。
ですから、この行列を3行4列の行列といいます。
そして、行と列を反対にした(縦横を取り換えた)
を転置行列といいます。
もとの行列・左右反転した行列・上限反転した配列・転置行列
のすべてを表示させるプログラムを考えて下さい。
転置は難しいですが粘り強く考えて下さい。