// 課題043
//3*3のarrayAの転置行列を求め、arrayBとの行列同士の積を求めるプログラム
//             2026.07.04 24A2021 伊藤宗兼

#include <stdio.h>
#define ARRAYSIZE 3
int main(void) {
	int arrayA[ARRAYSIZE][ARRAYSIZE] = { {1,1,1},{2,2,2},{3,3,3} };
	int arrayB[ARRAYSIZE][ARRAYSIZE] = { {1,1,1},{1,1,1},{1,1,1} };
	int arrayC[ARRAYSIZE][ARRAYSIZE];//arrayAの転置行列
	int arrayD[ARRAYSIZE][ARRAYSIZE];//積の結果
	int i, j, k;

	//arrayAの転置行列を求める----------------------------------------------------
	for (i = 0; i < ARRAYSIZE; i++) {//結果の行番号
		for (j = 0; j < ARRAYSIZE; j++) {//結果の列番号
			arrayC[j][i] = arrayA[i][j];
		}
	}
	//転置行列とarrayBの積を求める-----------------------------------------------
	for (i = 0; i < ARRAYSIZE; i++) {//結果の行番号
        for (j = 0; j < ARRAYSIZE; j++) {//結果の列番号
            arrayD[i][j] = 0;//初期化
            for (k = 0; k < ARRAYSIZE; k++) {//内積計算用
                arrayD[i][j] += arrayC[i][k] * arrayB[k][j]; 
            }
        }
    }

	//行列の式を見やすく表示する-------------------------------------------------
	for (i = 0; i < ARRAYSIZE; i++) {
		for (j = 0; j < ARRAYSIZE; j++)
			printf("%3d", arrayC[i][j]);
		if (i == ARRAYSIZE / 2)
			printf(" ×");
		else
			printf("　");
		for (j = 0; j < ARRAYSIZE; j++)
			printf("%3d", arrayB[i][j]);
		if (i == ARRAYSIZE / 2)
			printf(" =");
		else
			printf("　");
		for (j = 0; j < ARRAYSIZE; j++)
			printf("%3d", arrayD[i][j]);
		printf("\n");
	}
	printf("\n 終了します。\n");
	return 0;
}