Evaluation d'un polynôme

Résolu
Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
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 ;
}
A voir également:

11 réponses

Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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
[o.o]REplay Messages postés 357 Date d'inscription   Statut Membre Dernière intervention   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
Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
C'est vrai que j'aurai aussi pu utiliser une boucle pour la fonction puissance.
0
Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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
[o.o]REplay Messages postés 357 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
C'est vrai, mais au cas où l'utilisateur aurait envie d'évaluer un énorme polynôme... ;-)
Merci beaucoup.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
Dans ce cas-là, ça pourrait être un polynôme supérieur à 100 également ;-).
0
Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
Sharon71 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup pour toutes tes réponses.
0