एलएन सी प्रोग्राम में त्रुटि का सुधार


मैंने अपने प्रोग्राम में कुछ बदलाव किए हैं लेकिन अभी भी इन त्रुटियों को ठीक नहीं कर पाया हूँ

/*emphasized text*following is my code to find derivates of a 3 degree polynomial function
But many error are generated
Can anyone please correct them*/


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

float poly(float a[], int, float);
float deriv(float a[], int, float);
float deriv2(float a[], int, float);
float deriv3(float a[], int, float);

int main()
{
    float x, a[10], y1, dy1,dy2,dy3;
    int deg, i,deg2,deg3;

    printf("Enter the degree of polynomial equation: ");
    scanf("%d", °);

    printf("Ehter the value of x for which the equation is to be evaluated: ");
    scanf("%f", &x);

    for (i = 0; i <= deg; i++) {
        printf("Enter the coefficient of x to the power %d: ", i);
        scanf("%f", &a[i]);
    }

    y1 = poly(a, deg, x);
    dy1 = deriv(a, deg, x);
     dy2 = deriv2(a, deg2, x);
     dy3 = deriv3(a, deg3, x);

    printf("The value of polynomial equation for the value of x = %.2f is: %.2f", x, y1);
    printf("\nThe value of the derivative of the polynomial equation at x = %.2f is: %.2f", x, dy1);
printf("\nThe value of the derivative of the polynomial equation at x = %.2f is: %.2f", x, dy2);
printf("\nThe value of the derivative of the polynomial equation at x = %.2f is: %.2f", x, dy3);

    return 0;
}

/* function for finding the value of polynomial at some value of x */

float poly(float a[], int deg, float x)
{
    float p;
    int i;

    p = a[deg];

    for (i = deg; i >= 1; i--) {
        p = (a[i - 1] + x * p);
    }

    return p;
}

