C言語のプログラミング問題です。
ニュートン法を利用して、3次方程式の解を求めるプログラムを作成しなさい。
とのことです。プログラムが得意ではないので、よろしくお願いします。
C言語のプログラミング問題で、ニュートン法を利用して次の3次方程式の解を求めるプログラミングを作成。というものなのですが、プログラミングが苦手でうまくできません。
y=ax^3+bx^2+cx+d (ただし、a>0とする)
任意の係数a,b,c,dを与え、y=0のときの解(実根のみ)を求めるプログラミングを作成せよ。
という問題です。プログラミングの内容を説明しなくてはいけないので、内容のほうも若干詳しく説明していただけると助かります。
どなたか教えてください、よろしくお願いします。
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次方程式も頑張ってください
No.1
- 回答日時:
>どなたか教えてください、よろしくお願いします。
何をお教えすればよいのでしょうか。
文面を拝見すると、答えを出すプログラムの作成を依頼なさっているようにお見受けします。
ということは、質問ではなくて丸投げに相当するように思えますが、
ご本人のお気持ちもそういうことでしょうか。
ところで、学校かどこかの課題ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 関数プロトタイプ宣言の...
-
C言語を実行すると-infが出てき...
-
プログラムでの数字につく”f”の...
-
2次方程式の解を求めるプログ...
-
C言語で-23乗を取り扱うには
-
Cで3乗根を求める方法
-
doubleの変数にintとintの割り...
-
2分法で方程式の複数の解を自...
-
c言語で、繰り返し文の中で、0....
-
浮動小数点の扱い
-
int とdoubleの比較
-
floating point not loadedとは?
-
c言語のプログラミングについて...
-
文字列をfloatで読み込む(atoi,...
-
二分探索で方程式の解を求める方法
-
long doubleの表示方法
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
2の補数を計算するプログラム
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
doubleの変数にintとintの割り...
-
至急です! マクロ定義で #defi...
-
C言語 関数プロトタイプ宣言の...
-
C言語の型による処理速度の違い
-
float型とdouble型の変数の違い...
-
int とdoubleの比較
-
関数におけるif文とreturn文に...
-
Cで3乗根を求める方法
-
c言語のコンパイルエラー canno...
-
2次方程式の解を求めるプログ...
-
浮動小数点の定数
-
-1.#IND00と出てしまうのですが...
-
doubleは常に%lfとするべきなのか
-
C言語のpow関数の不具合
-
difftime()について
-
C++で外積
おすすめ情報