polynome en c
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

polynome en c



  1. #1
    invite75c2964e

    polynome en c


    ------

    Bonjour a tous,

    j'ai un problème avec mon programme en c, la fonction qui calcul la dérivée d'un polynôme ne me donne pas le résultat attendu, voila le code

    bibliotheque.h
    Code:
    struct poly{
    
    int n;
    float *c;
    };
    typedef struct poly poly;
    
    void affichage(poly p);
    float valeur(poly p, float x);
    poly creer(poly p, int n);
    poly saisir(poly p);
    poly derive(poly p);
    poly somme(poly p, poly q);
    poly produit(poly p, poly q);

    bibliotheque.c

    Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include "bibliotheque.h"
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    void affichage(poly p)
    {   int i;
        for(i=p.n;i>=0;i--)
           printf("%3.2f x^%d +",p.c[i],i);
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    float valeur(poly p, float x){
     int i;
        float y=0;
        for(i=p.n;i>=0;i--)
           y+=(pow(x,i)*p.c[i]);
     
    return y;
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly creer(poly p, int n){
    
    p.n=n;
           p.c=(float*)malloc((p.n+1)*sizeof(float));
           return p;
    
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly saisir(poly p){
    
    int i;
           for(i=p.n;i>=0;i--)
           {   printf("\nSaisir a%d coeff de degre %d\n",i,i);
               scanf("%f",&p.c[i]);
               printf("P[%d] = %3.2f\n",i,p.c[i]);
           }
           return p;
    
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly derive(poly p){
    int i;
           poly q;
           q.n=p.n-1;
           q=creer(q,q.n);
           for(i=p.n;i>=0;i--)         
           {  q.c[i]=p.c[i]*i;
           }
           return q;
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly somme(poly p, poly q){
    int i;
           poly r;
           if(p.n>=q.n)
           {  r.n=p.n;
              r=creer(r,r.n);
              printf("\nLe degre de p=%d >= au degre de q=%d\n",p.n,q.n);
              for(i=0;i<=q.n;i++)
                 r.c[i]=p.c[i]+q.c[i];
              for(i=q.n+1;i<=p.n;i++)
                 r.c[i]=p.c[i];
           }
           else
           {  r.n=q.n;
              r=creer(r,r.n);
              printf("\nLe degre de p=%d < au degre de q=%d\n",p.n,q.n);
              for(i=0;i<=p.n;i++)
                 r.c[i]=p.c[i]+q.c[i];
              for(i=p.n;i<=q.n;i--)
                 r.c[i]=q.c[i];
              r.n=q.n;
           }
           return f;
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly produit(poly p, poly q){
    
    int i,j,k;
           poly r;
           r.n=p.n+q.n;
           r=creer(r,r.n);
           for(i=0;i<=r.n;i++)
              r.c[i]=0;
           for(j=0;j<=p.n;j++)
              for(k=0;k<=q.n;k++)
                 r.c[j+k]+=p.c[j]*q.c[k];
           return r;
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    polynome.c
    Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include "bibliotheque.h"
    
    
    
    
    void main(){
    
    poly p,q,s,r;
    int n;
    
    
    
      printf("\nDonnez le degre du polynome :\n");
        scanf("%d",&n);
        p=creer(p,n);
        p=saisir(p);
        affichage(p);
        printf("\nLe polynome derive est :\n");
        p=derive(p);
        affichage(p);
       
        q=creer(q,n);
        q=saisir(q);
        affichage(q);
        printf("\nLa somme donne :\n");
        s=somme(p,q);
        affichage(s);
    
        printf("\nLe produit donne :\n");
        r=produit(p,q);
        affichage(r);
    
        printf("\nSaisir une valeur de x :\n");
        scanf("%f",&x);
        printf("La valeur du polynome en x=%3.2f est P(x)=%3.2f\n",x,valeur(p,x));
    
    }
    cordialement

    -----
    Dernière modification par Jack ; 28/09/2018 à 13h39. Motif: Problème balise code

  2. #2
    Jack
    Modérateur

    Re : polynome en c

    Il faudrait déjà publier un code qui compile:
    -
    Code:
    return f;
    f n'est pas déclarée dans la fonction somme
    -
    Code:
     scanf("%f",&x);
    x n'est pas déclarée dans la fonction main

    Ensuite quel est le type d'erreur que tu récupères à l'exécution?

  3. #3
    Jack
    Modérateur

    Re : polynome en c

    J'ajouterais également que la fonction creer est bancale: pourquoi passer un polynome p par valeur dans les paramètres? Et c'est d'autant plus problématique que ce polynome p n'a pas encore été défini au moment de l'appel.

  4. #4
    invite75c2964e

    Re : polynome en c

    bibliotheque.c
    Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include "bibliotheque.h"
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    void affichage(poly p)
    {   int i;
        for(i=p.n;i>=0;i--)
           printf("%3.2f x^%d +",p.c[i],i);
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    float valeur(poly p, float x){
     int i;
        float y=0;
        for(i=p.n;i>=0;i--)
           y+=(pow(x,i)*p.c[i]);
     
    return y;
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly creer(poly p, int n){
    
    p.n=n;
           p.c=(float*)malloc((p.n+1)*sizeof(float));
           return p;
    
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly saisir(poly p){
    
    int i;
           for(i=p.n;i>=0;i--)
           {   printf("\nSaisir a%d coeff de degre %d\n",i,i);
               scanf("%f",&p.c[i]);
               printf("P[%d] = %3.2f\n",i,p.c[i]);
           }
           return p;
    
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly derive(poly p){
    int i;
           poly q;
           q.n=p.n-1;
           q=creer(q,q.n);
           for(i=p.n;i>=0;i--)         
           {  q.c[i]=p.c[i]*i;
           }
           return q;
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly somme(poly p, poly q){
    int i;
           poly r;
           if(p.n>=q.n)
           {  r.n=p.n;
              r=creer(r,r.n);
              printf("\nLe degre de p=%d >= au degre de q=%d\n",p.n,q.n);
              for(i=0;i<=q.n;i++)
                 r.c[i]=p.c[i]+q.c[i];
              for(i=q.n+1;i<=p.n;i++)
                 r.c[i]=p.c[i];
           }
           else
           {  r.n=q.n;
              r=creer(r,r.n);
              printf("\nLe degre de p=%d < au degre de q=%d\n",p.n,q.n);
              for(i=0;i<=p.n;i++)
                 r.c[i]=p.c[i]+q.c[i];
              for(i=p.n;i<=q.n;i--)
                 r.c[i]=q.c[i];
              r.n=q.n;
           }
           return r;
    }
    /*--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------*/
    poly produit(poly p, poly q){
    
    int i,j,k;
           poly r;
           r.n=p.n+q.n;
           r=creer(r,r.n);
           for(i=0;i<=r.n;i++)
              r.c[i]=0;
           for(j=0;j<=p.n;j++)
              for(k=0;k<=q.n;k++)
                 r.c[j+k]+=p.c[j]*q.c[k];
           return r;
    }

    polynome.c
    Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include "bibliotheque.h"
    
    
    
    
    void main(){
    
    poly p,q,s,r;
    int n;
    float x;
    
    
      printf("\nDonnez le degre du polynome :\n");
        scanf("%d",&n);
        p=creer(p,n);
        p=saisir(p);
        affichage(p);
        printf("\nLe polynome derive est :\n");
        p=derive(p);
        affichage(p);
       
        q=creer(q,n);
        q=saisir(q);
        affichage(q);
        printf("\nLa somme donne :\n");
        s=somme(p,q);
        affichage(s);
    
        printf("\nLe produit donne :\n");
        r=produit(p,q);
        affichage(r);
    
        printf("\nSaisir une valeur de x :\n");
        scanf("%f",&x);
        printf("La valeur du polynome en x=%3.2f est P(x)=%3.2f\n",x,valeur(p,x));
    
    }
    mon probleme est par exemple quand je déclare 2x^2+2x le programme renvoi la dérivée suivante 2x+2 au lieu de 4x+2
    Dernière modification par Jack ; 28/09/2018 à 15h06. Motif: nouvelle modification de la balise code

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : polynome en c

    Lorsque tu places des balises code autour de ton code, il ne faut pas mettre de / devant la première.

  7. #6
    Jack
    Modérateur

    Re : polynome en c

    Pour le reste, tu n'as pas répondu à ma question dans le message #3: je ne vois pas à quoi sert le passage du polunôme.

    Et enfin, la boucle dans la fonction derive me semble suspecte:
    Code:
    for(i=p.n;i>=0;i--)
    ca voudrait dire que le polynome dérivé aurait le même degré que l'original.

    Et pour terminer, les degrés des coefficients du polynôme dérivé doivent être décalés d'une unité par rapport à ceux du polynôme d'origine:
    Code:
    	for (i = p.n; i > 0; i--)
    	{
    		q.c[i-1] = p.c[i] * i;
    	}

Discussions similaires

  1. Polynome or not Polynome (complexe)
    Par invitedcbaa082 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 31/10/2013, 17h26
  2. polynome
    Par invite371ae0af dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 23/11/2012, 20h54
  3. Aide, polynome non constants de C[X] divisibles par leur polynome dérivé.
    Par invite7378164e dans le forum Mathématiques du supérieur
    Réponses: 16
    Dernier message: 05/11/2012, 21h22
  4. Automatique. Passage d'un polynôme en p à un polynôme en Z
    Par invite1bf94880 dans le forum Physique
    Réponses: 1
    Dernier message: 14/03/2008, 12h03
  5. polynome, m paramètre , différentes valeurs degré du polynome
    Par invited7a80298 dans le forum Mathématiques du collège et du lycée
    Réponses: 8
    Dernier message: 15/10/2007, 18h54