Calculatrice en Win32 Console Application

erohem -  
 lahin -
Bonjour,

Je suis débutant en C++, et je dois réaliser une calculatrice (sans utiliser de boites de dialogue, donc sans classes MFC, donc en Win32 Cosole Application) en C++.
C'est à dire que le flux d'entrée doit être de cette forme: "12+34-9=" (toute l'opération sur la même ligne, sinon bien trop facile, evidemment! grrrr!)
La lecture du flux d'entrée s'arrete lorsque l'utilisateur tape "=" (commande getline(cin,var,'=') je pense...).

Mais j'ai un gros problème, je ne vois pas comment établir mon algorithme... Pour l'instant j'utilise un type string, et je cherche dans la chaine de caractères "+" et "-', et à ce moment la, les caractères placés avant doivent être des nombres -> donc à placer dans une variable.

Tout cela me parait vraiment compliqué, je ne m'en sors pas :(. Il faut apparemment utiliser les "vectors"... Qu'est-ce que c'est?

Merci de votre aide, et si quelqu'un a un bout de code à me donner, ça serait vraiment sympa. :)
Configuration: Windows XP
Firefox 2.0.0.9

5 réponses

  1. erohem
     
    je pense avoir trouvé un algo. je vous donnerai le code si ça intéresse certains, et si je trouve ;)
    0
  2. tarek_dotzero Messages postés 834 Statut Membre 122
     
    Slt,
    S'il n'y a pas de multiplication de de division: tout est simple:
    fait la lecture lettre à lettre: s'il s'agit d'un chiffre ajoute le au dernier nombre.
    Sinon: effetue l'operation enregistrée, et sauvegarde le resultat, sauvegarde l'opération à effectuer la prochaine fois.
    repete cela jusqu'à l'entree de '=' : tu effectue l'opération enregistrée et tu sort de la boucle.
    0
  3. erohem
     
    tarek_dotzero, merci, mais je crois que c'est assez difficile ce que tu me dis, ou trop simple en fait...
    0
  4. erohem
     
    s'il vous plait, aidez-moi... je n'y arrive vraiment pas :(

    voila mon code pour l'instant, et c'est pas glorieux...

    #include<string>
    #include<iostream>
    #include<vector>
    #include<math.h>

    using namespace std;

    int main(void)
    {

    string entry;
    vector<int>opera;
    opera.clear();

    cout<<"write the operation"<<endl;
    getline(cin,entry,'=');

    for(int i=0;i<=entry.size()-1;i++)
    {
    //cout<<entry.at(i);
    opera.push_back(entry.at(i));

    }

    for(int j=0;j<entry.size();j++)
    {
    if(opera.at(j)==49)
    {
    opera.at(j)=1;
    }
    else if(opera.at(j)==50)
    {
    opera.at(j)=2;
    }
    else if(opera.at(j)==51)
    {
    opera.at(j)=3;
    }
    else if(opera.at(j)==52)
    {
    opera.at(j)=4;
    }
    else if(opera.at(j)==53)
    {
    opera.at(j)=5;
    }
    else if(opera.at(j)==54)
    {
    opera.at(j)=6;
    }
    else if(opera.at(j)==55)
    {
    opera.at(j)=7;
    }
    else if(opera.at(j)==56)
    {
    opera.at(j)=8;
    }
    else if(opera.at(j)==57)
    {
    opera.at(j)=9;
    }
    else if(opera.at(j)==48)
    {
    opera.at(j)=0;
    }
    cout<<opera.at(j);
    //+ -> code ascii 43
    //- -> code ascii 45
    }
    cout<<endl;
    int var=0;

    for(int t=0;t<opera.size();t++)
    {
    /*if(opera.at(t)!=43 && opera.at(t)!=45)
    {
    cout<<opera.at(t);

    }*/
    do
    {
    var=(var+opera.at(t)*10);
    t++;
    }while(opera.at(t)!=43);
    }
    cout<<"var: "<<var;

    return 0;
    }
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. erohem
     
    J'ai enfin réussi

    voila le code, pour ceux que ça intéresse.

    Merci quand même à tous!

    //weekly 9
    //this program implement a small calculator that can add and subtract real values
    //we use the vectors, and obviously the strings
    #include<string>
    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    int main(void)
    {
    
    	string entry;
    	vector<int>opera;
    	vector<int>opera2;
    	int var=0;
    	int var2=0;
    	//opera.clear();
    
    	cout<<"write the operation"<<endl;
    	getline(cin,entry,'=');
    
    	for(int i=0;i<=entry.size()-1;i++)
    	{
    		opera.push_back(entry.at(i));
    		opera.at(i)=opera.at(i)-48;
    		
    		if(entry.at(i)!='+' && entry.at(i)!='-' && i!=0)
    		{
    			var=(opera.at(i-1))*10;
    			var2=opera.at(i);
    			opera.at(i)=var+var2;
    		}
    		else
    		{
    			if(entry.at(i)=='+' || entry.at(i)=='-')
    			{
    				opera2.push_back(opera.at(i-1));
    				opera2.push_back(opera.at(i));
    				opera.at(i)=0;
    			}
    		}
    
    	}
    
    	for(int t=1;t<opera2.size()-2;t++)
    	{
    		if(opera2.at(t)==-5)
    			opera.at(0)=opera2.at(t-1)+opera2.at(t+1);
    		if(opera2.at(t)==-3)
    			opera.at(0)=opera2.at(t-1)-opera2.at(t+1);
    
    		opera2.at(t)=opera.at(0);
    	}
    	cout<<"result: "<<opera.at(0)<<endl;
    
    
    	return 0;
    }
    0
    1. lahin
       
      slt
      pour moi j'aimerai bien avoir le code en MFC
      car je doi le faire en MFC
      0