begin process at 2012 05 30 14:21:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Programme permetant de faire un calcul simple.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Programme permetant de faire un calcul simple.

jeudi 19 mars 2009 à 14:00:23 | Programme permetant de faire un calcul simple.

marthymbiz

Salut tout le monde,
J'ai créé un programme en C qui permet de faire un calcul simple.
Pour se faire, l'utilisateur doit saisir une chaine de caractères sous la forme "opérande1 opérateur opérande2",
une fonction suprEspaces supprimera les espaces, une fonction extractop fera l'extraction de l'opérateur, deux fonctions
extractx1 et extractx2 extrairont les deux opérandes enfin la fonction calcul effectuera l'opération :
voici mon code :
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void suprEspace(char *expr);
void extractop(char *expr,int *ind,char *op);
int extractx1(char *expr,int ind);
int extractx2(char *expr,int ind);
int calcul(int x1,int op,int x2);
void main()
{char expr[255];int ind;char op;int x1,x2,ans;
 printf("Donnez l'expression : ");
 gets(expr);
 suprEspace(expr);
 extractop(expr,&ind,&op);
 x1=extractx1(expr,ind);
 x2=extractx2(expr,ind);
 printf("\n%d\n",x1);
 printf("\n%d\n",x2);
 puts(expr);
 ans=calcul(x1,op,x2);
 printf("\n%s=%d",expr,ans);
 getch();
}

void suprEspace(char *expr)
{int i,j,n;
n=strlen(expr);
for (i=0;i<n;i++)
  if (expr[i]==' ')
                   {
                    for(j=i;j<(n);j++)
                     expr[j]=expr[j+1];
                   }
}

void extractop(char *expr,int *ind,char *op)
{int n,i;
n=strlen(expr);
for (i=0;i<n;i++)
  if ((expr[i]=='+')||(expr[i]=='-')||(expr[i]=='*')||(expr[i]=='/'))
  {*ind=i;
  *op=expr[i];}
  }

int extractx1(char *expr,int ind)
{int i,x;char iks[100];
 for (i=0;i<ind;i++)
    iks[i]=expr[i] ;

x=atoi(iks);
return x;
}
int extractx2(char *expr,int ind)
{int i=0,y;char igrg[100];
 while (expr[i]!='\0')
 {
    igrg[i]=expr[ind+i] ;
    i++; }

y=atoi(igrg);

return y;
}
int calcul(int x1,int op,int x2)
{
 switch(op)
 {
  case '+':
       return (x1+x2);
  case '-':
       return (x1-x2);
  case '*':
       return (x1*x2);

}
return(x1%x2);
}

Borland arrive  a compiler le code mais le programme plante lorsque j'essaie d'effectuer une division et je pense que c'est dû au type de retour lors d'une division.
aussi j'aimerais créer une fonction qui permet de vérifier si l'expression saisie est valide ou pas alors svp faites moi part de vos idées.
MERCI d'avance
jeudi 19 mars 2009 à 14:21:13 | Re : Programme permetant de faire un calcul simple.

Pistol_Pete

Salut
Pourquoi dans ta fonction calcule la division n'a pas le droit à son "case" dans le switch?
et return(x1%x2);  donne le reste de la division euclidienne, et non pas la division. Il faut utiliser /.
Mais il faut toujours avant une division vérifier que l'on ne divise pas par 0...
A+

____________________________________________________________________________
Mon site internet :
  
[ Lien ]

jeudi 19 mars 2009 à 14:37:33 | Re : Programme permetant de faire un calcul simple.

marthymbiz

Re,
J'ai fait sortir la division de la structure conditionnelle case parce que si je la remet dans le case le compilateur m'affiche un warning qui est "Function should return a value" et puis quand je l'exécute et que j'effectue une division une fenêtre s'affiche m'indiquant "Thread stopped".
jeudi 19 mars 2009 à 15:01:48 | Re : Programme permetant de faire un calcul simple.

Pistol_Pete

Réponse acceptée !
Dans ta fonction int extractx2(char *expr,int ind)
il faut mettre:
igrg[i]=expr[ind+i+1] ;
Si tu ne mets pas le +1, le premier caractère est l'opérateur. Ca ne gène pas pour atoi() pour le  + et le - mais pour le \, ça ne passe pas.
A+

____________________________________________________________________________
Mon site internet :
  
[ Lien ]

jeudi 19 mars 2009 à 15:02:09 | Re : Programme permetant de faire un calcul simple.

bzrd

