- 締切済み
C言語で連立1次方程式
C++で連立1次方程式を解くプログラミングを作りたいのですが何回やっても出来なかったので質問します。 N=3; n=N; 0<=i<=N-1, 0<=j<=N-1, A(3×3行列)= 1 -8 -6 8 7 8 -2 -2 7 a[0][0]*X+a[1][0]*Y=(-1)*a[2][0]; (1X+8Y=-(-2)) a[0][1]*X+a[1][1]*Y=(-1)*a[2][1]; (-8X+7Y=-(-2)) (行をi、列をj、a[0][0]=a[i][j]) (XとYや関数名は適当に決めてもらって構いません) X、Yを求める。 XとYが求まったら1行目をX倍した数と2行目をY倍した数と3行目を足した数を、3行目に入れる。(計算は列ごとにやる(3回計算)) 3行目の成分は分数で表示させる。(整数の形にできるのなら整数の形にしたい) 表示させる関数は↓のように作りました(型はintでなくてもいいです) void matrix_print(int n, int a[N][N]){ int i, j; for(i=0; i<n; i++){ for(j=0; j<n; j++) printf("%5d \n",a[i][j]); } printf("\n"); return; } 私はX、Yで分数が出てきたところでうまく分数表示が出来ずに(整数で表せるなら整数で表したい)そこで詰まってしまいます。 何方かわかる方はプログラムを作ってください。お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Interest
- ベストアンサー率31% (207/659)
割り算をした結果はすでに整数から飛び出してしまうので、intではなくて、小数を扱うためにdoubleを使ったほうが良いですね。 -halcyon-さんのコードを下敷きにして書きなおすと、例えばこんな感じ。 void matrix_print(double n, double a[N][N]){ int i, j; // ここは int でOK for(i=0; i<n; i++){ for(j=0; j<n; j++) printf("%5.3lf ",a[i][j]); // double型なので %lf } printf("\n"); // 1行表示するごとに改行 } printf("\n"); return; } 連立一次方程式の解き方自体は、「ガウスの消去法」が簡単でよく知られていますから、ググってみてください。サンプルソースコードまでのっているサイトがあります。 余談ですが、 > わかる方はプログラムを作ってください。 私はこういうの大嫌いです。が、今回はご自身で努力した形跡があったので回答しました。