ページ 11

転置行列の計算

Posted: 2015年1月16日(金) 23:05
by ういはる
学校で出された課題です。

Ⅰ. 5行5列の行列[A]にデータを入力し、表示しなさい。データは不規則な値でキーボードから入力します。
Ⅱ. 行列[A]の転置行列を行列に代入し、表示しなさい。
Ⅲ. [C] ← [A]+ の計算をして行列[C]表示しなさい。
Ⅳ. [C] ← [A]- の計算をして行列[C]表示しなさい。
Ⅴ. [C] ← [A]* の計算をして行列[C]表示しなさい。
Ⅵ. Ⅴ.で求めた行列[C]の転置行列を行列に代入し、表示しなさい。

という問題です。
過去ログに同じ問題があったのですが、どういうふうに値を入力すればエラー以外が表示され結果が出るのか教えてほしいです。

コード:

#include<stdio.h>
int input(int x[][5])
{	int a,k,j,n=5;
	for(j=1;j<=n;j++){
		for(k=1;k<=n;k++){
		scanf("%d",&x[j-1][k-1]);
		if(scanf("%d",&x[j-1][k-1])!=1){
			printf("エラー");
			return(0);
	}	}
		printf("\n");
	}
	return(n);
}

void kaku(int n,int x[][5])
{	int i,j;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
		printf("%3d",x[i][j]);
		}
		printf("\n");
		}
		printf("\n");
	return;
}
void han(int n,int a[][5],int b[][5])
{	int j,k;
	for(j=n-1;j>=0;j--){
		for(k=0;k<n;k++){
		b[k][j]=a[j][k];
		}
	}
	printf("\n");
	return;
}

void wa(int n,int a[][5],int b[][5],int c[][5])
{	int j,k;
	for(j=0;j<n;j++){
		for(k=0;k<n;k++){
		c[j][k]=a[j][k]+b[j][k];
		}
	}
	return;	
}

void sa(int n,int a[][5],int b[][5],int c[][5])
{	int i,j,k;
	for(j=0;j<n;j++){
		for(k=0;k<n;k++){
		c[j][k]=a[j][k]-b[j][k];
		}
	}
	return;	
}

void seki(int n,int a[][5], int b[][5],int c[][5])
{	int i,j,k;
	for(j=0;j<n;j++){
		for(k=0;k<n;k++){
			for(i=0;i<n;i++){
			c[j][k]=c[j][k]+a[j][i]*b[i][j];
			}
		}
	}
	return;
}

int main(void)
{	int a[5][5]={0},b[5][5]={0},c[5][5]={0},n;
	n=input(a);
	kaku(n,a);
	han(n,a,b);
	kaku(n,b);
	wa(n,a,b,c);
	kaku(n,c);
	sa(n,a,b,c);
	kaku(n,c);
	seki(n,a,b,c);
	kaku(n,c);
	han(n,c,b);
	kaku(n,b);
	return(0);
}

Re: 転置行列の計算

Posted: 2015年1月16日(金) 23:11
by みけCAT
同じint型の範囲の整数値を2回ずつ入力すれば、エラーは出ないようです。
例えば、

コード:

0 0 1 1 2 2 3 3 4 4
1 1 2 2 3 3 4 4 5 5
2 2 3 3 4 4 5 5 6 6
3 3 4 4 5 5 6 6 7 7
4 4 5 5 6 6 7 7 8 8
もっというと、奇数番目のデータ、すなわち下の表で0を書いた所はダミーなので、int型の範囲の任意の整数を書いていいです。

コード:

0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1
自分で考えて、行列の要素のみを1回ずつのみ入力して実行できるコードに改良してみてはいかがですか?

Re: 転置行列の計算

Posted: 2015年1月16日(金) 23:23
by みけCAT
ういはる さんが書きました:過去ログに同じ問題があったのですが
とりあえず適当に検索したらこれが出てきましたが、他に参考にしたURLがあるならば貼っていただけるといいかもしれません。
転置行列

Re: 転置行列の計算

Posted: 2015年1月16日(金) 23:45
by ういはる
はい。その過去ログを参考にしました。
いろんな値を入力して試しているのですが終わらせ方が分からずエラーが出てしまいます。