Yang menghitung dan mengembalikan nilai sin(x) kira-kira dengan rumus

pemrograman


Tulis fungsi dengan prototipe:
dobel mySin(dobel x, dobel epsi);
yang menghitung dan mengembalikan nilai sin(x) kira-kira dengan rumus:
dosa(x) = – + -… +(-1)n
di sini n adalah bilangan bulat pertama yang | |  epsi puas.

Apa yang saya coba:

   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());
}

mengapa kodenya tidak benar? bantu aku kesalahannya.

Solusi 1

Ada tiga jenis kesalahan yang mungkin terjadi di sini, dan kami tidak tahu yang mana kesalahannya:
1) Kesalahan kompilasi / penautan: Anda mencoba mengkompilasi aplikasi Anda dan melaporkan masalah sebelum dapat dijalankan. Jika saya mencoba mengkompilasi kode Anda seperti yang ditunjukkan, saya harus menambahkan dua baris ini:

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

dan juga menambahkan “definisi tiruan” dari giaithua berfungsi untuk mendapatkan kompilasi bersih dari kode yang Anda tampilkan.
Sampai Anda memiliki kompilasi yang bersih, Anda tidak akan menghasilkan file EXE, dan aplikasi Anda tidak dapat berjalan.
2) Kesalahan waktu proses: ini menghentikan aplikasi Anda untuk melanjutkan karena terjadi sesuatu yang tidak dapat diatasi oleh sistem – mungkin kesalahan “bagi dengan nol”, atau upaya membaca file yang tidak ada misalnya. =Sistem menampilkan pesan kesalahan kepada Anda, dan segera mematikan aplikasi Anda.
Kami tidak dapat membantu Anda memperbaikinya tanpa mengetahui apa pesannya, di mana pesan itu terjadi, dan data apa yang Anda masukkan untuk mendapatkannya.
3) Kesalahan logika: ini berarti Anda mendapatkan hasil yang tidak diharapkan tetapi aplikasi Anda tidak mogok. Misalnya, jika Anda mengharapkan aplikasi Anda memberikan hasil 42 tetapi malah memberi Anda 666.
Kami tidak dapat membantu Anda memperbaikinya tanpa mengetahui nilainya, apa yang Anda harapkan, kapan Anda mendapatkannya, dan data apa yang Anda masukkan untuk mendapatkannya.

Saya akan berasumsi ini salah satu dari dua yang terakhir, dan proses untuk menemukan masalah memerlukan kode Anda berjalan dengan data Anda – tidak ada yang kami miliki. Kompilasi tidak berarti kode Anda benar! :tertawa:

Jadi itu terserah Anda, tetapi Anda tidak sendirian.
Bayangkan proses pengembangan seperti menulis email: kompilasi berhasil berarti Anda menulis email dalam bahasa yang benar – Inggris, bukan bahasa Jerman misalnya – bukan email tersebut berisi pesan yang ingin Anda kirim.

Jadi sekarang Anda memasuki tahap pengembangan kedua (pada kenyataannya ini adalah tahap keempat atau kelima, tetapi Anda akan sampai pada tahap awal nanti): Pengujian dan Debugging.

Mulailah dengan melihat apa fungsinya, dan apa perbedaannya dari apa yang Anda inginkan. Hal ini penting karena memberi Anda informasi mengapa ia melakukan hal tersebut. Misalnya, jika suatu program dimaksudkan untuk membiarkan pengguna memasukkan angka dan menggandakannya serta mencetak jawabannya, maka input/outputnya seperti ini:

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

Maka cukup jelas bahwa masalahnya ada pada bit yang menggandakannya – bit tersebut tidak menambahkan dirinya sendiri ke dirinya sendiri, atau mengalikannya dengan 2, melainkan mengalikannya dengan dirinya sendiri dan mengembalikan kuadrat input.
Jadi dengan itu, Anda dapat melihat kodenya dan jelas bahwa kode itu ada di suatu tempat di sini:

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

Setelah Anda mengetahui apa yang salah, mulailah menggunakan debugger untuk mencari tahu alasannya. Letakkan breakpoint pada baris pertama metode ini, dan jalankan aplikasi Anda. Ketika mencapai breakpoint, debugger akan berhenti, dan menyerahkan kendali kepada Anda. Anda sekarang dapat menjalankan kode Anda baris demi baris (disebut “langkah tunggal”) dan melihat (atau bahkan mengubah) konten variabel seperlunya (Anda bahkan dapat mengubah kode dan mencoba lagi jika perlu).
Pikirkan tentang apa yang harus dilakukan setiap baris dalam kode sebelum Anda menjalankannya, dan bandingkan dengan apa yang sebenarnya dilakukannya saat Anda menggunakan tombol “Langkah” untuk mengeksekusi setiap baris secara bergantian. Apakah itu sesuai dengan harapan Anda? Jika ya, lanjutkan ke baris berikutnya.
Jika tidak, mengapa tidak? Apa bedanya?
Mudah-mudahan, ini dapat membantu Anda menemukan bagian mana dari kode tersebut yang bermasalah, dan apa masalahnya.
Ini adalah keterampilan, dan merupakan salah satu keterampilan yang layak untuk dikembangkan karena membantu Anda di dunia nyata dan juga dalam pengembangan. Dan seperti semua keterampilan, keterampilan ini hanya meningkat jika digunakan!

コメント

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