/* function for finding the derivative at some value of x */
float deriv(float a[], int deg, float x)
{
    float d[10], pd = 0, ps;
    int i;

    for (i = 0; i <= deg; i++) {
        ps = pow(x, deg - (i + 1));
        d[i] = (deg - i) * a[deg - i] * ps;
        pd = pd + d[i];
    }

    return pd;
}
float deriv2(float b[],int degg,float x)
{float d[10], pd=0, ps;
int j,degg,deg;
degg=deg-1;
for (j=degg;j>=0;j--)
{
if (b[j]>0)
c[j]=a[j]*b[j];
b[j]=b[j]-1;
else 
break;
}


float deriv3(float c[],int deggg,float x)
{float d[10], pd=0, ps;
int k,deggg;
for (k=deg;k>=0;k--)
{
if (b[k]>0)
q[k]=c[k]*b[k];
b[k]=b[k]-1;
else 
break;
}
deggg=degg-1;
}

`

मैंने क्या प्रयास किया है:

मैंने उपरोक्त प्रोग्राम को आज़माया है

समाधान 1

त्रुटि संदेश पढ़ें: वे समस्याओं को ठीक करने में आपकी सहायता के लिए मौजूद हैं।
उदाहरण के लिए पहली त्रुटि लें:

main.c: In function ‘deriv2’:
main.c:71:7: error: ‘degg’ redeclared as different kind of symbol
   71 | int j,degg,deg;
      |       ^~~~
main.c:69:28: note: previous definition of ‘degg’ was here
   69 | float deriv2(float b[],int degg,float x)
      |           

यह आपको फ़ाइल बताता है: main.c

यह आपको पंक्ति बताता है: 71

यह आपको कॉलम बताता है: 7

यह आपत्तिजनक पाठ की ओर इशारा करता है: degg

यह आपको बताता है कि समस्या क्या है: ‘degg’ redeclared as different kind of symbol

यह आपको अतिरिक्त जानकारी देता है: previous definition of ‘degg’ was here

और यह आपको दिखाता है कि पिछली घोषणा क्या थी: float deriv2(float b[],int degg,float x)

उस पंक्ति के कोड को देखें, और आप उसे देखेंगे degg एक पैरामीटर के रूप में घोषित किया गया है, और फिर आप इसे फिर से एक स्थानीय चर के रूप में घोषित करने का प्रयास करते हैं – जिसका अर्थ है कि पैरामीटर कभी भी पहुंच योग्य नहीं होगा।

समाधान: समान नाम के स्थानीय चर को हटा दें।
उसे ठीक करें, और अपना कोड पुनः संकलित करें। फिर इस बार पहला त्रुटि संदेश देखें।

आपको कोडिंग करते समय हर दिन, शायद दिन में कई बार सिंटैक्स त्रुटियां होने की उम्मीद करनी चाहिए – हम सभी ऐसा करते हैं, भले ही हमारे पास कितना भी अनुभव हो! कभी-कभी, हम किसी वेरिएबल या कीवर्ड की वर्तनी गलत लिखते हैं; कभी-कभी हम किसी स्ट्रिंग या कोड ब्लॉक को बंद करना भूल जाते हैं। कभी-कभी बिल्ली आपके कीबोर्ड पर चलकर कुछ अजीब टाइप कर देती है। कभी-कभी हम भूल जाते हैं कि एक मेथड कॉल के लिए कितने पैरामीटर की आवश्यकता होती है।

हम सभी गलतियां करते हैं।

और क्योंकि हम सभी ऐसा करते हैं, हम सभी को वाक्यविन्यास त्रुटियों को ठीक करना होगा – और यह सीखना बहुत तेज़ है कि कैसे सीखें और उन्हें स्वयं ठीक करें बजाय किसी और के आपके लिए उन्हें ठीक करने की प्रतीक्षा करने के! इसलिए त्रुटि संदेशों को पढ़ने का तरीका सीखने में थोड़ा समय निवेश करें, और कंपाइलर जो आपको गलत बता रहा है उसके आलोक में अपने कोड की व्याख्या कैसे करें – यह वास्तव में मददगार होने की कोशिश कर रहा है!

तो इसे पढ़ें: किसी समस्या को हल करने के लिए कोड कैसे लिखें, एक शुरुआती मार्गदर्शिका भाग 2: सिंटेक्स त्रुटियाँ[^] – अगली बार जब आपको कोई संकलन त्रुटि मिले तो इससे आपको मदद मिलेगी!

समाधान 2

सलाह: अपने कोड को ठीक से इंडेंट करना सीखें, इससे उसकी संरचना का पता चलता है और पढ़ने और समझने में मदद मिलती है। यह संरचनाओं की गलतियों को पहचानने में भी मदद करता है।

सी
/*emphasized text*following is my code to find derivates of a 3 degree polynomial function
But many error are generated
Can anyone please correct them*/

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

float poly(float a[], int, float);
float deriv(float a[], int, float);
float deriv2(float a[], int, float);
float deriv3(float a[], int, float);

int main() 
{
  float x, a[10], y1, dy1, dy2, dy3;
  int deg, i, deg2, deg3;

  printf("Enter the degree of polynomial equation: ");
  scanf("%d", °);

  printf("Ehter the value of x for which the equation is to be evaluated: ");
  scanf("%f", & x);

  for (i = 0; i <= deg; i++) {
    printf("Enter the coefficient of x to the power %d: ", i);
    scanf("%f", & a[i]);
  }

  y1 = poly(a, deg, x);
  dy1 = deriv(a, deg, x);
  dy2 = deriv2(a, deg2, x);
  dy3 = deriv3(a, deg3, x);

  printf("The value of polynomial equation for the value of x = %.2f is: %.2f", x, y1);
  printf("\nThe value of the derivative of the polynomial equation at x = %.2f is: %.2f", x, dy1);
  printf("\nThe value of the derivative of the polynomial equation at x = %.2f is: %.2f", x, dy2);
  printf("\nThe value of the derivative of the polynomial equation at x = %.2f is: %.2f", x, dy3);

  return 0;
}

/* function for finding the value of polynomial at some value of x */
float poly(float a[], int deg, float x) 
{
  float p;
  int i;

  p = a[deg];

  for (i = deg; i >= 1; i--) {
    p = (a[i - 1] + x * p);
  }

  return p;
}

/* function for finding the derivative at some value of x */
float deriv(float a[], int deg, float x) 
{
  float d[10], pd = 0, ps;
  int i;

  for (i = 0; i <= deg; i++) {
    ps = pow(x, deg - (i + 1));
    d[i] = (deg - i) * a[deg - i] * ps;
    pd = pd + d[i];
  }

  return pd;
}

float deriv2(float b[], int degg, float x) 
{
   float d[10], pd = 0, ps;
   int j, degg, deg;
   degg = deg - 1;
   for (j = degg; j >= 0; j--) {
     if (b[j] > 0)
       c[j] = a[j] * b[j];
       b[j] = b[j] - 1; // Error here
     else
       break;  // Error here
   }
   // Error here

float deriv3(float c[], int deggg, float x) 
{
   float d[10], pd = 0, ps;
   int k, deggg;
   for (k = deg; k >= 0; k--) {
     if (b[k] > 0)
         q[k] = c[k] * b[k];
         b[k] = b[k] - 1; // Error here
      else
          break;          // Error here 
        }
      deggg = degg - 1;
      // Error here
    } // Error here

इंडेंटेशन शैली – विकिपीडिया[^]
सर्वश्रेष्ठ C++ फ़ॉर्मेटर और ब्यूटीफायर[^]
ऑनलाइन सी/सी++ फ़ॉर्मेटर, इंडेंटर और ब्यूटीफायर – टेकी डिलाइट[^]

पेशेवर प्रोग्रामर के संपादकों के पास यह सुविधा है और अन्य जैसे कोष्ठक मिलान और वाक्यविन्यास हाइलाइटिंग।
नोटपैड++ होम[^]
Ultraedit[^]
ओपन इनोवेशन और सहयोग को सक्षम करना | ग्रहण फाउंडेशन[^]

समाधान 3

कई लोग पहले ही कोड पर टिप्पणी कर चुके हैं. यह मेरे लिए एक रहस्य है कि टिप्पणियों और सुझावों को क्यों नजरअंदाज किया जा रहा है। कंपाइलर जिन स्पष्ट त्रुटियों के बारे में शिकायत करता है, उनके अलावा तार्किक समस्याएं भी हैं।
चूंकि ओरिजिनल ग्रिफ़ और पैट्रिसटी ने पहले ही कुछ समस्याओं को बहुत स्पष्ट रूप से समझाया है (दोनों के लिए +5), मैं इसे एक बिंदु पर एक उदाहरण के रूप में फिर से आज़माऊंगा। उदाहरण के लिए, केवल एक व्युत्पन्न फ़ंक्शन लिखने और फिर इसे कई बार उपयोग करने के सीपालिनी के सुझाव से कहीं अधिक सार्वभौमिक समाधान प्राप्त होगा। मेरी टिप्पणी कि व्युत्पन्न फ़ंक्शन एक नकारात्मक सूचकांक और घातांक उत्पन्न करता है, को भी नजरअंदाज कर दिया गया। चूँकि व्युत्पत्ति यहाँ सबसे महत्वपूर्ण कार्य है, इसलिए इसे सही भी होना चाहिए और यथासंभव अच्छा प्रदर्शन भी करना चाहिए। वर्तमान में इसी कोड का प्रयोग किया जाता है।

इसमें गलत क्या है?

सी
/* function for finding the derivative at some value of x */
float deriv(float a[], int deg, float x)
{
    float d[10], pd = 0, ps;
    int i;

    for (i = 0; i <= deg; i++) {
        ps = pow(x, deg - (i + 1));
        d[i] = (deg - i) * a[deg - i] * ps;
        pd = pd + d[i];
    }

    return pd;
}

लूप के अंतिम इंडेक्स i का मान deg है। इस मान को सूत्र में प्लग करने पर यह मिलता है:

सी
deg - (deg + 1) = -1

तो निम्नलिखित की गणना की जाती है:

सी
ps = pow(x, -1);

हालाँकि, यह मान स्पष्ट रूप से आवश्यक नहीं है और परिणाम में किसी भी तरह से योगदान नहीं देता है। यहां आप भाग्यशाली हैं कि परिणाम भी गलत नहीं है।

स्थानीय रूप से परिभाषित फ़ील्ड “फ्लोट डी[10]”वास्तव में इसकी आवश्यकता नहीं है और यह फ़ंक्शन को बड़े पैमाने पर प्रतिबंधित करता है। यदि परिवर्तनीय डिग्री 10 से अधिक है, तो प्रोग्राम क्रैश हो जाता है या बकवास करता है। वास्तव में, यह कमजोर बिंदुओं से बच सकता है, फ़ंक्शन को बहुत छोटा कर सकता है और एक ही समय में गणना सटीकता में सुधार कर सकता है।

सी
double d = 0.0;
for (int i = 1; i <= deg; i++) {
   d += i * a[i] * pow(x, i-1);
}
return (float)d;

समाधान 6

#शामिल
शून्य मुख्य ()
{
पूर्ण आयु;

प्रिंटफ (“अपनी आयु दर्ज करें”);
स्कैनफ़ (“%d”,&उम्र);
यदि(उम्र>=18)

स्वीकार करना होगा;
बदलना
{
प्रिंटफ (“आपकी उम्र अमान्य है \n”);
}
स्वीकार करना:

प्रिंटफ (“आपकी उम्र स्वीकार की जाती है”);

}

コメント

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