Operation de base (+,-,*,/) fonction en C comment faire ?

Résolu
telecomakram Messages postés 14 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 2 décembre 2007 - 31 oct. 2007 à 16:43
telecomakram Messages postés 14 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 2 décembre 2007 - 1 nov. 2007 à 17:01
Bonjour;
je cherche à écrire une fonction en C qui permet de faire des opérations de base soient : multiplication, division, addition et soustraction. L'utilisation des parenthèses n'est pas possible.

• Les opérandes et opérateurs sont demandés les uns à la suite des autres, • Le résultat est calculé au fur et à mesure

, ----
• Seul le résultat final est affiché

, ----
• On doit alors alterner la saisie d'un opérande, puis d'un opérateur, puis d'un opérande, puis d'un opérateur, etc.
• L'affichage du résultat est effectué après la saisie de l'opérateur "="

, ----
Exemple: 1¬+¬2¬*¬4¬=@ Resultat = 12

, ----
(¬ représente un espace, @ un retour charriot)

mon probleme c que il faut ecrire cette fonction sans utilisation des tableaux ou des pointeur je sais pas comme faire

j'ai écrit cette fonction mais s'a marche pas .
*------------------------------*
void base (void)

{
  char opt;
  float nbr,res;
  int i;
  res=0;
  i=1;

  while(opt!='=')
               {
       printf ("     Tapez nombre %d :",i);
          scanf ("%f",&nbr);
  
  printf ("\Opération(+,-,*,/,=):");
  scanf ("%s",&opt);            
  i++;
               
  if(opt=='+')
res=res+nbr;  

  if(opt=='-')
  res=res-nbr;

  if(opt=='*')
   res=res*nbr;

  if(opt=='/')
    res=res/nbr;

         }
         printf("Résultat=%.2f\n",res);
         }
  
*----------------------------------------------------*

Si qlq'un à une autre méthode je le remerci infinement
merci++++++++++++++++++

7 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
1 nov. 2007 à 16:57
T'as lu ce que j'ai écrit ?
D'abord prendre une valeur initiale HORS de la boucle
puis ensuite la séquence opérateur-opérande.

Parce que pour l'instant avec son exemple 1¬+¬2¬*¬4¬=@ Resultat = 12 on obtient:
res=0;
entrée 1,+
res=res+1=1;
entrée 2,*
res=res*2=2;
entrée 4,=
res=2;
et voilà c'est loupé.

tandis que dans le sens que j'ai mentionné :
entrée init. 1
res=1;
entrée +,2
res=res+2=3
entrée *,4
res=res*4=12
entrée = donc jump sortie

et le résultat attendu...
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
31 oct. 2007 à 17:35
Salut,
Je ferais plutot scanf ("%c",&opt);  au lieu de scanf ("%s",&opt); 
%s = une chaine de charactère
%c = 1 charactère           

Shell
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 oct. 2007 à 18:33
getchar au lieu de scanf("%c", ...)

C++ (@++)<!--
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
31 oct. 2007 à 22:27
pense a verifier quil ne divise pas par zero sinon le programme va planté

si tu dois utilisés plein de if et faire else if serais trop gros utilise un switch

switch(cCarEntre)
{
    case '+':
....
break;
...

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
1 nov. 2007 à 09:45
tu fais les opérations dans le mauvais sens :
demande d'abord une valeur initiale puis dans ta boucle prends à chaque fois d'abord l'opérateur, ensuite l'opérande.
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
1 nov. 2007 à 10:18
   printf ("     Tapez nombre %d :",i);
          scanf ("%f",&nbr);
  
  printf ("\Opération(+,-,*,/,=):");

cest bien ce qu'il fait
0
telecomakram Messages postés 14 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 2 décembre 2007
1 nov. 2007 à 17:01
Merci pour tout vos réponses et à toi juju12.
bye
0
Rejoignez-nous