ページ 11

行列の積について

Posted: 2009年1月20日(火) 14:28
by レモン
行列の積を計算するプログラムを作っています。
A*B=Cの行列を計算するプログラムを書いたのですが、Cの値がすべて0になってしまいます。
Cの値を出すためにはどこを直したら良いのか教えていただきたいです。

C言語の知識は授業で行列式の表し方を習ったぐらいで、計算式の方は本から引用しています。
コンパイルはできました。

#include <stdio.h>

main()
{
	int l,m,n,i,j,k;
	double a[20][20];
	double b[20][20];
	double c[20][20];//配列の定義

	printf("A-Row = ");
	fflush(stdout);
	scanf("%d",&l);
	printf("A-Column B-Row = ");
	fflush(stdout);
	scanf("%d",&m);
	printf("B-Column = ");
	fflush(stdout);
	scanf("%d",&n);

	printf("\n");

	for(i=0;i<l;i++)
	{
		for(j=0;j<m;j++)
		{
			printf(" A[ %d, %d] = ",i+1,j+1);
			fflush(stdout);
			scanf("%lf",&a[j]);
		}
	}

	printf(" A = \n");

	for(i=0;i<l;i++)
	{
		for(j=0;j<m;j++)
		{
			printf(" %5f\t",a[j]);
		}
		printf("\n");
	}
	printf("\n");

	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf(" B[ %d, %d] = ",i+1,j+1);
			fflush(stdout);
			scanf("%lf",&a[j]);
		}
	}

	printf(" B = \n");

	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf(" %5f\t",a[j]);
		}
		printf("\n");
	}

	for(i=0;i<l;i++)
	{
		for(j=0;j<n;j++)
		{
			c[j] = 0;
			for(k=0;k<m;k++)
			{
				c[j] = c[j] + a[k] * b[k][j];
			}
		}
	}
	printf("\n");

	printf(" C = \n");

	for(i=0;i<l;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%5f\t",c[j]);
		}
	printf("\n");
	}

}

Re:行列の積について

Posted: 2009年1月20日(火) 14:41
by mats
行列Bの値を受け取るところで、行列Aに代入を行っています

Re:行列の積について

Posted: 2009年1月20日(火) 16:36
by レモン
ぴよぴよさんどうもありがとうございます。
今訂正してコンパイルしなおしたら
./gyouretu32.c: line 8: unexpected EOF while looking for matching ``'
./gyouretu32.c: line 90: syntax error: unexpected end of file
と出てしまい、コンパイルできなくなっていました。

この原因がわかる方がいれば、教えていただけないでしょうか?

Re:行列の積について

Posted: 2009年1月20日(火) 16:40
by レモン
解決しました。
コンパイルできなくなってた理由はコマンドを打ち間違えてたせいでした。

ぴよぴよさん、どうもありがとうございました。