.j



  • .j



  • Juli84 schrieb:

    Dann gibt er mir zwar zwei Ableitungen aus, also P' und P'', aber das sind beides die selben. Ich weiß wirklich nicht weiter. 😕

    Dann machst du was falsch, die Idee ist richtig 😉 Aber ich hab keine Lust mich in deinen Code reinzudenken, sorry.
    Kleiner Tipp, debuggs einfach durch. Dann siehst du doch sofort, wo etwas anderes passiert, als du erwartest.



  • Das Problem ist, dass du f übergibst und das Ergebnis in f_strich erwartest.
    Und das macht jeder Aufruf von Ableitung.
    Da in f aber die Ursprungsfunktion steht, wird auch immer von dieser die Ableitung berechnet.

    Kopier vor dem Aufruf von ableitung das Array von f nach f_strich.
    Dann rechnest du in ableitung nur noch mit f_strich.

    a_strich[i] = a_strich[i] * i;
    

    Dann steht in a_strich die erste Ableitung.
    Nach dem nächsten aufruf steht da dann die 2. Ableitung.



  • .j



  • Falsche Stelle.
    Ich meinte mit a_strich[i] = a_strich[i] * i; die Zeile 16. Also in ableitung.

    Du musst in main dein Array a nach a_strich kopieren. So bei Zeile 76.
    (Jedes Element einzeln)*
    Danach rufst du ableitung auf.

    Nochwas:
    statt

    int *ptr1 = a;
      int *ptr2 = a_strich;
      ableitung(ptr1, ptr2, k, n);
    

    kannst du auch gleich

    ableitung(a, a_strich, k, n);
    

    schreiben.

    *Es geht auch mit memcpy, aber mach es erstmal einzeln.



  • Also das hier ist jetzt mein kompletter Quelltext:

    #include<stdio.h>
    #include<string.h>
    
    void ableitung(int* f, int* f_strich, int k, int n)
    {
      int i;
      int s;
    
      printf("P");
      s = 1;
      while(s <= k)
      {
        printf("'");
        s++;
      }
      printf("(x) = ");
      i = n;
      while(i >= 0)
      {
        f_strich[i] = f_strich[i] * i;
    
        if(f_strich[i] == 0)
        {
          printf("");
        }
        else if(i == 1)
        {
          printf("%d", f_strich[i]);
        }
        else if(i == 0)
        {
          printf("");
        }
        else
        {
          printf("%d*x^%d + ", f_strich[i], i-1);
        }
        i--;
      }
      printf("\n");
      if(k > 1)
      {
        ableitung(f, f_strich, k-1, n);
      }
      else
      {
        return;
      }
    }
    
    int main(void)
    {
      int n;
      int i;
      int f[11];
      int k;
      int f_strich[11]; 
    
      printf("Bitte den Grad n des einzulesenden Polynoms angeben (0 <= n <= 10): ");
      scanf("%d", &n); 
      i = 0;
      while(i <= n)
      {
        printf("Bitte den Koeffizienten a%d eingeben: ", i);
        scanf("%d", &f[i]); 
        i++;
      } 
      printf("P(x) = ");
      i = n;
      while(i >= 0)
      {
        if(f[i] == 0)
        {
          printf("");
        }
        else if(i == 1)
        {
          printf("%d*x + ", f[i]);
        } 
        else if(i == 0)
        {
          printf("%d", f[i]);
        }
        else
        {
          printf("%d*x^%d + ", f[i], i);
        }
        i--;
      }
      printf("\n");
      printf("Die wievielte Ableitung von P soll bestimmt werden?: ");
      scanf("%d", &k);
      int *ptr1 = f;
      int *ptr2 = f_strich;
      memcpy(f_strich, f, sizeof(f));
      ableitung(ptr1, ptr2, k, n);
    
      return 0;
    }
    

    Das hier ist die Ausgabe:

    Bitte den Grad n des einzulesenden Polynoms angeben (0 <= n <= 10): 5
    Bitte den Koeffizienten a0 eingeben: 3
    Bitte den Koeffizienten a1 eingeben: 2
    Bitte den Koeffizienten a2 eingeben: 0
    Bitte den Koeffizienten a3 eingeben: 0
    Bitte den Koeffizienten a4 eingeben: 4
    Bitte den Koeffizienten a5 eingeben: 5
    P(x) = 5*x^5 + 4*x^4 + 2*x + 3
    Die wievielte Ableitung von P soll bestimmt werden?: 2
    P''(x) = 25*x^4 + 16*x^3 + 2
    P'(x) = 125*x^4 + 64*x^3 + 2
    

    Aber das SOLLTE die Ausgabe sein:

    Bitte den Grad n des einzulesenden Polynoms angeben (0 <= n <= 10): 5
    Bitte den Koeffizienten a0 eingeben: 3
    Bitte den Koeffizienten a1 eingeben: 2
    Bitte den Koeffizienten a2 eingeben: 0
    Bitte den Koeffizienten a3 eingeben: 0
    Bitte den Koeffizienten a4 eingeben: 4
    Bitte den Koeffizienten a5 eingeben: 5
    P(x) = 5*x^5 + 4*x^4 + 2*x + 3
    Die wievielte Ableitung von P soll bestimmt werden?: 2
    P''(x) = 100*x^3 + 48*x^2
    

    Irgendwas läuft also noch schief. 😕



  • Hallo Juli, wie ist die Universität in Wuppertal denn so? 😛



  • Ich glaube nicht, dass es

    void ableitung(int* a, int* a_strich, int k, int n)
    

    sein soll, sondern

    void ableitung(int* a, int* a_strich, int k, int n)
    

    ohne dem int n.



  • Meinte natürlich

    void ableitung(int* a, int* a_strich, int k)
    

    xP



  • Nach der Ableitung ist der Grad des Polynoms kleiner und das absolute Glied fällt weg.*
    Da musst du dann deine Funktion etwas umstellen.
    Erst berechnen von 1 bis n

    f_strich[i-1] = f_strich[i] * i; // i = 1 ... n
    n = n-1; //  :warning:
    

    und dann ausgeben von n bis 0;
    Dabei solltest du dann nochmal die Zeile 36 ansehen, ob die so bleiben kann.

    Du kannst ja mal überlegen, warum das zwei Schritte sein müssen.

    *kam mir gestern schon etwas merkwürdig vor 🙄


Anmelden zum Antworten