A mon humble avis, le plus simple c'est ce qui suit
Attention : pas de test ou presque donc il faut peut-être vérifier avant la syntaxe de la chaîne passée (interdire qu'il y ait des doubles opérateurs comme dans "1 +* 2", et vérifier qu'on a bien 2 nombres).

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
   char expr[255];
   char   *ptr;
   int op1, op2, res;
   char operation;

   printf("Donnez l'expression : ");
   gets(expr);
   ptr = strtok(expr, "+-/*%");
   if (ptr != NULL)
      operation = *ptr;
   else
   {
      printf("Il faut un opérateur parmi +,-,/,* et %\n");
      return;
   }
   op1 = atoi(expr);    // premier opérateur
   op2 = atoi(ptr+1);   // second opérateur
   switch(operation)
   {
   case '+':
      res = op1 + op2;
      break;
   case '-':
      res = op1 - op2;
      break;
   case '*':
      res = op1 * op2;
      break;
   case '/':
      if (!op2)
      {
         printf("Le diviseur ne doit pas être nul\n");
         return;
      }
      res = op1 / op2;
      break;
   case '%':
      if (!op2)
      {
         printf("Le diviseur ne doit pas être nul\n");
         return;
      }
      res = op1 % op2;
      break;
   }
   printf("%d %c %d = %d", op1, operation, op2, res);
}

Cordialement
jeudi 19 mars 2009 à 15:42:32 | Re : Programme permetant de faire un calcul simple.

marthymbiz

Merci Pistol_pete, grâce a cette petite modification le programme fonctionne et effectue les opérations correctement.
mais je voudrais aussi pouvoir effectuer les division qui ont un résultat de type réel.
quant a ton code bzrd apres avoir mis un getch() a la fin quand j'entre une opératon ("1+2") ça m'affiche (1 1 0 = 1).
jeudi 19 mars 2009 à 15:49:29 | Re : Programme permetant de faire un calcul simple.

Pistol_Pete

Pour les reels il faut faire un cast;
int x1=5,x2=2;
double Res = x1/(double) x2;
printf("%f,\n",Res);    //Affiche 2.5


A+

____________________________________________________________________________
Mon site internet :
  
[ Lien ]

jeudi 19 mars 2009 à 16:02:45 | Re : Programme permetant de faire un calcul simple.

bzrd

Désolé, erreur au début du code :

void

main()
{
   char expr[255];
   char *ptr;
   int op1, op2, res;
   int   len;                              // changer là
   char operation;

   printf(
"Donnez l'expression : ");
   gets(expr);

   len = strspn(expr,
"1234567890 \t");   // changer là
   ptr = expr + len;                      // et là
...
// le reste est identique
jeudi 19 mars 2009 à 16:11:32 | Re : Programme permetant de faire un calcul simple.

marthymbiz

je n'arrive pas a intégrer le cast dans ma fonction calcul. 
jeudi 19 mars 2009 à 16:19:57 | Re : Programme permetant de faire un calcul simple.

Pistol_Pete

Le plus simple est de faire tous tes calcules avec des double...

____________________________________________________________________________
Mon site internet :
  
[ Lien ]


1 2

Cette discussion est classée dans : int, char, x1, ind, expr


Répondre à ce message

Sujets en rapport avec ce message

Dans le genre prenant........ [ par Xs ] oui !c 'est trés chiant !j'explique mon pb : j'ai un code source, fais par moi-meme, et dedans, je veux que l'on saisisse des renseignement comme le l int to char ! [ par nullspace ] Voila mon problème !J'ai une résultat sous forme de variable INT, et je veux que ce résultat soit affecté à une variable de type CHAR.Genre, si j'ai 6 tableau char [ par dingue007 ] Voila je dois faire un prog en C++ : un tableau avec les mois de lannée et quand je tape un chiffre il me sort le mois ! mais je narrive pas a faire l conversion de char en int [ par magicoz ] Bonjour,Est-ce qu'il y aurait quelqu'un qui pourrait me dire comment convertir un caractère en un entier ? Un prog assez simple à réaliser, car les sc lire dans un fichier [ par skeul ] Bonjour,je rencontre qqs difficultés a faire une fonction qui lit un fichier et qui rentre la chaine de caractere dans un tableauy a comme un probleme jai un probleme avec ma source!!!!! jai vérifeir et je ne trouve rien...pouvez vous m'aider.... [ par retaks666 ] alors jai veut faire un programme ki génére une suite de caractere d'un nombre donné...et sa marche po... je vous done ma source si vous pouvez m'aide convertir un int en char ou en string [ par mimyne ] Bonjour je voudrai savoir comment on peut faire en c++ pour convertir un int en char ou bien en string la fonction itoa ne marche pas merci vecteur avec int et char [ par Tyroflan ] int **boursemain(){...cin >> nombre;for (unsigned int i=0;i bourse[i] = new int [5];donc je crée autant de vecteurs bourse que l'indique la variable vecteur avec int et char [ par Tyroflan ] int **boursemain(){...cin >> nombre;for (unsigned int i=0;i bourse[i] = new int [5];donc je crée autant de vecteurs bourse que l'indique la variable problème de pointeur sur char (SUPER HYPER IMPORTANT -> juste pour moi...je supose) [ par levraipig ] bonjour à tous, voila moi j'ai un p'ti problème plutot embêtant.... je dois créer un class qui gère les chaines de caractères (ne me demander pas pou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,508 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales