【解決方法】これは、次の式によって値 sin(x) を近似的に計算して返します。

[ad_1]

プロトタイプを使用して関数を作成します。
double mySin(double x, double epsi);
これは、次の式によって近似的に値 sin(x) を計算して返します。
sin(x) = – + -… +(-1)n
ここで、n は最初の整数です。 |  エプシは満足です。

私が試したこと:

   double q3() {
       int x;
       int n = 1;
       double p = 0;
       int dau = -1;
       int tongquat2 = 1.0 / (2 * n + 1);
       while (tongquat2 >= 1e-10) {
           tongquat2 = 1.0 / (2 * n + 1);
           p += -1 * dau * pow(-1, n) * pow(x, 2 * n + 1) / (giaithua(2 * n + 1));
           dau *= -1;
           n++;
       }
       return p;
   }
int main(){
   int x;
   scanf("%d", &x);
   printf("sin(%d)= %.6lf", x, q3());
}

なぜコードが正しくないのでしょうか? エラーを助けてください。

解決策 1

ここには 3 種類のエラーが関係している可能性がありますが、どれがどれであるかはわかりません。
1) コンパイル/リンク エラー: アプリをコンパイルしようとすると、実行前に問題が報告されます。 示されているようにコードをコンパイルしようとすると、次の 2 行を追加する必要があります。

C
#include <stdio.h>
#include <math.h>

の「ダミー定義」も追加します。 giaithua 関数を使用して、表示したコードのクリーンなコンパイルを取得します。
クリーンなコンパイルが完了するまでは EXE ファイルが生成されず、アプリは実行できません。
2) 実行時エラー: システムが対処できない何かが発生したため、アプリの続行が停止します。たとえば、「ゼロ除算」エラー、または存在しないファイルを読み取ろうとしたことなどです。 = システムはエラー メッセージを表示し、アプリをすぐに強制終了します。
メッセージが何であるか、どこで発生したか、メッセージを取得するためにどのようなデータを入力したかが分からなければ、問題を修正することはできません。
3) ロジック エラー: 予期しない結果が得られるものの、アプリはクラッシュしないことを意味します。 たとえば、アプリの結果が 42 になると予想していたが、代わりに 666 が返された場合です。
値が何であったか、何が得られると期待していたのか、いつ取得したのか、取得するためにどのようなデータを入力したのかが分からなければ、問題を修正することはできません。

最後の 2 つのうちの 1 つであると仮定します。問題を見つけるプロセスでは、データを使用してコードを実行する必要がありますが、どちらもありません。 コンパイルしたからといって、コードが正しいというわけではありません。 :笑う:

つまり、それはあなた次第ですが、あなたは一人ではありません。
開発プロセスを電子メールを書くことと考えてください。コンパイルが成功したということは、電子メールを適切な言語 (たとえばドイツ語ではなく英語) で書いたことを意味します。電子メールに送信したいメッセージが含まれていたわけではありません。

これで、開発の第 2 段階 (実際には第 4 段階か第 5 段階ですが、後で初期段階に戻ります) に入ります: テストとデバッグ。

まず、それが何をするのか、そしてそれがあなたが望んでいることとどう違うのかを見てみましょう。 これは、なぜそのような動作をしているのかについての情報を提供するため、重要です。 たとえば、プログラムがユーザーに数値を入力させ、その数値を 2 倍にして答えを出力することを目的としている場合、入力/出力が次のようになったとします。

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16

次に、問題はそれを 2 倍にするビットにあることは明らかです。ビット自体に加算したり 2 を乗算したりするのではなく、自身を乗算して入力の 2 乗を返します。
それで、コードを見ると、それがここのどこかにあることが明らかです。

C#
private int Double(int value)
   {
   return value * value;
   }

何が問題なのかがわかったら、デバッガーを使用してその理由を調べてください。 メソッドの最初の行にブレークポイントを配置し、アプリを実行します。 ブレークポイントに到達すると、デバッガーは停止し、制御がユーザーに渡されます。 コードを 1 行ずつ実行し (「シングル ステップ」と呼ばれます)、必要に応じて変数の内容を確認 (または変更) できるようになりました (必要に応じて、コードを変更して再試行することもできます)。
コードを実行する前にコードの各行が何をすべきかを考え、それを「ステップオーバー」ボタンを使用して各行を順番に実行したときの実際の動作と比較してください。 期待通りの結果になりましたか? その場合は、次の行に進みます。
そうでない場合は、なぜそうではないのでしょうか? どう違うのでしょうか?
コードのどの部分に問題があるのか​​、また何が問題なのかを特定するのに役立つことを願っています。
これはスキルであり、開発だけでなく現実世界でも役立つため、伸ばす価値のあるスキルです。 すべてのスキルと同様、それは使用することでのみ向上します。

[ad_2]

コメント

タイトルとURLをコピーしました