Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Code chuyển biểu thức trung tố thành kết quả

  1. #1
    Ngày gia nhập
    05 2011
    Bài viết
    61

    Mặc định Code chuyển biểu thức trung tố thành kết quả

    C++ Code:
    1. /*
    2.     Chuyen bieu thuc trung to sang ket qua
    3.     Khi nhap bieu thuc trung to phai viet lien ko co khoang cach
    4. */
    5.  
    6. #include <iostream.h>
    7. #include <conio.h>
    8. #include <stdlib.h>
    9. #include <stdio.h>
    10. #include <math.h>
    11. const int n = 100;
    12.  
    13. //------------------------------------------------------------------------------
    14. //--  chuyen hau to thanh Ket qua
    15. //------------------------------------------------------------------------------
    16.  
    17. void Push(float *S,int &T, float X)
    18. {
    19.     if(T==n)
    20.         cout<<"\n   Stack da day";
    21.     else
    22.     {
    23.         T++;
    24.         S[T]=X;
    25.     }
    26. }
    27. void Pop(float *S, int &T, float &X)
    28. {
    29.     if(T==0)
    30.         cout<<"\n   Stack da can";
    31.     else
    32.     {
    33.         X = S[T];
    34.         T--;
    35.     }
    36. }
    37. float TinhToan(float a, float b, char bt)
    38. {
    39.     switch(bt)
    40.     {
    41.         case '+':
    42.             return a+b;
    43.         case '-':
    44.             return a-b;
    45.         case '*':
    46.             return a*b;
    47.         case '/':
    48.             if(b == 0)
    49.             {
    50.                 cout<<"\n   Loi phep chia!";
    51.                 getch();
    52.                 exit(0);
    53.             }
    54.             return a/b;
    55.         case '^':
    56.             return pow(a,b);
    57.        
    58.     }
    59. }
    60. int KiemTraHauTo(char bt)
    61. {
    62.     if(bt=='+' || bt=='-'|| bt=='*' || bt=='/' || bt=='^')
    63.         return 0;
    64.     else
    65.         return 1;
    66. }
    67. float Chuyen(char *xau)
    68. {
    69.     char xauso[50];
    70.     float S[n],a,b,kq,so;
    71.     int i=-1,j,T=0;
    72.     do
    73.     {
    74.         for(i++,j=0;  xau[i]!='\0' && xau[i]!=' ';i++,j++)
    75.             xauso[j]=xau[i];
    76.         if(KiemTraHauTo(xau[i-1])) // la toan hang
    77.         {
    78.             xauso[j] = NULL;
    79.             so=atof(xauso);
    80.             Push(S,T,so);
    81.         }
    82.         else // la toan tu
    83.         {
    84.             Pop(S,T,b);
    85.             Pop(S,T,a);
    86.             kq = TinhToan(a,b,xau[i-1]);
    87.             Push(S,T,kq);  
    88.         }
    89.     }
    90.     while(xau[i]!=NULL);
    91.     Pop(S,T,kq);
    92.     return kq;
    93.    
    94. } // -------   End chuyen hau to thanh ket qua    ------//
    95.  
    96. //------------------------------------------------------------------------------
    97. // --     Chuyen trung to sang hau to
    98. //------------------------------------------------------------------------------
    99. int KiemTra(char c)
    100. {
    101.     if(0 <= (c -'0') && (c -'0') <= 9 || c == '.' )
    102.         return 0;  
    103.     else if(c =='+' || c == '-' || c == '*' || c == '/' || c == '^')
    104.         return 1;
    105.     else if(c == '(')
    106.         return 2;
    107.     else if(c == ')')
    108.         return 3;
    109.     else
    110.         return 4;
    111. }
    112. int KiemTraUuTien(char c)
    113. {
    114.     if(c == '*' || c == '/' || c == '^')
    115.         return 2;
    116.     else if(c == '+' || c == '-')
    117.         return 1;
    118.     else if(c == '(' || c == ')')
    119.         return 0;
    120. }
    121. void Push(char *S, int &T,char X)
    122. {
    123.     if(T == n)
    124.         cout<<"\n   Stack da day !";
    125.     else
    126.     {
    127.         T++;
    128.         S[T] = X;
    129.     }
    130. }
    131. void Pop(char *S,int &T,char &X)
    132. {
    133.     if(T==0)
    134.     {
    135.         cout<<"\n   Stack da can";
    136.     }
    137.     else
    138.     {
    139.         X=S[T];
    140.         T--;
    141.     }
    142. }
    143. void ChuyenTTo(char *s)
    144. {
    145.     char S[100],xau[200];
    146.     char a;
    147.     int T=0,i,j=0,kt,danhdau;  
    148.     i=-1;
    149.     do
    150.     {
    151.         danhdau = 0;
    152.         for(i++,danhdau=0;KiemTra(s[i])== 0 && s[i]!=NULL;i++)  // La toan hang
    153.         {
    154.             danhdau = 1;
    155.             xau[j] = s[i];
    156.             j++;           
    157.         }
    158.         if(danhdau==1)
    159.         {
    160.             xau[j] = ' ';
    161.             j++;
    162.         }
    163.         if(KiemTra(s[i]) == 1) // La toan tu
    164.         {
    165.             if(T==0)                // - neu Stack rong
    166.                 Push(S,T,s[i]);    
    167.             else                    // - ko rong
    168.             {
    169.                 if(KiemTraUuTien(s[i]) > KiemTraUuTien(S[T]))
    170.                 {
    171.                     Push(S,T,s[i]);
    172.                 }      
    173.                 else               
    174.                 {
    175.                     do
    176.                     {
    177.                         Pop(S,T,a);
    178.                         if(a != '(' && a!= ')')
    179.                         {
    180.                             xau[j] = a;
    181.                             j++;
    182.                             xau[j]=' ';
    183.                             j++;
    184.                         }
    185.                     }while(KiemTraUuTien(s[i]) <= KiemTraUuTien(a) && T >0);
    186.                     Push(S,T,s[i]);
    187.                 }
    188.             }
    189.         }
    190.         else if(KiemTra(s[i]) == 2)  // s[i] la dau (
    191.             Push(S,T,s[i]);
    192.         else if(KiemTra(s[i]) == 3)  // s[i] la dau )
    193.         {
    194.             Pop(S,T,a);
    195.             while(a!='(')  
    196.             {
    197.                 xau[j]=a;
    198.                 j++;
    199.                 xau[j]=' ';
    200.                 j++;
    201.                 Pop(S,T,a);
    202.             }
    203.         }
    204.         else if(KiemTra(s[i]) == 4 && s[i] != '\0')// Loi bieu thuc
    205.         {
    206.             cout<<"\n   Loi bieu thuc !";
    207.             getch();
    208.             exit(0);   
    209.         }  
    210.        
    211.     }while(s[i]!='\0');
    212.    
    213.     while(T > 0)
    214.     {
    215.         Pop(S,T,a);
    216.         xau[j]=a;
    217.         j++;
    218.         xau[j]=' ';
    219.         j++;
    220.     }
    221.     xau[j-1]=NULL;
    222.     cout<<"\n   Chuyen sang hau to : "<<xau;
    223.     cout<<"\n   Kq = "<<Chuyen(xau);
    224. }  // ------------- End  chuyen trung to sang hau to ---------------------------
    225.  
    226. int main()
    227. {
    228.     char xau[100];
    229.     cout<<"\n   Nhap bieu thuc : ";
    230.     fflush(stdin);
    231.     gets(xau);
    232.     ChuyenTTo(xau);
    233.     getch();
    234.    
    235. }

  2. #2
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Đã làm C++ thì nên dùng STL stack hơn là tự xây dựng.
    Mà thời nào rồi vẫn còn iostream.h vậy ?

  3. #3
    Ngày gia nhập
    05 2011
    Bài viết
    61

    Thank bạn góp ý. Mình dùng Cfree viết cho nhanh mà!

Các đề tài tương tự

  1. Algorithm [C-->C#] chuyển code ra 2 kết quả? C# sót chổ nào?
    Gửi bởi chicpoiga trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 12-11-2013, 10:07 PM
  2. code bài chuyển biểu thức từ trung sang hậu tố-Dùng Stack
    Gửi bởi Loveanygirls trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 16-02-2012, 02:48 PM
  3. source code quản lý trung tâm gia sư bằng ASP.NET MVC 2 + ajax
    Gửi bởi tdtanvn trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 18-01-2011, 05:34 PM
  4. Giúp sửa lỗi code về stack và tree về chuyển trung tố, hậu tố
    Gửi bởi Letaro trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 09-11-2010, 09:15 PM
  5. Code thuật toán chuyển tiền tố sang trung tố??
    Gửi bởi the_corsair trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 10-05-2009, 08:43 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn