#include <stdio.h>
#include <stdlib.h>
#define M 8
#define N 9
/* 連立方程式を解くガウス・ジョルダン法のプログラム
ただし、「ガウス・ジョルダン法を使え」と言ってるのではなく、
連立方程式を解くアルゴリズムなら何を使ってもいい */
void gause_jordan(double A[][N]) {
double p, d;
for (size_t i = 0; i < M; i++) {
p = A[i][i];
for (size_t j = 0; j < N; j++) {
A[i][j] = A[i][j] / p;
}
for (size_t j = 0; j < M; j++) {
if (i != j) {
d = A[j][i];
for (size_t k = i; k < N; k++) {
A[j][k] = A[j][k] - d * A[i][k];
}
}
}
}
}
int main(void) {
/* printf の第一引数に与えるフォーマット文字列をテンプレとして定義。
何も必ずしも for 文で回しながら5行5列の行列印字を成し遂げなくてもいい。 */
char* template = " 300 300 300 300 300\n 300 %4.0lf %4.0lf %4.0lf 300\n 300 %4.0lf 1200 %4.0lf 300\n 300 %4.0lf %4.0lf %4.0lf 300\n 300 300 300 300 300\n";
/* 問題の行列は double 型にした方がいいだろう。 */
double mat[M][N] = {{4., -1., 0., -1., 0., 0., 0., 0., 600.},
{-1., 4., -1., 0., 0., 0., 0., 0., 1500.},
{0., -1., 4., 0., -1., 0., 0., 0., 600.},
{-1., 0., 0., 4., 0., -1., 0., 0., 1500.},
{0., 0., -1., 0., 4., 0., 0., -1., 1500.},
{0., 0., 0., -1., 0., 4., -1., 0., 600.},
{0., 0., 0., 0., 0., -1., 4., -1., 1500.},
{0., 0., 0., 0., -1., 0., -1., 4., 600.}};
/* 設定行列にガウス・ジョルダン法を適用 */
gause_jordan(mat);
/* 解の配列。
ガウス・ジョルダン法で処理したら行列のN列目が解のベクトルになる。*/
double answer[M];
for (size_t i = 0; i < M; i++) {
answer[i] = mat[i][N - 1];
}
/* あとは、テンプレ文字列に answer 配列の要素を順次はめ込んでいけばいい。 */
printf(template
, answer
[0], answer
[1], answer
[2], answer
[3], answer
[4], answer
[5], answer
[6], answer
[7]); return EXIT_SUCCESS;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgTSA4CiNkZWZpbmUgTiA5CgovKiDpgKPnq4vmlrnnqIvlvI/jgpLop6PjgY/jgqzjgqbjgrnjg7vjgrjjg6fjg6vjg4Djg7Pms5Xjga7jg5fjg63jgrDjg6njg6AKIOOBn+OBoOOBl+OAgeOAjOOCrOOCpuOCueODu+OCuOODp+ODq+ODgOODs+azleOCkuS9v+OBiOOAjeOBqOiogOOBo+OBpuOCi+OBruOBp+OBr+OBquOBj+OAgQrpgKPnq4vmlrnnqIvlvI/jgpLop6PjgY/jgqLjg6vjgrTjg6rjgrrjg6DjgarjgonkvZXjgpLkvb/jgaPjgabjgoLjgYTjgYQgKi8Kdm9pZCBnYXVzZV9qb3JkYW4oZG91YmxlIEFbXVtOXSkgewogIGRvdWJsZSBwLCBkOwogIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTTsgaSsrKSB7CiAgICBwID0gQVtpXVtpXTsKICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgTjsgaisrKSB7CiAgICAgIEFbaV1bal0gPSBBW2ldW2pdIC8gcDsKICAgIH0KICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgTTsgaisrKSB7CiAgICAgIGlmIChpICE9IGopIHsKICAgICAgICBkID0gQVtqXVtpXTsKCiAgICAgICAgZm9yIChzaXplX3QgayA9IGk7IGsgPCBOOyBrKyspIHsKICAgICAgICAgIEFbal1ba10gPSBBW2pdW2tdIC0gZCAqIEFbaV1ba107CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgppbnQgbWFpbih2b2lkKSB7CiAgLyogcHJpbnRmIOOBruesrOS4gOW8leaVsOOBq+S4juOBiOOCi+ODleOCqeODvOODnuODg+ODiOaWh+Wtl+WIl+OCkuODhuODs+ODl+ODrOOBqOOBl+OBpuWumue+qeOAggogICDkvZXjgoLlv4XjgZrjgZfjgoIgZm9yIOaWh+OBp+WbnuOBl+OBquOBjOOCie+8leihjO+8leWIl+OBruihjOWIl+WNsOWtl+OCkuaIkOOBl+mBguOBkuOBquOBj+OBpuOCguOBhOOBhOOAgiAqLwogIGNoYXIqIHRlbXBsYXRlID0gIiAzMDAgIDMwMCAgMzAwICAzMDAgIDMwMFxuIDMwMCAlNC4wbGYgJTQuMGxmICU0LjBsZiAgMzAwXG4gMzAwICU0LjBsZiAxMjAwICU0LjBsZiAgMzAwXG4gMzAwICU0LjBsZiAlNC4wbGYgJTQuMGxmICAzMDBcbiAzMDAgIDMwMCAgMzAwICAzMDAgIDMwMFxuIjsKICAvKiDllY/poYzjga7ooYzliJfjga8gZG91YmxlIOWei+OBq+OBl+OBn+aWueOBjOOBhOOBhOOBoOOCjeOBhuOAgiAqLwogIGRvdWJsZSBtYXRbTV1bTl0gPSB7ezQuLCAtMS4sIDAuLCAtMS4sIDAuLCAwLiwgMC4sIDAuLCA2MDAufSwKICAgICAgICAgICAgICAgICAgICAgIHstMS4sIDQuLCAtMS4sIDAuLCAwLiwgMC4sIDAuLCAwLiwgMTUwMC59LAogICAgICAgICAgICAgICAgICAgICAgezAuLCAtMS4sIDQuLCAwLiwgLTEuLCAwLiwgMC4sIDAuLCA2MDAufSwKICAgICAgICAgICAgICAgICAgICAgIHstMS4sIDAuLCAwLiwgNC4sIDAuLCAtMS4sIDAuLCAwLiwgMTUwMC59LAogICAgICAgICAgICAgICAgICAgICAgezAuLCAwLiwgLTEuLCAwLiwgNC4sIDAuLCAwLiwgLTEuLCAxNTAwLn0sCiAgICAgICAgICAgICAgICAgICAgICB7MC4sIDAuLCAwLiwgLTEuLCAwLiwgNC4sIC0xLiwgMC4sIDYwMC59LAogICAgICAgICAgICAgICAgICAgICAgezAuLCAwLiwgMC4sIDAuLCAwLiwgLTEuLCA0LiwgLTEuLCAxNTAwLn0sCiAgICAgICAgICAgICAgICAgICAgICB7MC4sIDAuLCAwLiwgMC4sIC0xLiwgMC4sIC0xLiwgNC4sIDYwMC59fTsKICAvKiDoqK3lrprooYzliJfjgavjgqzjgqbjgrnjg7vjgrjjg6fjg6vjg4Djg7Pms5XjgpLpgannlKggKi8KICBnYXVzZV9qb3JkYW4obWF0KTsKICAvKiDop6Pjga7phY3liJfjgIIKICAg44Ks44Km44K544O744K444On44Or44OA44Oz5rOV44Gn5Yem55CG44GX44Gf44KJ6KGM5YiX44GuTuWIl+ebruOBjOino+OBruODmeOCr+ODiOODq+OBq+OBquOCi+OAgiovCiAgZG91YmxlIGFuc3dlcltNXTsKICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE07IGkrKykgewogICAgYW5zd2VyW2ldID0gbWF0W2ldW04gLSAxXTsKICB9CiAgLyog44GC44Go44Gv44CB44OG44Oz44OX44Os5paH5a2X5YiX44GrIGFuc3dlciDphY3liJfjga7opoHntKDjgpLpoIbmrKHjga/jgoHovrzjgpPjgafjgYTjgZHjgbDjgYTjgYTjgIIgKi8KICBwcmludGYodGVtcGxhdGUsIGFuc3dlclswXSwgYW5zd2VyWzFdLCBhbnN3ZXJbMl0sIGFuc3dlclszXSwgYW5zd2VyWzRdLCBhbnN3ZXJbNV0sIGFuc3dlcls2XSwgYW5zd2VyWzddKTsKICByZXR1cm4gRVhJVF9TVUNDRVNTOwp9Cg==