• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cプログラミングの問題です。ニュートン法を利用して3次方程式の解を求めるプログラミング作成。)

C言語のプログラム作成:ニュートン法を利用した3次方程式の解の求め方

このQ&Aのポイント
  • C言語のプログラミング問題で、ニュートン法を利用して3次方程式の解を求めるプログラムを作成する方法について説明します。
  • 3次方程式を解くためには、ニュートン法というアルゴリズムを利用します。このアルゴリズムを用いると、与えられた3次方程式の実根を求めることができます。
  • プログラミングが苦手な方でも、ニュートン法を使えば3次方程式の解を求めることができます。この記事では、具体的なプログラムの作成手順を説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLK314
  • ベストアンサー率55% (84/152)
回答No.2

3次方程式は複雑なので2次方程式で示します. なんとか頑張って応用してください 前提として実数解のみとし 虚数解の場合はエラー扱いとします。 方程式は a * x ^2 * b * x + c = 0とします 判別式を実装します CalcDという名前にします。 double CalcD(double a, double b, double c) { return b * b - 4 * a * c; } 特に難しい部分はないと思います 係数から判別式を計算し、それを関数の値として戻しています 次に、方程式本体を解く部分を作ります Resolvという名前にします ここで難しいのはエラー(判別式 < 0)をどう扱うか?です 今回の場合、エラーつまり異常事態として扱うので C++であれば本来、例外で教えるべきなのですが、 例外を扱うと少々難しくなりますのでやめます。 今回は解の個数を戻すことで判定させることとします 解事体は配列に入れて戻すことにします。 int Resolv(double a, double b, double c, double buffer[]) { // 解の個数を求めます // 判別式を関数として実装してあるので、それを使います   double d = CalcD(a, b, c) if (d < 0) return 0; // 実数解はありません   if (d == 0) { buffer[0] = -b / (2 * a); return 1; // 重解です }  else { buffer[0] = (-b + sqrt(d)) / (2 * a); buffer[1] = (-b - sqrt(d)) / (2 * a); return 2; // 相異なる2つの実数解です } } あとはプログラム全体を制御する部分です しかし、もう部品はありますのであとは簡単です int main(int argc, char *argv[]) { // エラーチェックは省略します  // 本来はパラメータの妥当性を検証すべきです  double a = atof(argv[0]);  double b = atof(argv[1]);  double c = atof(argv[2]); // 実際に計算します  double buffer[2]; int n = Resolv(a, b, c, buffer); // 結果を表示します  switch (n) { case 0: printf("実数解はありません。"); break; case 1: printf("実数解は %f です.", buffer[0]); break; default: printf("実数解は %f と %fです.", buffer[0], buffer[1]); } return 0; } 如何でしょうか? プログラムの作成の雰囲気のようなものがつかめたでしょうか? とにかく、分かり易い単位に関数を作ることが大切です。 関数へのパラメータの渡し方 関数からの情報の戻し方(戻り値を使う方法、アドレス渡し(配列もアドレス渡しです)等のテクニックを伝えたつもりです これを参考に3次方程式も頑張ってください

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ニュートン法がどのようなものか, まずは書いてみてください. 「プログラムが得意でない」ことを強調されているということは, これくらい余裕ですよね?

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>どなたか教えてください、よろしくお願いします。 何をお教えすればよいのでしょうか。 文面を拝見すると、答えを出すプログラムの作成を依頼なさっているようにお見受けします。 ということは、質問ではなくて丸投げに相当するように思えますが、 ご本人のお気持ちもそういうことでしょうか。 ところで、学校かどこかの課題ですか?

関連するQ&A

専門家に質問してみよう