TXT arithmetic calculator

Source: Internet
Author: User
Tags gcd greatest common divisor

Basic idea : Use the Getline function to read the infix expression from TXT file sequentially, convert it to the suffix expression and calculate the result, and compare with the user result.

The processing of integers, fractions, and decimals: treats decimals and integers as a fraction of the default denominator of 1. Establishes a fractional class that converts integers and decimals to fractions when infix is converted to suffixes.

classfenshu{Private:        intFZ; intFM;  Public:        intGetfz () {returnFZ; }        intGetfm () {returnFM; }        voidSETFZ (intFZ) {FZ=FZ; }        voidSETFM (intFM) {        if(fm!=0) FM=FM; Elsecout<<"the denominator cannot be 0\n"; } Fenshu () {FZ=-1; FM=-1; } Fenshu (intAintb) {FZ=A; if(b!=0) FM=b; Elsecout<<"the denominator cannot be 0\n"; }         intgcdintAintb//Beg Greatest common divisor        {            if(b = =0)                returnA; returnGCD (b, a%b); }                  voidYuefen () {//Numerator             intGcd=1; GCD=gcd (FZ,FM); //cout<< "GCD:" <<Gcd<<endl;fz=fz/GCD; FM=fm/GCD; //cout<< "Results:"; show ();//Test} Fenshuoperator+(Fenshu F) {returnFenshu (fz*f.fm+f.fz*fm,fm*f.fm); } Fenshuoperator-(Fenshu F) {returnFenshu (fz*f.fm-f.fz*fm,fm*f.fm); } Fenshuoperator*(Fenshu F) {returnFenshu (fz*f.fz,fm*f.fm); } Fenshuoperator/(Fenshu F) {returnFenshu (fz*f.fm,fm*F.FZ); }         voidShow () {cout<<fz<<"/"<<fm<<Endl; }};

The method of dividing the greatest common divisor is already written in the previous blog post. For later code writing convenience, the use of overloading.

infix conversion to suffix processing: use stacks as data structures.

Template <classElemtype>classmystack{ Public:    Const Static  intMAXSIZE = -;    Elemtype Data[maxsize]; intTop//stack top foot mark Public:    voidInit ();//Initialize Stack    BOOLEmpty ();//determine if the stack is emptyElemtype GetTop ();//read stack top element (not out)    voidPush (Elemtype x);//into the stackElemtype pop ();//out of the stack};

Problems encountered:

1. The fractional class definition is the numerator and the denominator as the int type variable, the decimal number which appears in the question cannot calculate;

Analysis: To convert a decimal number into an integer that can be deposited into fractions, each one after the decimal point, the numerator denominator is multiplied by 10,

//converts a numeric string into a corresponding numberFenshu Read_number (CharStr[],int*i) {Fenshu x (0,1); intK =0;  while(Str[*i] >='0'&& str[*i]<='9')//working with integer parts{X.SETFZ (X.GETFZ ()*Ten+ (str[*i]-'0') ); (*i) + +; }    if(str[*i]=='.')//working with decimal parts    {        (*i) + +;  while(Str[*i] >='0'&&str[*i] <='9') {X.SETFZ (X.GETFZ ()*Ten+ (str[*i]-'0')); X.SETFM (X.GETFM ()*Ten); (*i) + +; K++; }    }    returnx;}

2. For the existence of the negative sign '-' The topic tip stack is empty;

Analysis: The minus sign and the minus sign descriptor as '-', causing the minus sign and minus sign to perform the same operation (the number of two top-of-stack operations) causes the operand error operation in the infix suffix;

Workaround: Find the '-' that is used as the minus sign and replace it with another symbol to write the suffix expression. When calculating a suffix expression, use the number after the symbol as the 0 indentation stack

//correction of the negative sign of the occasion             if(pre[i]=='-')//Negative sign use occasions            {                if(pre[i-1]<'0'|| pre[i-1]>'9'|| pre[i-1]=='('|| i==0) {post[j++]='_'; I++; Continue; }            }

TXT arithmetic calculator

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.