『2つの4×4行列を2次元配列に格納し、それらの積を求めるプログラムを作成せよ。 』
という問題をVCで作ったプログラムが↓なのですが、これを私のノートパソコンに入っている
【Study C Version 2.20a for windows 7/Vista/XP 】でも正常に作動するようにするには、
どうすればいいでしょうか?
#include <stdio.h>
void mult_array(int (*a0)[][4], int (*a1)[][4], int (*result)[][4]);
#define N 4
#define COL 128
int main(void)
{
int i;
int a[N][N], b[N][N], c[N][N] = {{0}};
char buf[COL];
/* a[][]の入力 */
for (i = 0; i < N; i++) {
fgets(buf, COL, stdin);
sscanf(buf, "%d %d %d %d", &a[0], &a[1], &a[2], &a[3]);
}
/* b[][]の入力 */
for (i = 0; i < N; i++) {
fgets(buf, COL, stdin);
sscanf(buf, "%d %d %d %d", &b[0], &b[1], &b[2], &b[3]);
}
mult_array(&a, &b, &c);
/* c[][]の出力 */
printf("\n");
for (i = 0; i < N; i++)
printf("%d %d %d %d\n", c[0], c[1], c[i][2], c[i][3]);
return 0;
}
void mult_array(int (*a0)[][4], int (*a1)[][4], int (*result)[][4])
{
int i, j, k, s;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++) {
s = 0;
for (k = 0; k < N; k++)
s += (*a0)[i][k] * (*a1)[k][j];
(*result)[i][j] = s;
}
}
また、もしこのプログラムがおかしい点があればご指摘お願いします
VCで作った物を~
Re: VCで作った物を~
ソースコードレベルでの互換性はたぶんあるはずなので、
その、ノートPCに入っているコンパイラーでコンパイルしてみればいいんじゃないでしょうか。
個人的には、
#define
をプロトタイプ宣言の前に持ってきて、
[4]
って書いてあるところを
[N]
ってしたい気分です。
行や列の数が変わったとき、Nを一発直せばたぶんすみますからね。
(追記)
あぁ、データの入出力のところも変えないとダメですね。
その、ノートPCに入っているコンパイラーでコンパイルしてみればいいんじゃないでしょうか。
個人的には、
#define
をプロトタイプ宣言の前に持ってきて、
[4]
って書いてあるところを
[N]
ってしたい気分です。
行や列の数が変わったとき、Nを一発直せばたぶんすみますからね。
(追記)
あぁ、データの入出力のところも変えないとダメですね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。