Polynôme

pyn Messages postés 7 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Je suis totalement bloquer sur un programme de manipulation de polynome (à coef dans Q)
exemple : -4/5 + 3x^9 +7/2x^15-x^18
Plutôt que bloquer on peut plutôt dire que je n'arrive pas à démarrer, vu que je bloque sur la saisie du polynome.

Le problème vient de la méthode qui est imposé :
le polynome doit être un tableau de monome de la forme
typedef mon {
int degre, num, den;
}Monome;

typedef struct poly {
Monome monome[MAX];
int nbmo;
} Polynome;

#include <stdio.h>
#include <stdlib.h>
#include "poly.h"

int main()
{
Polynome polynome;
char chaine[100];
char* temp;
int i, j, cas;

printf("Saisissez votre pôlynome :\n");
scanf("%s",chaine);
*temp = chaine[0];
for (j=0; *temp!='\0'; j++)
{
    cas=0;
    for (i=1; *temp!='+' && *temp!='\0'; i++)
    {
        if (*temp=='x')
        {
            *temp=chaine[i];
            continue;
        }
        if (*temp=='/')
        {
            cas=cas+1;
            *temp=chaine[i];
            continue;
        }
        if (*temp=='^')
        {
            cas=cas+2;
            *temp=chaine[i];
            continue;
        }
        if (cas==0)
            polynome.monome[j].num =atoi(*temp);
        else if (cas==1)
            polynome.monome[j].den =atoi(*temp);
        else if (cas==2)
            polynome.monome[j].degre =atoi(*temp);
        *temp=chaine[i];
    }
}


}


Mais il reste plusieurs problèmes :
Après avoir tapé un polynome j'ai une erreur comme quoi la mémoire ne peut être en état "read"
Cette erreur disparait en enlevant atoi mais je me retrouve avec un char, pas très pratique pour calculer dérivé, primitive....par la suite.

Ensuite si l'on tape 44x^5 par exemple le deuxième 4 va écraser le premier dans le num, je ne vois pas comment corriger sa.
Idem si l'on rentre 5x^4-7x^5, il va y avoir un problème avec le "-".

Merci d'avance pour votre aide.

1 réponse

KX Messages postés 19031 Statut Modérateur 3 020
 
Pour t'aider complètement, il nous faudrait le code de poly.h

Néanmoins j'émet des réserves sur ton utilisation de temp, j'ai l'impression que ce n'est qu'un char mais tu t'en sers en le déclarant char* et en te promenant avec l'*...

Essaye tout simplement :

char temp;

temp = chaine[0];
for (j=0; temp!='\0'; j++)
//...

Remarque : cela soulève un autre problème avec l'utilisation de atoi(temp);

De plus tu utilises : if (temp==...) else if (temp==...)
Pourquoi ne pas utiliser plutôt un switch(temp) ?
De même pour tes if(cas==) successifs
0