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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
- C言語・C++・C# C#の問題で2つの整数a,bの最大公約数(GCD)を求めるユークリッドの互除法は,aをbで割った余り 2 2022/06/26 16:52
- その他(教育・科学・学問) 小学生にプログラミング(Scratch)を教える方法 2 2022/06/01 06:39
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- その他(プログラミング・Web制作) 大学一年でVBAのプログラミングを勉強しているものです。来週の情報の授業で以下の問題のプログラムを勉 4 2023/01/19 16:15
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- C言語・C++・C# プログラミングの問題です。P1(x1,x2)、P2(x2,y2)をニ頂点とする長方形および△P1P2 2 2022/05/09 22:17
- 数学 数学の問題の解き方を教えてください! 3 2022/11/02 17:32
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 malloc 関数を使って教えてください。 入出力例1 3 2022/07/21 09:36
- 数学 数学の問題で法線ベクトルについて 5 2022/11/13 12:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
C言語 関数プロトタイプ宣言の...
-
数値を指数部と仮数部に分離したい
-
学校の課題で2次方程式のプログ...
-
関数におけるif文とreturn文に...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
C言語で表記についの質問です
-
指数の表示
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
物体が往復する動きを作りたい
-
C言語で内積、、、わかりません。
-
c言語のコンパイルエラー canno...
-
C言語のpow関数の不具合
-
処理時間計測
-
float?数字の後にLがつくもの
-
「割り算」 と 「分数の掛け算」
-
C++標準ライブラリィーのcomple...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語の型による処理速度の違い
-
Cで3乗根を求める方法
-
C言語で-23乗を取り扱うには
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C言語のプログラムで#include<m...
-
int とdoubleの比較
-
C++で外積
おすすめ情報