जो लगभग सूत्र द्वारा मान पाप(x) की गणना करता है और लौटाता है

[ad_1]

प्रोटोटाइप के साथ फ़ंक्शन लिखें:
डबल मायसिन(डबल एक्स, डबल ईपीएसआई);
जो सूत्र द्वारा लगभग पाप (x) मान की गणना करता है और लौटाता है:
पाप(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

यहां तीन प्रकार की त्रुटियां शामिल हो सकती हैं, और हमें नहीं पता कि यह कौन सी है:
1) संकलन/लिंकिंग त्रुटियां: आप अपने ऐप को संकलित करने का प्रयास करते हैं और चलने से पहले समस्याओं की रिपोर्ट प्राप्त करते हैं। यदि मैं दिखाए गए अनुसार आपका कोड संकलित करने का प्रयास करता हूं, तो मुझे ये दो पंक्तियां जोड़नी होंगी:

सी
#include <stdio.h>
#include <math.h>

और इसकी एक “डमी परिभाषा” भी जोड़ें giaithua आपके द्वारा दिखाए गए कोड का साफ़ संकलन प्राप्त करने के लिए फ़ंक्शन।
जब तक आपके पास साफ़ संकलन नहीं होता, आप एक EXE फ़ाइल नहीं बनाते हैं, और आपका ऐप नहीं चल सकता।
2) रन टाइम त्रुटियाँ: ये आपके ऐप को जारी रखने से रोकती हैं क्योंकि कुछ ऐसा हुआ है जिसे सिस्टम संभाल नहीं सकता है – शायद “शून्य से विभाजित करें” त्रुटि, या उदाहरण के लिए किसी फ़ाइल को पढ़ने का प्रयास जो मौजूद नहीं है। =सिस्टम आपको एक त्रुटि संदेश प्रदर्शित करता है, और आपके ऐप को तुरंत बंद कर देता है।
यह जाने बिना कि संदेश क्या था, यह कहां हुआ और इसे प्राप्त करने के लिए आपने कौन सा डेटा दर्ज किया है, हम इसे ठीक करने में आपकी मदद नहीं कर सकते।
3) तर्क त्रुटियां: इसका मतलब है कि आपको अप्रत्याशित परिणाम मिलते हैं लेकिन आपका ऐप क्रैश नहीं होता है। उदाहरण के लिए, यदि आप उम्मीद करते हैं कि आपका ऐप 42 का परिणाम देगा लेकिन यह आपको इसके बजाय 666 देता है।
हम यह जाने बिना इसे ठीक करने में आपकी मदद नहीं कर सकते कि मूल्य क्या था, आपको क्या मिलने की उम्मीद थी, आपको यह कब मिला और इसे पाने के लिए आपने कौन सा डेटा दर्ज किया था।

मैं इसे अंतिम दो में से एक मानने जा रहा हूं, और समस्या का पता लगाने की प्रक्रिया के लिए आपके कोड को आपके डेटा के साथ चलाने की आवश्यकता है – इनमें से कोई भी हमारे पास नहीं है। संकलन का मतलब यह नहीं है कि आपका कोड सही है! :हँसना:

तो यह आप पर निर्भर करेगा, लेकिन आप अकेले नहीं हैं।
विकास प्रक्रिया को एक ईमेल लिखने के रूप में सोचें: सफलतापूर्वक संकलित करने का मतलब है कि आपने ईमेल को सही भाषा में लिखा है – उदाहरण के लिए जर्मन के बजाय अंग्रेजी – न कि ईमेल में वह संदेश है जो आप भेजना चाहते थे।

तो अब आप विकास के दूसरे चरण में प्रवेश करते हैं (वास्तव में यह चौथा या पांचवां है, लेकिन आप बाद में पहले चरण में आएंगे): परीक्षण और डिबगिंग।

यह देखकर प्रारंभ करें कि यह क्या करता है, और यह जो आप चाहते थे उससे किस प्रकार भिन्न है। यह महत्वपूर्ण है, क्योंकि यह आपको जानकारी देता है कि वह ऐसा क्यों कर रहा है। उदाहरण के लिए, यदि किसी प्रोग्राम का उद्देश्य उपयोगकर्ता को एक संख्या दर्ज करने देना है और वह उसे दोगुना कर उत्तर प्रिंट करता है, तो यदि इनपुट/आउटपुट इस प्रकार था:

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

फिर यह बिल्कुल स्पष्ट है कि समस्या उस बिट के साथ है जो इसे दोगुना करता है – यह स्वयं को स्वयं में नहीं जोड़ रहा है, या इसे 2 से गुणा नहीं कर रहा है, यह इसे स्वयं से गुणा कर रहा है और इनपुट का वर्ग वापस कर रहा है।
तो इसके साथ, आप कोड को देख सकते हैं और यह स्पष्ट है कि यह यहीं कहीं है:

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

एक बार जब आपको अंदाजा हो जाए कि क्या गलत हो रहा है, तो इसका कारण जानने के लिए डिबगर का उपयोग करना शुरू करें। विधि की पहली पंक्ति पर एक ब्रेकप्वाइंट लगाएं, और अपना ऐप चलाएं। जब यह ब्रेकप्वाइंट पर पहुंच जाएगा, तो डिबगर रुक जाएगा, और नियंत्रण आपको सौंप देगा। अब आप अपना कोड लाइन-दर-लाइन चला सकते हैं (जिसे “सिंगल स्टेपिंग” कहा जाता है) और आवश्यकतानुसार वैरिएबल सामग्री को देख सकते हैं (या बदल भी सकते हैं) (हेक, आप कोड को बदल भी सकते हैं और यदि आवश्यक हो तो पुनः प्रयास कर सकते हैं)।
इस बारे में सोचें कि कोड को निष्पादित करने से पहले प्रत्येक पंक्ति को क्या करना चाहिए, और इसकी तुलना तब करें जब आप प्रत्येक पंक्ति को बारी-बारी से निष्पादित करने के लिए “स्टेप ओवर” बटन का उपयोग करते हैं। क्या इसने वही किया जो आप अपेक्षा करते थे? यदि हां, तो अगली पंक्ति पर आगे बढ़ें।
यदि नहीं, तो क्यों नहीं? यह किस प्रकार भिन्न है?
उम्मीद है, इससे आपको यह पता लगाने में मदद मिलेगी कि उस कोड के किस हिस्से में समस्या है और समस्या क्या है।
यह एक कौशल है, और यह विकसित करने लायक है क्योंकि यह आपको वास्तविक दुनिया के साथ-साथ विकास में भी मदद करता है। और सभी कौशलों की तरह, इसमें केवल उपयोग से ही सुधार होता है!

[ad_2]

コメント

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