Polynôme

Polynôme - C - Programmation

Marsh Posté le 09-01-2011 à 23:31:40    

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;
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "poly.h"
  4. int main()
  5. {
  6. Polynome polynome;
  7. char chaine[100];
  8. char* temp;
  9. int i, j, cas;
  10. printf("Saisissez votre pôlynome :\n" );
  11. scanf("%s",chaine);
  12. *temp = chaine[0];
  13. for (j=0; *temp!='\0'; j++)
  14. {
  15.     cas=0;
  16.     for (i=1; *temp!='+' && *temp!='\0'; i++)
  17.     {
  18.         if (*temp=='x')
  19.         {
  20.             *temp=chaine[i];
  21.             continue;
  22.         }
  23.         if (*temp=='/')
  24.         {
  25.             cas=cas+1;
  26.             *temp=chaine[i];
  27.             continue;
  28.         }
  29.         if (*temp=='^')
  30.         {
  31.             cas=cas+2;
  32.             *temp=chaine[i];
  33.             continue;
  34.         }
  35.         if (cas==0)
  36.             polynome.monome[j].num =atoi(*temp);
  37.         else if (cas==1)
  38.             polynome.monome[j].den =atoi(*temp);
  39.         else if (cas==2)
  40.             polynome.monome[j].degre =atoi(*temp);
  41.         *temp=chaine[i];
  42.     }
  43. }
  44. }


 
 
 
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.

Reply

Marsh Posté le 09-01-2011 à 23:31:40   

Reply

Marsh Posté le 10-01-2011 à 03:44:33    

atoi prend un char * en parametre.
*temp n'est pas un char * mais un char.
Donc: atoi attend l'adresse d'une chaine. Tu lui passe un char. Il prend ce char, le considère comme une adresse, et va pour lire la chaine à cette adresse. Mais comme c'était pas une vraie adresse, la zone mémoire n'est pas lisible (ie, même si toute mémoire est en principe lisible, c'est pas un endroit ou il est censé se trouver des données de ton programme, et ça active une protection), et le message de ton compilateur est cohérent.
 
A+,


Message édité par gilou le 10-01-2011 à 03:50:07

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed