Operation de base (+,-,*,/) fonction en C comment faire ? [Résolu]

Signaler
Messages postés
14
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
2 décembre 2007
-
Messages postés
14
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
2 décembre 2007
-
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

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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...
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Salut,
Je ferais plutot scanf ("%c",&opt);  au lieu de scanf ("%s",&opt); 
%s = une chaine de charactère
%c = 1 charactère           

Shell
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
getchar au lieu de scanf("%c", ...)

C++ (@++)<!--
Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
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;
...

}
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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.
Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
   printf ("     Tapez nombre %d :",i);
          scanf ("%f",&nbr);
  
  printf ("\Opération(+,-,*,/,=):");

cest bien ce qu'il fait
Messages postés
14
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
2 décembre 2007

Merci pour tout vos réponses et à toi juju12.
bye