質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2678閲覧

連立方程式をfor文でコンパクトかつ#define N のNの数字を変えるだけで多元線形連立方程式を解くことができるようにするには。

carnage0216

総合スコア194

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/07/28 13:13

編集2018/07/28 22:10

数時間前に投稿したこちらの質問に載せた完成したプログラムをコンパクトにするためのアドバイスをいただきたく質問しました。

#include <stdio.h> #include <time.h> #define N 3 int main(void) { clock_t start, end; start = clock(); float a[N][N+1] = { {5,-1,-1,0}, { 2,1,-3,-5 }, { 1,1,1 ,6} }; // The matrix //前進消去 int i; float d = a[1][0] / a[0][0]; for (i = 0; i <= 3; i++) {//forを使う上で上限がなかったので3までが上限なのでi<=3と書いた。 a[1][i] = a[1][i] - a[0][i] * d; { printf("a[1][%d]=%fとなる\n", i,a[1][i]); } } float r; r = a[2][0] / a[0][0]; for (i = 0; i <= 3; i++) { a[2][i] = a[2][i] - a[0][i] * r; } int I; for (I = 0; I <= 3; I++) { printf("a[2][%d]=%fとなる\n", I,a[2][I]); } float z; z= a[2][1] / a[1][1]; int y; //iは1から3まで入るのでkに+1した形で入ってもらいiを利用する。kはforより3までとする。 for (y = 0; y <= 3; y++) { a[2][y] = a[2][y] - a[1][y] * z; printf("a[2][%d]=%fとなる\n", y, a[2][y]); } //前進消去終わり //後退代入 float g = a[2][3] / a[2][2]; printf("Z=%f\n", g); float h; h = a[1][3] / a[1][1] - a[1][2] / a[1][1]* a[2][3] / a[2][2]; printf("Y=%f\n", h); float j; j = h / a[0][0] + g / a[0][0]; printf("X=%f\n", j); end = clock(); printf("%f sec\n", (double)(end - start) / CLOCKS_PER_SEC); return 0; } //後退代入終わり

以上のプログラムをこちらのようにfor文かつ多元線形連立方程式でまとめるにはどのような工夫をすればよいのかわからず悩んでいます。答えではなく、アドバイスや自分ならこう考えるという説明を聞かせていただけないでしょうか?
for文を使う際のフローチャートの作り方など、アドバイスをお願いいたします。
以下のプログラムのようにforで綺麗にまとめるコツを教えてほしいです。

// 前進消去 for (k = 0; k < N -1; k++) { for (i = k + 1; i < N; i++) { d = a[i][k] / a[k][k]; for (j = k + 1; j <= N; j++) a[i][j] -= a[k][j] * d; } } // 後退代入 for (i = N - 1; i >= 0; i--) { d = a[i][N]; for (j = i + 1; j < N; j++) d -= a[i][j] * a[j][N]; a[i][N] = d / a[i][i]; }

まとめると
for文でまとめて多元線形連立方程式にはどのような工夫をすればよいのか?

こちらのサイト

// 前進消去 for (k = 0; k < N -1; k++) { for (i = k + 1; i < N; i++) { d = a[i][k] / a[k][k]; for (j = k + 1; j <= N; j++) a[i][j] -= a[k][j] * d; } }
// 後退代入 for (i = N - 1; i >= 0; i--) { d = a[i][N]; for (j = i + 1; j < N; j++) d -= a[i][j] * a[j][N]; a[i][N] = d / a[i][i]; }

を参考に多元線形連立方程式を作ろうとしたのですが、紙に展開してみてもいまいちピンとくるものがなく、ただただ時間が過ぎます。どうか何かヒントというか、こうしてみれば見たいな感じのアドバイスを頂けないでしょうか?
誰かの書いたコードを読むときにはこうしたほうがいいよみたいなのでもいいです。

どうかよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

  1. いらんprintfを全部消して
  2. 残った式を見比べて共通するものがなんなのか考える

投稿2018/07/28 14:16

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

ベストアンサー

あなたが参考にしてたコレじゃダメなんですか?

あなたコイツのfor-loopをほどいて、理解しようとしてたんでしょ? 理解出来たら元に戻せばいいよ。

投稿2018/07/28 14:05

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/07/28 14:13

さっそくやってみます。 適切なアドバイス大変感謝します。
carnage0216

2018/07/28 14:46 編集

C++かつforがいくつもあるので理解するのがなかなか難しいですね。
carnage0216

2018/07/28 22:48

なんか分解は出来たもののうまく理解が出来なかったので、頑張って書いたプログラムからfor文で多元線形連立方程式を作って見せます。 どうかしばしお待ちを。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問