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

Đề tài: Viết chương trình tính giá trị biểu thức trung tố

  1. #1
    Ngày gia nhập
    11 2012
    Nơi ở
    TP HCM
    Bài viết
    3

    Mặc định Viết chương trình tính giá trị biểu thức trung tố

    Em rất yếu về stack, còn DSLK thì cũng chỉ biết sơ sơ nên mong mọi người giúp đỡ... đề thi của e

    1.Nhập biểu thức trung tố: toán hạng, toán tử và dấu ngoặc
    VD: (20+5)/5+(7-3)*100
    2. Chuyển biểu thức trung tố thành hậu tố (xuất ra màn hình)
    3. Tính giá trị của biểu thức hậu tố

    Yêu Cầu:
    Sinh viên cài đặt dùng hàm stack
    1. Khai báo cấu trúc của phần tử trong DSLK dùng làm stack
    2. Cài đặt các thao tác: IsEmpty, NewNode, FreeNode, Pop, Push… trên Stack.

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

    Trích dẫn Nguyên bản được gửi bởi squall016 Xem bài viết
    Em rất yếu về stack, còn DSLK thì cũng chỉ biết sơ sơ nên mong mọi người giúp đỡ... đề thi của e

    1.Nhập biểu thức trung tố: toán hạng, toán tử và dấu ngoặc
    VD: (20+5)/5+(7-3)*100
    2. Chuyển biểu thức trung tố thành hậu tố (xuất ra màn hình)
    3. Tính giá trị của biểu thức hậu tố

    Yêu Cầu:
    Sinh viên cài đặt dùng hàm stack
    1. Khai báo cấu trúc của phần tử trong DSLK dùng làm stack
    2. Cài đặt các thao tác: IsEmpty, NewNode, FreeNode, Pop, Push… trên Stack.
    Bạn qua topic năm trước này chịu khó tìm là ra http://diendan.congdongcviet.com/showthread.php?t=74124
    còn bài này trước mình dùng mảng vừa chuyển sang stack dạng dslk, bạn thấy dùng được phần nào thì dùng này
    C++ Code:
    1. #include<iostream>
    2. #include<string.h>
    3. using std::cout;
    4. using std::cin;
    5. //dinh nghia cau truc stack
    6.  
    7. typedef struct Node
    8. {
    9.     char a;
    10.     Node *Next;
    11. };
    12. typedef struct
    13. {
    14.    Node *top;
    15. }Stack;
    16.  
    17. void KhoiTao(Stack &S);
    18. int Toantu(char s);
    19. void xuly(char *s);
    20. void ThemCach(char *s);
    21. int Priroty(char s);
    22. int IsEmpty(Stack &S);
    23. void Push(Stack &S, char c);
    24. char Top(Stack S);//lay o dau ngan stack
    25. void Pop(Stack &S, char &c);
    26. void Postfix(Stack &S, char *s);
    27.  
    28. //khoi tao stack
    29. void KhoiTao(Stack &S)
    30. {
    31.     Node *Newnode=new Node;
    32.     Newnode->a='(';
    33.     Newnode->Next=NULL;
    34.     S.top=Newnode;//khoi tao stack
    35.     return;
    36. }
    37. //kiem tra la toan tu hay khong
    38. int Toantu(char s)
    39. {
    40.     if(s=='+'||s=='-'||s=='*'||s=='/'||s=='%'||s=='^'||s=='('||s==')')
    41.     return 1;
    42.     return 0;
    43. }
    44. //xu ly bieu thuc nhap vao
    45. void xuly(char *s)
    46. {
    47.      int j=0;
    48.      for(int i=0;s[i]!='\0';++i)
    49.      {
    50.              if(s[i]!=' ')//
    51.                  s[j++]=s[i];                  
    52.      }
    53.    s[j]='\0';    
    54.    return;
    55. }
    56. //Them dau cach
    57. void ThemCach(char *s)
    58. {
    59.     int j=0;
    60.     char *b=new char[256];
    61.     for(int i=0; s[i]!='\0'; ++i)
    62.         if(toantu(s[i]))
    63.         {
    64.             b[j++]=' ';
    65.             b[j++]=s[i];
    66.             b[j++]=' ';
    67.         }
    68.         else
    69.             b[j++]=s[i];
    70.      b[j]='\0';
    71.     strcpy(s,b);
    72.     strupr(s);
    73.     delete [] b;
    74.     b=NULL;
    75.     return;
    76. }          
    77. //xet do uu tien
    78. int Priroty(char s)
    79. {
    80.   if(s=='^')
    81.     return 3;
    82.   else
    83.       if(s=='*'||s=='/'||s=='%')
    84.      return 2;
    85.   else
    86.       if(s=='+'||s=='-')
    87.          return 1;
    88.       else
    89.          return 0;
    90. }
    91. //kiem tra stack rong hay khong
    92. int IsEmpty(Stack &S)
    93. {
    94.     if(S.top==NULL)//stack rong
    95.         return 1;
    96.     return 0;
    97. }
    98. //ham dat vao stack
    99. void Push(Stack &S, char c)
    100. {
    101.     Node *Newnode=new Node;
    102.     if(Newnode!=NULL)//Neu  cap phat duoc
    103.     {
    104.         Newnode->a=c;
    105.         Newnode->Next=NULL;
    106.     }
    107.     if(IsEmpty(S))
    108.         S.top=Newnode;
    109.     else
    110.     {
    111.         Newnode->Next=S.top;
    112.         S.top=Newnode;
    113.     }
    114.     return;
    115. }
    116. //lay phan tu dau tien o stack
    117. char Top(Stack S)
    118. {
    119.     return S.top->a;
    120. }
    121. //lay ra khoi han stack
    122. void Pop(Stack &S, char &c)
    123. {
    124.     Node *p=NULL;
    125.     if(!IsEmpty(S))
    126.     {
    127.     p=S.top;
    128.     c=p->a;
    129.     S.top=p->Next;
    130.     delete p;
    131.     }
    132.     return;
    133. }
    134. //xu ly hau to
    135. void Postfix(Stack &S, char *s)
    136. {
    137.     //doc stack
    138.     char c;
    139.     for(int i=0; s[i]!='\0';++i)
    140.     {
    141.         if(s[i]>='A' && s[i]<='Z' || s[i]>='0'&& s[i]<='9')
    142.                      cout<<s[i];
    143.         else
    144.             if(s[i]==' ')
    145.               cout<<" ";
    146.             else
    147.                 if(s[i]=='(')
    148.                    Push(S,s[i]);//dua vao stack
    149.                 else
    150.                     if(s[i]==')')//lay ra cho den khi gap dau ")"
    151.                     {
    152.                       Pop(S,c);
    153.                       while(c!='(')
    154.                       {
    155.                         cout<<c<<" ";
    156.                         Pop(S,c);//lay ra khoi stack
    157.                       }
    158.                     }
    159.                     else
    160.                         if(toantu(s[i]))//la toan hang
    161.                         {  
    162.                            while(Priroty(s[i])<Priroty(Top(S)))//do uu tien cua toan tu dinh stack lon hon.
    163.                            {
    164.                               Pop(S,c);//lay ra o dinh stack
    165.                               cout<<c<<" ";
    166.                            }
    167.                           Push(S,s[i]);//dat toan tu hien tai vao stack
    168.                         }
    169.     }
    170.     while(S.top>=0)//lay nhung gi con lai trong stack
    171.     {
    172.         Pop(S,c);
    173.         if(c!='(')
    174.         cout<<c<<" ";
    175.     }
    176.     return;
    177. }
    178.  
    179. int main()
    180. {
    181.     char s[256];
    182.     Stack S;
    183.     KhoiTao(S);
    184.     cout<<"Nhap vao bieu thuc trung to:";
    185.     cin.getline(s,256);
    186.     xuly(s);
    187.     ThemCach(s);
    188.     cout<<"Bieu thuc trung to sau khi xu ly:"<<s<<std::endl;
    189.     cout<<"Bieu thuc hau to:";
    190.      Postfix(S,s);
    191.      cout<<std::endl;
    192.     system("pause");
    193.     return 0;
    194. }
    Đã được chỉnh sửa lần cuối bởi kimcy1992 : 30-11-2012 lúc 02:50 PM.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  3. #3
    Ngày gia nhập
    02 2012
    Nơi ở
    hà nội
    Bài viết
    58

    Trích dẫn Nguyên bản được gửi bởi kimcy1992 Xem bài viết
    Bạn qua topic năm trước này chịu khó tìm là ra http://diendan.congdongcviet.com/showthread.php?t=74124
    còn bài này trước mình dùng mảng vừa chuyển sang stack dạng dslk, bạn thấy dùng được phần nào thì dùng này
    C++ Code:
    1. #include<iostream>
    2. #include<string.h>
    3. using std::cout;
    4. using std::cin;
    5. //dinh nghia cau truc stack
    6.  
    7. typedef struct Node
    8. {
    9.     char a;
    10.     Node *Next;
    11. };
    12. typedef struct
    13. {
    14.    Node *top;
    15. }Stack;
    16.  
    17. void KhoiTao(Stack &S);
    18. int Toantu(char s);
    19. void xuly(char *s);
    20. void ThemCach(char *s);
    21. int Priroty(char s);
    22. int IsEmpty(Stack &S);
    23. void Push(Stack &S, char c);
    24. char Top(Stack S);//lay o dau ngan stack
    25. void Pop(Stack &S, char &c);
    26. void Postfix(Stack &S, char *s);
    27.  
    28. //khoi tao stack
    29. void KhoiTao(Stack &S)
    30. {
    31.     Node *Newnode=new Node;
    32.     Newnode->a='(';
    33.     Newnode->Next=NULL;
    34.     S.top=Newnode;//khoi tao stack
    35.     return;
    36. }
    37. //kiem tra la toan tu hay khong
    38. int Toantu(char s)
    39. {
    40.     if(s=='+'||s=='-'||s=='*'||s=='/'||s=='%'||s=='^'||s=='('||s==')')
    41.     return 1;
    42.     return 0;
    43. }
    44. //xu ly bieu thuc nhap vao
    45. void xuly(char *s)
    46. {
    47.      int j=0;
    48.      for(int i=0;s[i]!='\0';++i)
    49.      {
    50.              if(s[i]!=' ')//
    51.                  s[j++]=s[i];                  
    52.      }
    53.    s[j]='\0';    
    54.    return;
    55. }
    56. //Them dau cach
    57. void ThemCach(char *s)
    58. {
    59.     int j=0;
    60.     char *b=new char[256];
    61.     for(int i=0; s[i]!='\0'; ++i)
    62.         if(toantu(s[i]))
    63.         {
    64.             b[j++]=' ';
    65.             b[j++]=s[i];
    66.             b[j++]=' ';
    67.         }
    68.         else
    69.             b[j++]=s[i];
    70.      b[j]='\0';
    71.     strcpy(s,b);
    72.     strupr(s);
    73.     delete [] b;
    74.     b=NULL;
    75.     return;
    76. }          
    77. //xet do uu tien
    78. int Priroty(char s)
    79. {
    80.   if(s=='^')
    81.     return 3;
    82.   else
    83.       if(s=='*'||s=='/'||s=='%')
    84.      return 2;
    85.   else
    86.       if(s=='+'||s=='-')
    87.          return 1;
    88.       else
    89.          return 0;
    90. }
    91. //kiem tra stack rong hay khong
    92. int IsEmpty(Stack &S)
    93. {
    94.     if(S.top==NULL)//stack rong
    95.         return 1;
    96.     return 0;
    97. }
    98. //ham dat vao stack
    99. void Push(Stack &S, char c)
    100. {
    101.     Node *Newnode=new Node;
    102.     if(Newnode!=NULL)//Neu  cap phat duoc
    103.     {
    104.         Newnode->a=c;
    105.         Newnode->Next=NULL;
    106.     }
    107.     if(IsEmpty(S))
    108.         S.top=Newnode;
    109.     else
    110.     {
    111.         Newnode->Next=S.top;
    112.         S.top=Newnode;
    113.     }
    114.     return;
    115. }
    116. //lay phan tu dau tien o stack
    117. char Top(Stack S)
    118. {
    119.     return S.top->a;
    120. }
    121. //lay ra khoi han stack
    122. void Pop(Stack &S, char &c)
    123. {
    124.     Node *p=NULL;
    125.     if(!IsEmpty(S))
    126.     {
    127.     p=S.top;
    128.     c=p->a;
    129.     S.top=p->Next;
    130.     delete p;
    131.     }
    132.     return;
    133. }
    134. //xu ly hau to
    135. void Postfix(Stack &S, char *s)
    136. {
    137.     //doc stack
    138.     char c;
    139.     for(int i=0; s[i]!='\0';++i)
    140.     {
    141.         if(s[i]>='A' && s[i]<='Z' || s[i]>='0'&& s[i]<='9')
    142.                      cout<<s[i];
    143.         else
    144.             if(s[i]==' ')
    145.               cout<<" ";
    146.             else
    147.                 if(s[i]=='(')
    148.                    Push(S,s[i]);//dua vao stack
    149.                 else
    150.                     if(s[i]==')')//lay ra cho den khi gap dau ")"
    151.                     {
    152.                       Pop(S,c);
    153.                       while(c!='(')
    154.                       {
    155.                         cout<<c<<" ";
    156.                         Pop(S,c);//lay ra khoi stack
    157.                       }
    158.                     }
    159.                     else
    160.                         if(toantu(s[i]))//la toan hang
    161.                         {  
    162.                            while(Priroty(s[i])<Priroty(Top(S)))//do uu tien cua toan tu dinh stack lon hon.
    163.                            {
    164.                               Pop(S,c);//lay ra o dinh stack
    165.                               cout<<c<<" ";
    166.                            }
    167.                           Push(S,s[i]);//dat toan tu hien tai vao stack
    168.                         }
    169.     }
    170.     while(S.top>=0)//lay nhung gi con lai trong stack
    171.     {
    172.         Pop(S,c);
    173.         if(c!='(')
    174.         cout<<c<<" ";
    175.     }
    176.     return;
    177. }
    178.  
    179. int main()
    180. {
    181.     char s[256];
    182.     Stack S;
    183.     KhoiTao(S);
    184.     cout<<"Nhap vao bieu thuc trung to:";
    185.     cin.getline(s,256);
    186.     xuly(s);
    187.     ThemCach(s);
    188.     cout<<"Bieu thuc trung to sau khi xu ly:"<<s<<std::endl;
    189.     cout<<"Bieu thuc hau to:";
    190.      Postfix(S,s);
    191.      cout<<std::endl;
    192.     system("pause");
    193.     return 0;
    194. }
    VD: 3-3*2+9/3 =>Biểu thức trung tố: 332*-93/+. nhưng kết quả bài này là: 332*9/3+- (sai)
    + Quách Việt Kiên
    + Yahoo: Kaka_8x_vn
    + skype: kiencuongno1
    + Gmail: kiencuongno1@gmail.com
    Ai có thể free cho mình 50k thẻ điện thoại ko.

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

  1. muốn viết code cho 1 button nằm trong girdview thì viết ở đâu
    Gửi bởi thuan trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 14-09-2011, 01:08 PM
  2. Viết Giao Diện Phần Mềm bằng Flash, Core viết = C
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 5
    Bài viết cuối: 31-05-2011, 06:45 AM
  3. Viết hàm so sánh hai sinh viên theo điểm trung bình?
    Gửi bởi teotoni trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 06-05-2011, 11:41 AM
  4. Algorithm Viết code thời khóa biểu viết trên Window Form C# như thế nào?
    Gửi bởi hocphp_1998 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 12-04-2011, 11:10 PM
  5. [visual basic]Viết lệnh trong sự kiện timer là viết ở đâu?
    Gửi bởi thuan trong diễn đàn Thắc mắc chung
    Trả lời: 2
    Bài viết cuối: 21-09-2010, 12:53 AM

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