By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,305 Members | 1,614 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,305 IT Pros & Developers. It's quick & easy.

Help with Equation evaluation program

P: 14
hy i'm a noobie too i tried to make a calculator that imputs an ecuation
it is a consol program. i hope it can help you :)
ex: 3+5*564-342^33/22-(34343-(((34^4+2)-2-6))+4)=
the part of the cod i have finds any mitakes and puts the ecuation in a txt file.
( it is interactiv for ex: you type 3+* it tels you that you entered 2 operatos and it asks you if you want to continue with the ec. if you give " Y" it deletes the last operator and it continue to input from 3+)




here is the code


Expand|Select|Wrap|Line Numbers
  1. // david 2.cpp : Defines the entry point for the console application.
  2. //
  3. #include <iostream.h>
  4. #include <conio.h>
  5. #include "math.h"
  6. #include "stdafx.h"
  7. #include "david 2.h"
  8. #include <fstream>
  9.  
  10.  
  11.  
  12. #ifdef _DEBUG
  13. #define new DEBUG_NEW
  14. #endif
  15.  
  16.  
  17. // The one and only application object
  18.  
  19. CWinApp theApp;
  20.  
  21. using namespace std;
  22.  
  23. char expresie[1000];
  24.  
  25.  int lungime_expresie;
  26.  int contin=1;
  27.  int putere_repetata=0;
  28.  int impartire_repetata=0;
  29.  ofstream expresie_1("expresie_1");
  30.  
  31. int intrare_gresita(int tip_eroare,char read_var_func)
  32. {
  33.  int lungime_mesaj,retur;
  34.  retur=6;
  35.  
  36.  switch(tip_eroare)
  37.  {case 0:{cout<<" ecuatia nu poate incepe cu "<<read_var_func<<" continuati? Y/N ";
  38.           lungime_mesaj=47;//cout<< lungime_mesaj;
  39.           break;
  40.          }
  41.   case 1:{cout<<" nu pot aparea 2 semne consecutiv "<<"' "<<read_var_func<<read_var_func<<" '  continuati? Y/N ";
  42.           lungime_mesaj=58;
  43.           break;
  44.          } 
  45.   case 2:{cout<<" dupa '(' nu poate aparea ' "<<read_var_func<<" ' continuati? Y/N ";
  46.           lungime_mesaj=48;
  47.           break;
  48.          }
  49.   case 3:{cout<<" exprimare ambigua. folositi parantezele continuti? Y/N ";
  50.           lungime_mesaj=56;
  51.           break;
  52.          }
  53.   case 4:{cout<<" nu ati inchis toate parantezele continuati? Y/N ";
  54.           lungime_mesaj=49;
  55.           break;
  56.          }
  57.   case 5:{cout<<" "<<read_var_func<<" nu e recunoscut ca numar sau ca operatie continuati? Y/N ";
  58.           lungime_mesaj=60;
  59.           break;
  60.          }
  61.   case 6:{cout<<" ' ( ) ' nu se efectueaza nici o operatie  continuati? Y/N ";
  62.           lungime_mesaj=59;
  63.           break;
  64.          }
  65.   case 7:{cout<<"dupa o operatie nu poate urma ')' continuati? Y/N ";
  66.           lungime_mesaj=50;
  67.           break;
  68.          }
  69.   case 8:{cout<<"nu exista nici o paranteza dechisa corespunzatoare continuati? Y/N ";
  70.          lungime_mesaj=67;
  71.          break;
  72.          }
  73.  }
  74.  //cout<<"\b\b\b\b";
  75.  char ch;
  76.  while(1){
  77.   ch = tolower(_gettch());
  78.   switch(ch)
  79.   {case 'y':{for(int u=lungime_mesaj;u>0;u--)
  80.              {cout<<"\b";}
  81.              for(int u=lungime_mesaj;u>0;u--)
  82.              {cout<<" ";}
  83.              for(int u=lungime_mesaj;u>0;u--)
  84.              {cout<<"\b";}
  85.              retur=1;
  86.              break;
  87.              }
  88.  
  89.    case 'n':{retur=0;
  90.              break;
  91.             }
  92.  
  93.    default:{1;}
  94.   }
  95.   if(retur!=6){return retur; break;}
  96.  
  97.  }
  98. }
  99.  
  100.  
  101. int test_erori(char read_var_te,int nr_paranteze,int putere_repetata) 
  102. {int eroare_break=1;
  103. if(!(strchr("0123456789+-*/^=()",read_var_te))  )
  104.   {if(!(read_var_te=(char)8))
  105.   {eroare_break=0;contin= intrare_gresita(5,read_var_te);//cout<<" eroare 5";  ///PRIMUL IF VERIFICA DACA CARACTERUL 
  106.   }     
  107.   }
  108. if( (lungime_expresie==1) && (!(strchr("0123456789(",read_var_te)))) ///DACA ESTE PRIMUL CARACTER SI NU E CIFRA SAU 
  109.   {eroare_break=0;contin = intrare_gresita(0,read_var_te);//cout<<"eroare 0";
  110. }
  111.  
  112.  
  113. if (lungime_expresie!=1)
  114.  
  115.   {////////////////////////////
  116.  
  117. if( (strchr("+-*/^",read_var_te)) && (strchr("+-*/^",expresie[lungime_expresie-1])) )
  118.   {eroare_break=0;contin= intrare_gresita(1,read_var_te);/*cout<<" eroare 1";*/}
  119. if( (expresie[lungime_expresie-1]=='(')&&(read_var_te==')') )
  120.   {eroare_break=0;contin=intrare_gresita(6,read_var_te);/*cout<<" eroare 6";*/}
  121. if( (expresie[lungime_expresie-1]=='(') && (strchr("*/^",read_var_te)) )
  122.   {eroare_break=0;contin=intrare_gresita(2,read_var_te);/*cout<<" eroare 2";*/}
  123.   if ( (read_var_te=='=') && (nr_paranteze!=0) )
  124.   {eroare_break=0;contin=(intrare_gresita(4,read_var_te));/*cout<<" eroare 4";*/}
  125.   if( (read_var_te=='^') && (putere_repetata==1) )
  126.   {eroare_break=0;contin=intrare_gresita(3,read_var_te);/*cout<<" eroare 3";*/}
  127.   if( (strchr("+-*/^",expresie[lungime_expresie-1]))&&(read_var_te==')') )
  128.    {eroare_break=0;contin=intrare_gresita(7,read_var_te);/*cout<<" eroare 7";*/}
  129.   if( (nr_paranteze==0)&& (read_var_te==')'))
  130.   {eroare_break=0;contin=intrare_gresita(8,read_var_te);/*cout<<" eroare 8";*/}
  131.   if( (read_var_te=='/')&& (impartire_repetata==1))
  132.   {eroare_break=0;contin=intrare_gresita(3,read_var_te);/*cout<<" eroare 3";*/}
  133. }
  134. return eroare_break;
  135. }
  136.  
  137.  
  138. int citire_puteri(char read_var)
  139. {   //cout<<"  ggg "<<read_var<<" dss "<<putere_repetata<<" cc ";
  140.     if( (read_var=='^') && (putere_repetata==0) )
  141.     {putere_repetata=1;
  142.     expresie[lungime_expresie]='^'; expresie_1<<'^';
  143.     lungime_expresie++;cout<<"^";
  144.     return 1;
  145.     }
  146.     if( (!strchr("0123456789",read_var)) && (putere_repetata==1) )
  147.     {putere_repetata=0;return 0;
  148.     }
  149.     return 0;
  150. }
  151.  
  152.  
  153. int citire_impartire(char read_var)
  154. {   //cout<<"  ggg "<<read_var<<" dss "<<putere_repetata<<" cc ";
  155.     if( (read_var=='/') && (impartire_repetata==0) )
  156.     {impartire_repetata=1;
  157.     expresie[lungime_expresie]='/';    expresie_1<<'/';
  158.     lungime_expresie++;cout<<"/";
  159.     return 1;
  160.     }
  161.     if( (!strchr("0123456789",read_var)) && (impartire_repetata==1) )
  162.     {impartire_repetata=0;return 0;
  163.     }
  164.     return 0;
  165. }
  166.  
  167.  
  168. int read_function(void)
  169. { expresie[0]='(';lungime_expresie=1;  expresie_1<<(char)38<<" (";
  170.  //int eroare_break=1;
  171.  int nr_paranteze=0;
  172.  int retur=1; 
  173.  //int putere_repetata=0;
  174.  char read_var; 
  175.  
  176. while(2)    
  177.  {//cout<<"   "<<putere_repetata<<"   ";
  178.   read_var=_gettch(); //CITESTE CARACTERUL INTRAODUS ////FARA ECOU
  179.  
  180.  if(test_erori(read_var,nr_paranteze,putere_repetata))
  181.  {
  182.   if( !citire_puteri(read_var))
  183.   {
  184.   if( !citire_impartire(read_var))
  185.   {
  186.  
  187.    if(read_var=='='){expresie[lungime_expresie]=')';expresie_1<<")="<<endl;expresie[lungime_expresie+1]='=';lungime_expresie+=2;cout<<"=";return 1;break;}
  188.    else{  
  189.        if(read_var==(char)8){cout<<"\b \b";lungime_expresie--;}
  190.        else{
  191.      expresie[lungime_expresie]=read_var;
  192.            expresie_1<<read_var;
  193.      if(read_var=='('){nr_paranteze++;}
  194.      if(read_var==')'){nr_paranteze--;}
  195.      cout<<expresie[lungime_expresie];
  196.      lungime_expresie++;
  197.        }}
  198.   }}}
  199.  else { if(!contin) {break;}}
  200. }return 1;
  201. }
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  211. {
  212.     int nRetCode = 0;
  213.  
  214.     // initialize MFC and print and error on failure
  215.     if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
  216.     {
  217.         // TODO: change error code to suit your needs
  218.         _tprintf(_T("Fatal Error: MFC initialization failed\n"));
  219.         nRetCode = 1;
  220.     }
  221.     else
  222.     {int b;
  223.         cout<<"hg \n";
  224.        read_function();
  225.        cout<<"\n a iesit din functie";
  226.        for(int i=0;i<=lungime_expresie;i++)
  227.            cout<<expresie[i];
  228.  
  229.       //expresie_1<<;
  230.       expresie_1.close();
  231.        cin>>b;
  232.         // TODO: code your application's behavior here.
  233.     }
  234.  
  235.     return nRetCode;
  236. }
  237.  
Oct 1 '06 #1
Share this Question
Share on Google+
1 Reply


Banfa
Expert Mod 5K+
P: 8,916
Please don't hijack other peoples threads, if you have a new question start a new thread.

In your post you have stated what the problem is.
Oct 1 '06 #2

Post your reply

Sign in to post your reply or Sign up for a free account.