環境
- windows10
- visual studio 2017
/********************************************* * 連立方程式の解法 ( ガウスの消去法 ) *********************************************/ #include <iostream> // for cout #include <stdio.h> // for printf() // 元の数定義 #define N 4 // 3 using namespace std; /* * 計算クラス */ class Calc { double a[N][N + 1]; // 各種変数 double d; // ダミー int i, j, k; // LOOP インデックス public: // 連立方程式を解く(ガウスの消去法) void calcGaussElimination(); }; /* * 連立方程式を解く(ガウスの消去法) */ void Calc::calcGaussElimination() { // 係数 static double a[N][N + 1] = { //{ 2.0, -3.0, 1.0, 5.0}, //{ 1.0, 1.0, -1.0, 2.0}, //{ 3.0, 5.0, -7.0, 0.0} { 1.0, -2.0, 3.0, -4.0, 5.0}, {-2.0, 5.0, 8.0, -3.0, 9.0}, { 5.0, 4.0, 7.0, 1.0, -1.0}, { 9.0, 7.0, 3.0, 5.0, 4.0} }; // 元の連立方程式をコンソール出力 for (i = 0; i < N; i++) { for (j = 0; j < N; j++) printf("%+fx%d ", a[i][j], j + 1); printf("= %+f\n", a[i][N]); } // 前進消去 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 (k = 0; k < N; k++) printf("x%d = %f\n", k + 1, a[k][N]); } /* * メイン処理 */ int main() { try { // 計算クラスインスタンス化 Calc objCalc; // 連立方程式を解く(ガウスの消去法) objCalc.calcGaussElimination(); } catch (...) { cout << "例外発生!" << endl; return -1; } // 正常終了 return 0; }
の以下の
// 前進消去 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; } }
の部分において過程の計算処理が見たかったのでprintf関数を使ったのですが警告がでます。
変数の型を考慮しながら以下のように書きました。
// 前進消去 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; //a[i][j] = a[i][j]-a[k][j] * d printf("a=%lf\nである", a);//付け加えた部分~~ printf("%d=a[%d][%d] /a[%d][%d]\n ", a,i,k,k,k); printf("[k]=%d\n", k); printf("a[%d][%d]=a[%d][%d]-a[%d][%d]*%lf\n", i, j, i, j, k, j, d);//~~ここまで付け加えました。 } }
以下が警告です。
1>------ ビルド開始: プロジェクト: サイトに載っていた連立方程式の計算, 構成: Release x64 ------ 1>Source.cpp 1>c:\users\daito\source\repos\サイトに載っていた連立方程式の計算\サイトに載っていた連立方程式の計算\source.cpp(58): warning C4477: 'printf' : 書式文字列 '%lf' には、型 'double' の引数が必要ですが、可変個引数 1 は型 'double (*)[5]' です 1>c:\users\daito\source\repos\サイトに載っていた連立方程式の計算\サイトに載っていた連立方程式の計算\source.cpp(59): warning C4477: 'printf' : 書式文字列 '%d' には、型 'int' の引数が必要ですが、可変個引数 1 は型 'double (*)[5]' です 1>c:\users\daito\source\repos\サイトに載っていた連立方程式の計算\サイトに載っていた連立方程式の計算\source.cpp(59): warning C4313: 'printf': 書式文字列内の '%d' が引数 1 ('double (*)[5]' 型) と競合しています。 1>コード生成しています。 1>0 of 16 functions ( 0.0%) were compiled, the rest were copied from previous compilation. 1> 0 functions were new in current compilation 1> 0 functions had inline decision re-evaluated but remain unchanged 1>コード生成が終了しました。 1>サイトに載っていた連立方程式の計算.vcxproj -> c:\users\daito\source\repos\サイトに載っていた連立方程式の計算\x64\Release\サイトに載っていた連立方程式の計算.exe 1>プロジェクト "サイトに載っていた連立方程式の計算.vcxproj" のビルドが終了しました。 ========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/20 14:13