Aide programme C : étude d'un Polynome

Fermé
Royalsound - 28 mai 2008 à 09:16
 vg - 4 juin 2008 à 23:59
Bonjour,

Mon problème est le suivant, j'ai un projet d'informatique pour mon IUT à rendre très bientôt, je dois réaliser une bibliothèque de fonctions permettant l'étude complète d'un polynôme, c'est à dire l'obtention de ses racines, de son signe et de ses variations. J'ai commencé le programme en ajoutant toutes les fonction dont j'aurais besoin, mais ensuite, au vue de mes capacités en programmation, si une personne pourrait m'aider sur la suite du programme...Merci d'avance

Voila le début que j'ai effectué :

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

typedef unsigned int uint;

struct Polynome
{
uint Degre;
double *Coefficients;
};

// Fonctions donnees
double Pow(double x, uint p);
struct Polynome *Allocate(unsigned int degre);
void Delete(struct Polynome *p);
void Display(struct Polynome *p);
struct Polynome *Multiply(struct Polynome *p1, struct Polynome *p2);

// Fonctions a completer
struct Polynome *Prompt(void);
struct Polynome *Load(char *filename);
void Save(struct Polynome *p, char *filename);
double Eval(struct Polynome *p, double x);
uint Roots(struct Polynome *p, double x1, double x2, double *out);
struct Polynome *Derivate(struct Polynome *p);
void Sign(struct Polynome *p, double x1, double x2);
void Variation(struct Polynome *p, double x1, double x2);

double Pow(double x, uint p)
{
uint i;
double out = 1.;

for(i=0;i<p;i++)
{
out *= x;
}

return out;
}

struct Polynome *Allocate(unsigned int degre)
{
struct Polynome *out;

out = (struct Polynome *) malloc(sizeof(struct Polynome));
out->Degre = degre;
out->Coefficients = (double *) malloc((degre + 1) * sizeof(double));

return out;
}

void Delete(struct Polynome *p)
{
if(p)
{
free(p->Coefficients);
free(p);
}
}

void Display(struct Polynome *p)
{
uint i;

printf("%lf", p->Coefficients[0]);

for(i=1;i<=p->Degre;i++)
{
if(p->Coefficients[i] < 0.)
{
printf(" - %lf x", -p->Coefficients[i]);
}
else
{
printf(" + %lf x", p->Coefficients[i]);
}

if(i > 1)
{
printf("^%d", i);
}
}
}

struct Polynome *Multiply(struct Polynome *p1, struct Polynome *p2)
{
struct Polynome *out;
uint i, j;

out = Allocate(p1->Degre + p2->Degre);

for(i=0;i<=out->Degre;i++)
{
out->Coefficients[i] = 0.;
}

for(i=0;i<=p1->Degre;i++)
{
for(j=0;j<=p2->Degre;j++)
{
out->Coefficients[i+j] += p1->Coefficients[i] * p2->Coefficients[j];
}
}

return out;
}

struct Polynome *Prompt(void)
{
struct Polynome *out;

// A COMPLETER

return out;
}

struct Polynome *Load(char *filename)
{
struct Polynome *out;

// A COMPLETER

return out;
}

void Save(struct Polynome *p, char *filename)
{
// A COMPLETERS
}

double Eval(struct Polynome *p, double x)
{
double out;

// A COMPLETER

return out;
}

uint Roots(struct Polynome *p, double x1, double x2, double *out)
{
uint n;

// A COMPLETER

return n;
}

struct Polynome *Derivate(struct Polynome *p)
{
struct Polynome *out;

// A COMPLETER

return out;
}

void Sign(struct Polynome *p, double x1, double x2)
{
// A COMPLETER
}

void Variation(struct Polynome *p, double x1, double x2)
{
// A COMPLETER
}

int main(int argc, char **argv)
{
// A COMPLETER

return 0;
}

2 réponses

j'ai oublier de préciser à quoi sert chaque fonction :

Fonction "prompt" :

permettant l'allocation dynamique d'un polynome dont le degré et les coefficients seront demandés à l'utilisateur.

Fonction "Load" :

Fonction permettant l'allocation dynamique d'un polynome dont l'adresse sera retournée et dont le degré et les coefficients seron successivement lus dans un fichier binaire dont le nom "filename" est passé en paramètre.

Fonction "Save" :

Fonction permettant la sauvegarde d'un polynome d'adresse p (passé en paramètre) dans un fichier binaire (sauvegarde successive du degré et des coefficients) dont le nom "filename" est également passé en paramètre.

Fonction "Eval" :

Fonction permettant d'évaluer le polynom d'adresse p (passée en paramètre) en X (également passé en paramètre). On pourra notamment se servir de la fonction : "double Pow(double x, uint p);" qui prend comme paramètre le réel X et l'entier p et retourne x^p.

Fonction "Roots" :

Fonction permettant de calculer les racines du polynome d'adresse p(passé en paramètre) dans l'intervalle [x1, x2],(où x1 et x2 sont également passés en paramètre). Les racines seront stockées dans le tableau dont l'adresse "out" est également passée en paramètre et dont l'allocation statique aura été faite ailleurs que dans cette fontion. Cette Fonction retournera le nombre de racines effectivement trouvées dans l'intervalle [x1, x2].

Fonction "Derivate" :

Fonction allouant dynamiquement un polynôme égal à la dérivée du polynome dont l'adresse pest passée en paramètre. l'adresse du polynome dérivé sera retournée.

Fonction "Sign" :

Fonction affichant le signe du polynome d'adresse p (passé en paramètre) dans l'intervalle [x1, x2] (où x1 et x2 sont également passés en paramètre). Un calcul préalable des racines devra bien entendu être effectué pour pouvoir identifier les différents intervalles où le polynome est amené à changer de signe. L'affichage se fera sous la forme

quelques exemple de borne d'intervalles :

Signe du polynome sur [0. , 1.] : +
Signe du polynome sur [1. , 5.] : -
signe du polynome sur [5. , 9. ] : +
...

Fonction "Variation" :

Fonction affichant les variations du polynome d'adresse p dans l'intervalle [x1, x2]. Un calcul préalable de la dérivée et du signe de la dérivée devront bien entendu être effectués pour pouvoir indentifié les différents intervalles où le polynome est amené à changer de variation. l'affichage se fera sous le forme par exemple :

Signe du polynome sur [0. , 1.] : croissante
Signe du polynome sur [1. , 5.] : decroissante
signe du polynome sur [5. , 9. ] : croissante
...

Fonction principale "main" :

Elle devra :

- déclarer un polynome P1 d'adresse p1 égal à P1 = 2 + 3x - 2x^2
- déclarer un polynome P2 d'adresse p2 égal à P2 = -9 + 3x et demandé a l'utilisateur.
- déclarer un polynome P3 d'adresse p3 chargé depuis un fichier "monfichier.dat"
- afficher P3.
- déclarer un polynome P4 égal au produit de P1 et P2
- afficher le polynome P4 d'adresse p4 égal au produit de P1 et P2
- afficher le polynome P4
- afficher les racines de P1
- afficher le signe de P4 sur [-5 , 5]
- afficher les variations de P4 sur [-5 , 5]



Merci.
2
mich62120 Messages postés 631 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 janvier 2010 6
28 mai 2008 à 10:10
Slt!
Eh ben!
Bon courage! Ca va pas être facile!
0
M. Erwan Sanson vous aurez 0/20 à votre TP AAU info

Jean-Claude N.
2
v
0