Evaluation d'un polynôme

Résolu
Sharon71 Messages postés 20 Statut Membre -  
Sharon71 Messages postés 20 Statut Membre -
Bonjour,
Je dois construire un programme en langage C permettant l'évaluation du polynôme P = a0*x^0 + a1*x^1 + ... + an*x^n en utilisant l'appel à une fonction puissance. On doit utiliser un tableau à 20 entrées pour les valeurs de a.
Est-ce que quelqu'un pourrait s'il vous plaît me dire si ce que j'ai fais est juste ? Je débute en langage C et j'ai certainement dû faire des erreurs.
Merci beaucoup d'avance pour vos réponses

Voici le programme que j'ai fais :

#include <stdio.h>

/* déclaration de la fonction puissance */
float puissance(float y, int n)
{
float resultat ;
if ( n == 0 ) resultat = 1 ;
else resultat = y*puissance(y, n-1) ;
return resultat ;
}

main ()
{
int nt ;
int i ;
int j ;
float x ;
float p ;
int a[20] ;
printf("donnez le nombre de termes du polynôme et la valeur de x") ;
scanf("%i %f", &nt, &x) ;
printf("donnez la valeur de a") ;
for(i = 0 ; i < 20 ; i++ )
scanf("%i", &a[i]) ;
p = a[0] ;
for(j = 1 ; j < nt ; j++)
p = p + a[j]*puissance(x, j) ;
printf("Le polynôme vaut %f\n", p) ;
return 0 ;
}

11 réponses

  1. Sharon71 Messages postés 20 Statut Membre
     
    En fait, je pense qu'il y a un problème parce que le nombre de termes et le nombre de valeurs de a sont liés.
    Je vais donc faire un cas général :

    #include <stdio.h>

    /* déclaration de la fonction puissance */
    float puissance(float y, int n)
    {
    float resultat ;
    if ( n == 0 ) resultat = 1 ;
    else resultat = y*puissance(y, n-1) ;
    return resultat ;
    }

    main ()
    {
    int nt ;
    int i ;
    int j ;
    float x ;
    float p ;
    int a[ nt - 1 ] ;
    printf("donnez le nombre de termes du polynôme et la valeur de x") ;
    scanf("%i %f", &nt, &x) ;
    printf("donnez la valeur de a") ;
    for(i = 0 ; i < nt ; i++ )
    scanf("%i", &a[i]) ;
    p = a[0] ;
    for(j = 1 ; j < nt ; j++)
    p = p + a[j]*puissance(x, j) ;
    printf("Le polynôme vaut %f\n", p) ;
    return 0 ;
    }
    0
  2. [o.o]REplay Messages postés 381 Date d'inscription   Statut Membre 28
     
    Bonjour,

    La récurrence dans la fonction puissance est-ce vraiment nécessaire?
    Pour la fonction puissance j'aurai fait ça:

    float puissance(float y, int n)
    {
    float temp = y;
    int i;
    for(i = 1; i<n; i++)
    temp = y * temp;

    return temp
    }

    0
  3. Sharon71 Messages postés 20 Statut Membre
     
    C'est vrai que j'aurai aussi pu utiliser une boucle pour la fonction puissance.
    0
  4. Sharon71 Messages postés 20 Statut Membre
     
    Dans cet exercice, on nous demande d'utiliser int a[20] et on nous demande d'expliquer pourquoi le polynôme ne peut pas être d'ordre supérieur à 19.
    Je ne vois pas pourquoi, parce que pour moi le polynôme donnerait : P = a0*x^0 + a1*x^1 + ... + a20*x^20
    Est-ce que quelqu'un voit pourquoi le polynôme est d'ordre 19 au maximum ?
    Merci d'avance pour vos réponses.
    0
    1. [o.o]REplay Messages postés 381 Date d'inscription   Statut Membre 28
       
      Ton tableau a[20] fait 20 cases c'est bien ça?
      la première case est a[0]
      la deuxième case est a[2]
      donc la 20ème est??
      :)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sharon71 Messages postés 20 Statut Membre
     
    Merci. J'ai finalement compris. En fait, il n'y a pas de valeur pour a[20]. La dernière valeur est pour a[19].
    0
  7. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,

    int nt;
    int a[ nt - 1 ] ;

    nt n'est pas initialisé. Donc, problème pour la déclaration du tableau "a". Il vaut mieux utiliser int a[MAX] et #define MAX 20 en début de programme.

    Cdlt
    0
  8. Sharon71 Messages postés 20 Statut Membre
     
    Oui, merci beaucoup, je me suis rendue compte qu'il allait y avoir un problème et j'ai donc mis int a[100], pour être sûr que a soit défini.
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      On doit utiliser un tableau à 20 entrées pour les valeurs de a.
      Un tableau de 20 cases suffit largement ;-).
      #define MAX 20
      
      int main(void) {
          int a[MAX];
          ...
          return 0;
      }
      
      0
  9. Sharon71 Messages postés 20 Statut Membre
     
    C'est vrai, mais au cas où l'utilisateur aurait envie d'évaluer un énorme polynôme... ;-)
    Merci beaucoup.
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Dans ce cas-là, ça pourrait être un polynôme supérieur à 100 également ;-).
      0
  10. Sharon71 Messages postés 20 Statut Membre
     
    Tu as entièrement raison...
    Le mieux, ce serait que l'utilisateur rentre le nombre d'entrées du tableau qu'il veut. Est-ce que ça serait possible de demander à l'utilisateur de donner le nombre d'entrées du tableau avant de déclarer le tableau ?
    0
  11. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Oui, c'est possible :-). Il faut réaliser une allocation dynamique.
    Par exemple :
    int *a=NULL;
    int nb;
    scanf("%d",&nb); //attention au scanf sans précaution
    
    a=malloc(nb*sizeof *a); //on alloue dans le tas une place de nb int
    if( a!=NULL){ //on vérifie que l'allocation s'est bien déroulée
        //et là, tu peux faire comme-ci tu avais ton tableau : a[5]=2; etc.
    }
    
    free(a),a=NULL; //on libère la zone avant de quitter le programme.
    
    0
  12. Sharon71 Messages postés 20 Statut Membre
     
    Merci beaucoup pour toutes tes réponses.
    0