Polynomes
Résolu
scoutantho
Messages postés
50
Date d'inscription
Statut
Membre
Dernière intervention
-
jamesleblond -
jamesleblond -
Bonjour,
J'ai un problème : je vous donne mon .h, mon main.c et mon code.c de suite,
étant donné que c'est un projet pour des cours, je n'ai pas le droit de changer les prototypes. maintenant, l'histoire est que je ne peu pas changer les prototypes, c'est un problème de cours.
Mon problème se trouve dans mon code.c au niveau de la suite de mes monomes " saisie->suivant = saisie;" je ne sais pas quoi réellement mettre.
et je voudrais également savoir si ma façon de lire mon polynome est correct.
Merci de vos réponses.
dernière question, ma façon de détruire un polynome est elle la bonne ?
J'ai un problème : je vous donne mon .h, mon main.c et mon code.c de suite,
étant donné que c'est un projet pour des cours, je n'ai pas le droit de changer les prototypes. maintenant, l'histoire est que je ne peu pas changer les prototypes, c'est un problème de cours.
Mon problème se trouve dans mon code.c au niveau de la suite de mes monomes " saisie->suivant = saisie;" je ne sais pas quoi réellement mettre.
et je voudrais également savoir si ma façon de lire mon polynome est correct.
Merci de vos réponses.
//Polynome.h typedef struct monome { double coef; int degre; struct monome* suivant; //différence ? }monome; typedef struct polynome { monome* premier; }polynome; polynome InsereMonome(polynome P, double coef, int degree); //insere le monome "coef de degre" dans polynome P polynome SaisiePolynome(); //saisi d'un polynome au clavier void AffichagePolynome(polynome P); //affichega d'un polynome P void DetruitPolynome(polynome* p_P); //destruction d'un polynome
//code.c polynome InsereMonome(polynome Polynome, double coeff, int degree) { monome *nouvel = malloc(sizeof(monome)); nouvel->coef = coeff; nouvel->degre = degree; if (nouvel == NULL) { nouvel->suivant = NULL; } else { nouvel->suivant = Polynome.premier; // -> sur nouvel car c'est un pointeur . car Polynome est une structure } return Polynome; } //à modifier polynome SaisiePolynome() { monome *saisie = malloc(sizeof(monome)); int fin ; int i = 0; double A ; int B ; polynome Polynome; do { printf("saisir coefficient \n"); //saisie du coeff et du degrée scanf("%lf", (&A)); printf("saisir degree \n"); scanf("%d", (&B)); //scanf attend une adresse if (i == 0) { (saisie->coef) = A; (saisie->degre) = B; saisie->suivant = NULL; i++; } else { (saisie->coef) = A; (saisie->degre) = B; saisie->suivant = saisie; } printf("result : %lf \n", saisie->coef); printf("result : %d \n", B); printf("0 : continuer \n"); //continuer à ajouter des monomes printf("1 : quitter \n"); // ou non scanf("%d", &fin); if (fin != 0 & fin != 1) { printf("veuillez mettre 0 ou 1 \n"); printf("0 : continuer \n"); //continuer à ajouter des monomes printf("1 : quitter \n"); // ou non scanf("%d", &fin); } if (fin ==1) { Polynome.premier = saisie; return Polynome; } } while (fin != 1); getchar(); } //ajouter monome monome monome fin prendre dernier monome = premier polynome void AffichagePolynome(polynome P) { int i = 0; while (P.premier->suivant != NULL) { printf("%lf",P.premier->coef); printf("x^"); printf("%d", P.premier->degre); printf(" + "); getchar(); } } void DetruitPolynome(polynome p_P) { if ((p_P.premier->suivant != NULL) ) { free(p_P.premier->suivant); free(p_P.premier); } }
//main.c int main(int argc, char *argv[]) { polynome P=SaisiePolynome(); AffichagePolynome(P); getchar(); }
dernière question, ma façon de détruire un polynome est elle la bonne ?
A voir également:
- Structure polynome langage c
- Langage ascii - Guide
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Langage binaire - Guide
- Dans la table des matières du document à télécharger, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Structure d'un rapport de stage - Guide
1 réponse
Dans ta fonction saisiePolynome, l'indentation est un peu catastrophique...
De plus, il y a visiblement quelques erreurs.
Lignes 44-56: Oublie la variable i dont je n'ai pas du tout compris l'utilité. Je pense que le code qui irait pour remplacer ces lignes serait quelque chose comme :
Et à la fin de la boucle (APRÈS la condition de fin), ne pas oublier de faire :
Vu que on modifie la valeur du pointeur saisie, au début de la fonction (par exemple juste après la ligne 32) il faut faire
Et comme selon les boucles de la fonction AffichagePolynome, le champ suivant du dernier monome doit contenir NULL, sur la condition de fin ligne 80 il faut faire :
Les lignes 63-79, ça ne va pas : il faut plutôt faire une boucle, style:
Pourquoi faire un getchar() ligne 89 ?
Et dernière chose sur cette fonction : plutôt que de demander d'entrer le degré du monôme, tu peux simplement l'incrémenter à chaque tour de boucle et juste demander le coefficient.
Pour ta fonction AffichagePolynome, je te propose ceci :
Pour détruire les ponlynômes, ta fonction ne va pas. Il faut faire free sur tous le polynômes un par un en partant du dernier (désolé, je suis un peu fatigué pour te faire la fonction...).
Quant à ta fonction InserePolynome, vu qu'elle est commentée "à modifier", je te laisse le soin de le faire (il faut en effet la changer) :p
paly2
La curiosité est une excellente qualité !
De plus, il y a visiblement quelques erreurs.
Lignes 44-56: Oublie la variable i dont je n'ai pas du tout compris l'utilité. Je pense que le code qui irait pour remplacer ces lignes serait quelque chose comme :
saisie->coef = A; saisie->degre = B;
Et à la fin de la boucle (APRÈS la condition de fin), ne pas oublier de faire :
saisie->suivant = malloc(sizeof(monome)); saisie = saisie->suivant;(je crois que c'est ça que tu voulais mettre à la place de "saisie->suivant = saisie;")
Vu que on modifie la valeur du pointeur saisie, au début de la fonction (par exemple juste après la ligne 32) il faut faire
Polynome.premier = saisie;et donc ne PAS le faire ligne 82.
Et comme selon les boucles de la fonction AffichagePolynome, le champ suivant du dernier monome doit contenir NULL, sur la condition de fin ligne 80 il faut faire :
if (fin) { saisie->suivant = NULL; return Polynome; }
Les lignes 63-79, ça ne va pas : il faut plutôt faire une boucle, style:
do { printf("veuillez entrer 0 ou 1 \n"); printf("0 : continuer \n"); //continuer à ajouter des monomes printf("1 : quitter \n"); // ou non scanf("%d", &fin); } while (fin != 0 && fin != 1); // Note : l'opérateur de comparaison est && (& est un opérateur bit à bit, c'est pour ça qu'ici le programme fonctionnait quand même).
Pourquoi faire un getchar() ligne 89 ?
Et dernière chose sur cette fonction : plutôt que de demander d'entrer le degré du monôme, tu peux simplement l'incrémenter à chaque tour de boucle et juste demander le coefficient.
Pour ta fonction AffichagePolynome, je te propose ceci :
void AffichagePolynome(polynome P) { monome *Monome = P.premier; while (Monome != NULL) { printf("%lf", Monome->coef); printf("x^"); printf("%d", Monome->degre); printf("+"); Monome = Monome->suivant; } printf("\b\n"); // On supprime le dernier + et on ajoute un retour à la ligne. }
Pour détruire les ponlynômes, ta fonction ne va pas. Il faut faire free sur tous le polynômes un par un en partant du dernier (désolé, je suis un peu fatigué pour te faire la fonction...).
Quant à ta fonction InserePolynome, vu qu'elle est commentée "à modifier", je te laisse le soin de le faire (il faut en effet la changer) :p
paly2
La curiosité est une excellente qualité !
Pour allouer dynamiquement le tableau "monomes" de la structure polynome, il faut utiliser les fonctions malloc (ou calloc), realloc et free, que tu connais sans doute déjà (sinon une petite recherche sur ton moteur de recherche préféré te donnera des explications).
void DetruitPolynome(polynome* p_P);
cdt...