1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Mitglieder
  3. Ramrod

Beiträge von Ramrod

  • Probleme bei der Umsetzung eines weiteren C-Programms

    • Ramrod
    • 18. Dezember 2017 um 02:14

    Hallo liebe Gemeinde!

    Ich habe nun verscuht ein weiteres C Programm zu schreiben. Dabei sollen die Ableitungen von Polynomen nten Grades (wobei n <= 10) gebildet werden. Das Ganze soll über einen rekursiven Funktionsaufruf geschehen. Das Programm lässt sich ebenfalls kompilieren und ist lauffähig, allerdings versemmelt es mir die Ausgabe der Ableitung. Ich finde den Fehler leider nicht und weiß auch ehrlich gesagt nicht an werlchem Schräubchen ich drehen könnte, so dass es mir die richtige Ausgabe erzeugt. Falls jemand gnädigerweise etwas Zeit über hat und einen Blick drauf werfen könnte, wäre ich sehr dankbar :-)...

    Hier der Quellcode:

    Code
    #include <stdio.h>
    
    
    void ableitung(int a[11], int a_strich[11], int k)
    {
      for(int i = 11; i >= 0; i--)      // Feld durchlaufen und Bildung der Ableitungskoeff.
      {
        a_strich[i - 1] = a[i] * i;
      }
    
    
      if(k > 0)  
      {
        ableitung(a_strich, a, k - 1);      // rekursiver Aufruf -> Bildung der erneuten Abl. der Abl.
      }
    }
    
    
    int main (void)
    {
      int n;        // Variablen deklarieren
      int max_koeff;
      int new_koeff;
    
      int a[11];        // benoetigte Felder initialisieren
      int a_strich[11];
    
      // Werte der Felder auf 0 setzen
    
      for(int i = 0; i <= 11; i++)
      {
        a[i] = 0;
      }
    
      for(int i = 0; i <= 11; i++)
      {
        a_strich[i] = 0;
      }
    
      printf("Bitte den Grad n des einzulesenden Polynoms angeben (0 <= n <= 10).\n");
      scanf("%d", &n);
    
      for(int i = 0; i <= n; i++)       // einlesen der Koeffizienten
      {
        printf("Bitte den Koeffizienten a%d eingeben: \n", i);
        scanf("%d", &a[i]);
      }
    
      printf("P(x) =");
    
      for(int i = n; i >= 0; i--)       // Erzeugen der Ausgabe der eingelesenen Gesamtfunktion
      {
        if(a[i] != 0)
        {
          if(i > 1)
          {
            printf(" %d*x^%d +", a[i],i);
          }
          else if(i == 1)
          {
            printf(" %d*x +", a[1]);
          }
          else
          {
            printf(" %d\n", a[0]);
          }
        }
      }
    
      printf("Die wievielte Ableitung von P soll bestimmt werden?\n");
      scanf("%d", &max_koeff);
    
      new_koeff = max_koeff;        // Hilfsvariable
    
      ableitung(a, a_strich, new_koeff);        // Aufruf der Ableitungsfkt.
    
      printf("P");
    
      for(int i = 1; i <= max_koeff; i++)       // Notation des Ableitungsgrades
      {
          printf("’");
      }
    
      printf("(x) = ");
    
      for(int i = n; i >= 0; i--)       // Erzeugen der Ausgabe der abgeleiteten Funktion
      {
        if(a_strich[i] != 0)
        {
          if(i > 1)
          {
            printf(" %d*x^%d +", a_strich[i],i);
          }
          else if(i == 1)
          {
            printf(" %d*x +", a_strich[1]);
          }
          else
          {
            printf(" %d\n", a_strich[0]);
          }
        }
      }
    
      printf("\n");
    
      return 0;
    }
    Alles anzeigen
  • Probleme bei der Umsetzung eines C-Programms

    • Ramrod
    • 16. Dezember 2017 um 18:24

    Vielen Dank für die schnelle Antwort. Ach stimmt, die Bib ganz vergessen einzubinden, oh man :o. Und i ist ja wirklich nur innerhalb der Schleife initialisiert.
    Hab`s jetzt mal abgeändert. Lässt sich schon mal kompilieren, bin mir allerdings noch unsicher ob es auch die gewollten bzw. richtigen Ausgaben erzeugt :confused:..

    C
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    
    
    enum { N = 100 }; // zeigt nur weitere Eigenschaft von Enum -> konst. Wert
    
    
    double norm1(int n, double* v)
    {   
        double v1 = 0;
    
        for(int i = 0; i < n; i++)
        {
          v1 += fabs(v[i]); 
        }
    
        return v1;
    }
    
    
    double norm2(int n, double* v)
    {
        double v2 = 0;
    
        for(int i = 0; i < n; i++)
        {
          v2 += pow(v[i], 2);
        }
    
        return sqrt(v2);
    }
    
    
    double normInf(int n, double* v)
    {
        double vmax = v[0];
    
        for(int i = 0; i < n; i++)
        {
          if(fabs(v[i]) > vmax)
        vmax = v[i];
        }
    
        return vmax;
    }
    
    
    
    
    int main(void)
    {
        double v[N];
    
    
        // Initialisiere v mit Zufallszahlen
    
    
        srand(time(NULL));
    
        for(int i = 0; i < N; i++)
        {
            v[i] = (double)rand() / RAND_MAX;
        }
    
        printf("Summennorm: %lf\n", norm1(N, v));
        printf("Euklidische Norm: %lf\n", norm2(N, v));
        printf("Maximusnorm: %lf\n", normInf(N, v));
    
    
        return 0;
    }
    Alles anzeigen
  • Probleme bei der Umsetzung eines C-Programms

    • Ramrod
    • 16. Dezember 2017 um 16:02

    Hallo liebe Gemeinde!

    Ich komme hier einfach nicht weiter und wollte die Profis hier um Hilfe bitten, bevor ich endgültig verzweifel.

    Ich will ein C Programm schreiben, dass mittels 3 Funktionen Vektornormen (Summennorm, Eukl. Norm und Max. Norm) berechnet.
    Eine Main soll die 3 Funktionen dann einfach nur testen, also die Funktionen aufrufen und zwar für Vektoren der Länge 100 - initialisiert mit Zufallszahlen aus [0; 1).

    So, die 3 Funktionen habe ich hinbekommen, plus ein Großteil der Main. Aber irgendwie läuft es nicht ganz rund bzw. lässt sich nicht kompilieren. Probleme gibt es beim Aufrufen der Funktionen und der Compiler meckert über die RAND Funktion und den RAND_MAX Ausdruck. Komme einfach nicht weiter. Bin auch gerade erst ganz ganz frisch in die Themen Pointer und Felder eingestiegen, von daher bitte ich um Nachsicht :shiner:...

    Hier mal der Quellcode:

    C
    #include <stdio.h>
    #include <math.h>
    #include <time.h>
    
    
    enum { N = 100 }; // zeigt nur weitere Eigenschaft von Enum -> konst. Wert
    
    
    double norm1(int n, double* v)
    {   
        double v1 = 0;
    
        for(int i = 0; i < n; i++)
        {
          v1 += fabs(v[i]); 
        }
    
        return v1;
    }
    
    
    double norm2(int n, double* v)
    {
        double v2 = 0;
    
        for(int i = 0; i < n; i++)
        {
          v2 += pow(v[i], 2);
        }
    
          v2 = sqrt(v2);
    
        return v2;
    }
    
    
    double normInf(int n, double* v)
    {
        double vmax = v[0];
    
        for(int i = 0; i < n; i++)
        {
          if(fabs(v[i]) > vmax)
        vmax = v[i];
        }
    
        return vmax;
    }
    
    
    
    
    int main(void)
    {
        double v[N];
    
    
        // Initialisiere v mit Zufallszahlen
    
    
    //     srand(time(NULL));
        srand(time(NULL));
    
    //     v[N] = rand() % 2;
    
        for(int i = 0; i < N; i++)
        {
            v[i] = (double)rand() / RAND_MAX;
    
            printf("%lf", v[i]);
        }
    
        printf("Vektornorm 1: %lf\n", norm1(N, &v[i]));
        printf("Vektornorm 2: %lf\n", norm2(N, &v[i]));
        printf("Vektornorm Inf: %lf\n", normInf(N, &v[i]));
    
    
        return 0;
    }
    Alles anzeigen

Rechtliches

Impressum

Datenschutzerklärung