C言語で連立一次方程式
C言語で連立一次方程式
/*
連立一次方程式
a*x + b*y = e
c*x + d*y = f
の解を求めるプログラムを作成したい。
a,b,c,d,e,f をキーボード入力させる
ことで、
行列 [a b
c d]
の逆行列、及び、連立方程式の解( x= , y= )を求めたい。
なお、a b c d の値によっては、逆行列を求めることが
出来ません。その時は、
【解を求めることはできません】
と表示してプログラムを終了するようにして下さい。
(注)
[a,b,c,d,e,f]を 2次元配列 ma[2][3]とする.
[逆行列[a,b,c,d]と解x,y]を 2次元配列 mb[2][3]とする.
ma[][] の値をmain関数内でキーボード入力する
mb[][] の値は,mat_keisan関数内で計算
mb[][] の値をmain関数内で表示
関数 mat_keisan の戻り値として,「解」が求まる方程式か
どうかを知らせる「int 型のフラグ(旗)」として用いるとよい.
*/
#include<stdio.h>
int mat_keisan(int ma , int mb);
int main(void)
{
int inverse;
double ma[2][3];
double mb[2][3]={0};
printf("連立一次方程式の計算\n");
printf("a * x + b * y= e\n");
printf("c * x + d * y= f\n");
printf("Input a :");
scanf("%lf",&ma[1][1]);
printf("Input b :");
scanf("%lf",&ma[1][2]);
printf("Input c :");
scanf("%lf",&ma[1][3]);
printf("Input d :");
scanf("%lf",&ma[2][1]);
printf("Input e :");
scanf("%lf",&ma[2][2]);
printf("Input f :");
scanf("%lf",&ma[2][3]);
printf("%4.2f* x + %4.2f * y = %4.2f\n", ma[1][1],ma[1][2],ma[1][3]);
printf("%4.2f* x + %4.2f * y = %4.2f\n", ma[2][1],ma[2][2],ma[2][3]);
inverse=mat_keisan(ma,mb);
if(inverse==1) printf("計算できません\n");
else{
printf("逆行列\n");
printf("%4.2f %4.2f\n", mb[1][1],mb[1][2]);
printf("%4.2f %4.2f\n", mb[2][1],mb[2][2]);
printf("解\n");
printf("x=%4.2f\n",mb[1][3]);
printf("y=%4.2f\n",mb[3][3]);
}
return (0);
}
/* 配列の足し算 */
int mat_keisan(int ma ,int mb )
{
int x,y,z;//
1/ma[1][1]*mb[2][2]-ma[1][2]*mb[2][2];
//逆行列と解を求めるプログラムを作成する。
//そしてその値をmb[][] に入力する。
return(#######);
}
関数内が手も足もでません;
他のサイトを調べてみたのですが逆行列を求めるプログラムがよくわかりません;
>int mat_keisan(int ma ,int mb )
は、あってないかもです;
それとinverseの意味がわかりません;
ヒントや、解説を
よろしくお願いします;。
補足
回答ありがとうございます。 #include<math.h> をつけたら確かにsqrtガ使えるようになりました。 でもelseの位置がおかしいそうです。