[ create a new paste ] login | about

Link: http://codepad.org/8nnzVgbC    [ raw code | fork ]

ahox - C, pasted on Feb 3:
#include <stdio.h>

int  transposed_matrix(int a[2][2]); /* 行列を転置してdet(a)返す関数 */
int  gcd(int a, int b);              /* 最大公約数@gcd */
void print_matrix(int a[2][2]);      /* 2行2列行列の表示 */
void print_frac_matrix(int numerator[2][2], int denominator[2][2]); /* 2行2列行列の分数表示 */
void scan_matrix(int a[2][2]);       /* 2行2列行列の取得 */

int main(void)
{
	int a[2][2];
	int div_a[2][2];    /* diviser of a */
	int det;            /* det(a) */
	int i, j;
	
	scan_matrix(a);
	print_matrix(a);
	det = transposed_matrix(a);
	
	printf("の逆行列は\n");
	
	if(det == 0)
	{
		printf("存在しない\n");
		return 0;
	}
	/* 転置行列をdet(a)で割り算した際の(つまり逆行列の)分子分母を計算 */
	for(i=0;i<2;i++)
	{
		for(j=0;j<2;j++)
		{
			div_a[i][j] = gcd(a[i][j], det);
			a[i][j] /= div_a[i][j];
			div_a[i][j] = det / div_a[i][j];
		}
	}
	
	print_frac_matrix(a, div_a);
	return 0;
}

/* 相異なる整数値の交換 */
void int_swap(int *a,int *b)
{
	if(*a==*b) return;
	*a ^= *b;
	*b ^= *a;
	*a ^= *b;
}
/* 行列を転置してdet(a)返す関数 */
int transposed_matrix(int a[2][2]){
	int_swap(&a[0][0],&a[1][1]);
	int_swap(&a[0][1],&a[1][0]);
	a[0][1] *= -1;
	a[1][0] *= -1;
	return a[0][0] * a[1][1] - a[0][1] * a[1][0];
}
/* 最大公約数@gcd */
int gcd(int a, int b)
{
	if(b == 0)
	{
		return a;
	}
	else
	{
		return gcd(b, a%b);
	}
}
/* 2行2列行列の表示 */
void print_matrix(int a[2][2]){
	int i,j;
	for(i=0;i<2;i++)
	{
		for(j=0;j<2;j++)
		{
			printf("%7d ",a[i][j]);
		}
		printf("\n");
	}
}
/* 2行2列行列の分数表示 */
void print_frac_matrix(int numerator[2][2], int denominator[2][2]){
	int i,j;
	for(i=0;i<2;i++)
	{
		for(j=0;j<2;j++)
		{
			if(denominator[i][j] == 1)
			{
				printf("%7d ", numerator[i][j]);
			}
			else
			{
				printf("%3d/%3d ", numerator[i][j], denominator[i][j]);
			}
		}
		printf("\n");
	}
}
/* 2行2列行列の取得 */
void scan_matrix(int a[2][2]){
	int i,j;
	for(i=0;i<2;i++)
	{
		for(j=0;j<2;j++)
		{
			printf("要素(%d,%d)の入力\n",i,j);
			scanf("%d",&a[i][j]);
		}
	}
}


Create a new paste based on this one


Comments: