Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Dùng stack, chuyển trung tố sang hậu tố bị lỗi. Đề tài niên luận của tớ.

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Mặc định Dùng stack, chuyển trung tố sang hậu tố bị lỗi. Đề tài niên luận của tớ.

    Đề tài yêu cầu dùng stack chuyển biểu thức từ trung tố sang hậu tố. Tớ đã đọc và lấy ý tưởng của một số bạn trên CongdongCViet, đại khái thế này:
    -Xem biểu thức nhập vào là một chuỗi.
    -Dùng Stack làm trung gian để chuyển chuỗi vừa nhập thành một chuỗi khác gọi là chuoihauto;
    -Tính toán dựa trên chuoihauto này.

    Tớ mới dùng stack làm trung gian để chuyển chuỗi nhập sang chuỗi hậu tố, đến đây, tớ dừng lại để xem chuỗi hậu tố nó xuất ra như thế nào, nhưng nó không xuất được.
    Các bạn giúp tớ xuất ra chuỗi hậu tố nhé!
    Giải thuật đây:
    KÝ PHÁP NGHỊCH ĐẢO BA LAN PHƯƠNG PHÁP TÍNH GIÁ TRỊ BIỂU THỨC TOÁN HỌC

    Khi lập trình, tính giá trị một biểu thức toán học là điều quá đỗi bình thường. Tuy nhiên, trong nhiều ứng dụng (như chương trình vẽ đồ thị hàm số chẳng hạn, trong đó chương trình cho phép người dùng nhập vào hàm số), ta cần phải tính giá trị của một biểu thức được nhập vào từ bàn phím dưới dạng một chuỗi. Với các biểu thức toán học đơn giản (như a+b ) thì bạn có thể tự làm bằng các phương pháp tách chuỗi “thủ công”. Nhưng để “giải quyết” các biểu thức có dấu ngoặc, ví dụ như (a+b )*c + (d+e)*f , thì các phương pháp tách chuỗi đơn giản đều không khả thi. Trong tình huống này, ta phải dùng đến Ký Pháp Nghịch Đảo Ba Lan (Reserve Polish Notation – RPN), một thuật toán “kinh điển” trong lĩnh vực trình biên dịch.

    Để đơn giản cho việc minh họa, ta giả định rằng chuỗi biểu thức mà ta nhận được từ bàn phím chỉ bao gồm: các dấu mở ngoặc/đóng ngoặc; 4 toán tử cộng, trừ, nhân và chia (+, -, *, /); các toán hạng đều chỉ là các con số nguyên từ 0 đến 9; không có bất kỳ khoảng trắng nào giữa các ký tự.

    Thế nào là ký pháp nghịch đảo Ba Lan?

    Cách trình bày biểu thức theo cách thông thường tuy tự nhiên với con người nhưng lại khá “khó chịu” đối với máy tính vì nó không thể hiện một cách tường minh quá trình tính toán để đưa ra giá trị của biểu thức. Để đơn giản hóa quá trình tính toán này, ta phải biến đổi lại biểu thức thông thường về dạng hậu tố - postfix (cách gọi ngắn của thuật ngữ ký pháp nghịch đảo Ba Lan). Để phân biệt hai dạng biểu diễn biểu thức, ta gọi cách biểu diễn biểu thức theo cách thông thường là trung tố - infix (vì toán tử nằm ở giữa hai toán hạng).

    Ký pháp nghịch đảo Ba Lan được phát minh vào khoảng giữa thập kỷ 1950 bởi Charles Hamblin - một triết học gia và khoa học gia máy tính người Úc - dựa theo công trình về ký pháp Ba Lan của nhà Toán học người Ba Lan Jan Łukasiewicz. Hamblin trình bày nghiên cứu của mình tại một hội nghị khoa học vào tháng 6 năm 1957 và chính thức công bố vào năm 1962.

    Từ cái tên hậu tố các bạn cũng đoán ra phần nào là theo cách biểu diễn này, các toán tử sẽ được đặt sau các toán hạng. Cụ thể là biểu thức trung tố: 4+5 sẽ được biểu diễn lại thành 4 5 +.

    Quá trình tính toán giá trị của biểu thức hậu tố khá tự nhiên đối với máy tính. Ý tưởng là đọc biểu thức từ trái sang phải, nếu gặp một toán hạng (con số hoặc biến) thì push toán hạng này vào ngăn xếp; nếu gặp toán tử, lấy hai toán hạng ra khỏi ngăn xếp (stack), tính kết quả, đẩy kết quả trở lại ngăn xếp. Khi quá trình kết thúc thì con số cuối cùng còn lại trong ngăn xếp chính là giá trị của biểu thức đó.

    Ví dụ: biểu thức trung tố :

    5 + ((1 + 2) * 4) + 3

    được biểu diễn lại dưới dạng hậu tố là (ta sẽ bàn về thuật toán chuyển đổi từ trung tố sang hậu tố sau):

    5 1 2 + 4 * + 3 +

    Chuyển đổi từ trung tố sang hậu tố

    Thuật toán chuyển đổi này được phát minh bởi vị giáo sư người Đức nổi tiếng Edsger Dijkstra (cũng là tác giả của thuật toán tìm đường đi ngắn nhất được đặt theo tên ông và semaphore, một kỹ thuật để đồng bộ các tiến trình trong lập trình đa nhiệm). Thuật toán này cũng dựa theo cơ chế ngăn xếp. Ý tưởng chung của thuật toán cũng là duyệt biểu thức từ trái sang phải:

    - Nếu gặp một toán hạng (con số hoặc biến) thì ghi nó vào chuỗi kết quả (chuỗi kết quả là biểu thức trung tố).

    - Nếu gặp dấu mở ngoặc, đưa nó vào stack.

    - Nếu gặp một toán tử (gọi là o1 ), thực hiện hai bước sau:

    o Chừng nào còn có một toán tử o2 ở đỉnh ngăn xếp VÀ độ ưu tiên của o1 nhỏ hơn hay bằng độ ưu tiên của o2 thì lấy o2 ra khỏi ngăn xếp và ghi vào kết quả.

    o Push o1 vào ngăn xếp

    - Nếu gặp dấu đóng ngoặc thì cứ lấy các toán tử trong ngăn xếp ra và ghi vào kết quả cho đến khi lấy được dấu mở ngoặc ra khỏi ngăn xếp.

    - Khi đã duyệt hết biểu thức trung tố, lần lượt lấy tất cả toán hạng (nếu có) từ ngăn xếp ra và ghi vào chuỗi kết quả.
    Còn đây là code:
    Code:
    #include<conio.h>
    #include<stdio.h>
    #include<malloc.h>
    #include<string.h>
    int 	douutien(char kitu)
    {
    		if(kitu=='+'||kitu=='-')	
    			return 0;
    		if(kitu=='*'||kitu=='/')	
    			return 1;
    }
    bool	isnumber(char kitu)
    {
    		if((int(kitu)>=48&&int(kitu)<=57))	
    			return true;
    		else
    			return false;
    }
    bool	isoperator(char kitu)
    {
    		if(kitu=='+'||kitu=='-'||kitu=='*'||kitu=='/')
    			return true;
    		else
    			return false;
    	
    }
    
    typedef char Elementtype;
    struct 	Node
    {
    		Elementtype	Element;
    		Node*	Next;	
    	
    };
    typedef Node*	Position;
    typedef Position	Stack;
    
    void	MAKENULL_STACK(Stack &S)
    {
    		S=(Node*)malloc(sizeof(Node));
    		S->Next=NULL;
    	
    }
    bool	ISEMPTY_STACK(Stack S)
    {
    		return S->Next==NULL;	
    }
    void	PUSH(Elementtype X, Stack &S)
    {
    		Position Temp;
    		Temp=(Node*)malloc(sizeof(Node));
    		Temp->Element=X;//CHO NAY CHUA BIET VIET NHU THE NAO
    		Temp->Next=S->Next;
    		S->Next=Temp;
    }
    Elementtype	 TOP(Stack S)//LAY GIA TRI PHAN TU DAU STACK NHUNG KHONG XOA PHAN TU DO
    {
    		return S->Next->Element;
    }
    void	POP(Stack &S)//XOA MOT PHAN TU DAU STACK
    {
    		Position Temp;
            Temp=S->Next;
            S->Next=S->Next->Next;
            free(Temp);	
    }
    void              READ_STACK(Stack &S)
    {           		
                      int i=0;           
                      Elementtype X;
                      do{
                          printf("Nhap vao phan tu thu %d:",i+1);scanf("%c",&X);
                            if(X!='e')
                          PUSH(X,S);
                          fflush(stdin);
                          i++;
                      }while(X!='e');
                      
    }
    void              PRINT_STACK(Stack &S)
    {
             if(ISEMPTY_STACK(S))
                printf("\nStack rong, khong co phan tu de in");         
             else
             {        Position P=S;
                      while(P->Next!=NULL)
                        {
                           printf("%c ",P->Next->Element);
                           P=P->Next;
                        };  
             }               
             printf("\n");         
    }
    void 	chuyendoichuoi(char chuoinhap[], char chuoihauto[])
    {
    		Stack S;
    		//MAKENULL_STACK(S);
    		int demxau=0;
    		for(int i=0;i<strlen(chuoinhap);i++)
    		{
    			if(isoperator(chuoinhap[i])&&isoperator(chuoinhap[i+1]))
    				printf("\nBieu thuc khong hop le!");
    			if((chuoinhap[i]>=65&&chuoinhap[i]<=90)||(chuoinhap[i]>=97&&chuoinhap[i]<=121))
    				printf("\nBieu thuc khong hop le!");	
    		}
    		for(int i=0;i<strlen(chuoinhap);i++)
    		{
    			char kitu=chuoinhap[i];
    				 if(isnumber(kitu))
    				 {
    				 	chuoihauto[demxau++]=kitu;
    				 		if(isoperator(chuoinhap[i]))
    				 			chuoihauto[demxau++]=' ';
    				 }
    				 if(kitu=='(')
    				 {
    						PUSH('(',S);					
    				 }	
    				 if(isoperator(kitu))
    				 {
    						if(!ISEMPTY_STACK(S))
    						{
    							if(isoperator(TOP(S))&&(douutien(TOP(S))>=douutien(kitu)))
    							{
    								char kitutam;//CO THE SUA CODE NGAN LAI
    								kitutam=TOP(S);
    								chuoihauto[demxau++]=kitutam;
    								POP(S);
    								PUSH(kitu,S);
    							}
    							else
    								PUSH(kitu,S);
    							
    						}
    						else
    							PUSH(kitu,S);
    						
    				 }		
    				 	
    				if(kitu==')')
    				{
    					char kitutam;
    					while(1)
    					{
    						kitutam=TOP(S);
    						POP(S);
    						if(kitutam==')')
    							break;
    						chuoihauto[demxau++]=kitutam;
    					}	
    					
    				}//END IF(kitu==')')	
    			
    		}//END FOR
    		while(!ISEMPTY_STACK(S))//Lay het nhung gi con lai trong stack
    		{
    			char kitutam;
    			kitutam=TOP(S);
    			POP(S);
    			chuoihauto[demxau++]=kitutam;
    		}
    		chuoihauto[demxau++]='\0';//CHEN KI TU NULL VAO CUOI XAU;
    }
    int main()
    {
    	char xaunhap[50], xauxuat[50];
    	Stack S;
    	MAKENULL_STACK(S);
    	printf("Nhap vao mot xau: ");gets(xaunhap);
    	chuyendoichuoi(xaunhap,xauxuat);
    	puts(xauxuat);
    	getch();	
    
    }
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    336

    ồ chỗ while(1) sai kìa
    C Code:
    1. if(kitu==')')
    2.                 {
    3.                     char kitutam;
    4.                     while(1)
    5.                     {
    6.                         kitutam=TOP(S);
    7.                         POP(S);
    8.                         if(kitutam=='(')   //fix this
    9.                             break;
    10.                         chuoihauto[demxau++]=kitutam;
    11.                     }  
    12.                    
    13.                 }
    code ra gió bão

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    203

    C Code:
    1. if(kitu==')')
    2.                 {
    3.                     char kitutam;
    4.                     while(1)
    5.                     {
    6.                         kitutam=TOP(S);
    7.                         POP(S);
    8.                         [B][COLOR="Red"]if(kitutam=='(')   //fixed this[/COLOR][/B]
    9.                             break;
    10.                         chuoihauto[demxau++]=kitutam;
    11.                     }  
    12.                    
    13.                 }
    Bạn thật tinh ý, code mình đã sửa chỗ đó rồi nhưng nó vẫn không chạy.
    Đã được chỉnh sửa lần cuối bởi Loveanygirls : 01-04-2009 lúc 09:46 AM.
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  4. #4
    Ngày gia nhập
    04 2008
    Bài viết
    336

    err ... mình sửa chỗ đó xong là ok ma ?̀, cái mình post là sửa rồi đó
    code ra gió bão

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Vẫn không chạy bạn ơi, xem video nè:
    Code:
    http://www.mediafire.com/?5udbs2tt0e2
    Hoặc
    http://rapidshare.com/files/215991956/Stack_khongchay.rar
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Mặc định Dùng stack, chuyển trung tố sang hậu tố bị lỗi. Đề tài niên luận của tớ.

    nãy tưởng cậu xài BC++ :0
    code này biên dịch bằng VC++ nè cậu paste vào xem thử, trên VC++ thì thấy warning hơi nhiều thôi. Nói chung là chạy được.
    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. #include<malloc.h>
    4. #include<string.h>
    5.  
    6. int     douutien(char kitu)
    7. {
    8.     if(kitu=='+'||kitu=='-')   
    9.         return 0;
    10.     if(kitu=='*'||kitu=='/')   
    11.         return 1;
    12. }
    13. bool    isnumber(char kitu)
    14. {
    15.     if((int(kitu)>=48&&int(kitu)<=57)) 
    16.         return true;
    17.     else
    18.         return false;
    19. }
    20. bool    isoperator(char kitu)
    21. {
    22.     if(kitu=='+'||kitu=='-'||kitu=='*'||kitu=='/')
    23.         return true;
    24.     else
    25.         return false;
    26.  
    27. }
    28.  
    29. typedef char Elementtype;
    30. struct  Node
    31. {
    32.     Elementtype Element;
    33.     Node*   Next;  
    34.  
    35. };
    36. typedef Node*   Position;
    37. typedef Position    Stack;
    38.  
    39. void    MAKENULL_STACK(Stack &S)
    40. {
    41.     S=(Node*)malloc(sizeof(Node));
    42.     S->Next=NULL;
    43.  
    44. }
    45. bool    ISEMPTY_STACK(Stack S)
    46. {
    47.     return S->Next==NULL;  
    48. }
    49. void    PUSH(Elementtype X, Stack &S)
    50. {
    51.     Position Temp;
    52.     Temp=(Node*)malloc(sizeof(Node));
    53.     Temp->Element=X;//CHO NAY CHUA BIET VIET NHU THE NAO
    54.     Temp->Next=S->Next;
    55.     S->Next=Temp;
    56. }
    57. Elementtype  TOP(Stack S)//LAY GIA TRI PHAN TU DAU STACK NHUNG KHONG XOA PHAN TU DO
    58. {
    59.     return S->Next->Element;
    60. }
    61. void    POP(Stack &S)//XOA MOT PHAN TU DAU STACK
    62. {
    63.     Position Temp;
    64.     Temp=S->Next;
    65.     S->Next=S->Next->Next;
    66.     free(Temp);
    67. }
    68. void              READ_STACK(Stack &S)
    69. {                  
    70.     int i=0;          
    71.     Elementtype X;
    72.     do{
    73.         printf("Nhap vao phan tu thu %d:",i+1);scanf("%c",&X);
    74.         if(X!='e')
    75.             PUSH(X,S);
    76.         fflush(stdin);
    77.         i++;
    78.     }while(X!='e');
    79.  
    80. }
    81. void              PRINT_STACK(Stack &S)
    82. {
    83.     if(ISEMPTY_STACK(S))
    84.         printf("\nStack rong, khong co phan tu de in");        
    85.     else
    86.     {        Position P=S;
    87.     while(P->Next!=NULL)
    88.     {
    89.         printf("%c ",P->Next->Element);
    90.         P=P->Next;
    91.     };  
    92.     }              
    93.     printf("\n");        
    94. }
    95. void    chuyendoichuoi(char chuoinhap[], char chuoihauto[])
    96. {
    97.     Stack S;
    98.     MAKENULL_STACK(S);
    99.     int demxau=0;
    100.     for(int i=0;i<strlen(chuoinhap);i++)
    101.     {
    102.         if(isoperator(chuoinhap[i])&&isoperator(chuoinhap[i+1]))
    103.             printf("\nBieu thuc khong hop le!");
    104.         if((chuoinhap[i]>=65&&chuoinhap[i]<=90)||(chuoinhap[i]>=97&&chuoinhap[i]<=121))
    105.             printf("\nBieu thuc khong hop le!");   
    106.     }
    107.     for(int i=0;i<strlen(chuoinhap);i++)
    108.     {
    109.         char kitu=chuoinhap[i];
    110.         if(isnumber(kitu))
    111.         {
    112.             chuoihauto[demxau++]=kitu;
    113.             if(isoperator(chuoinhap[i]))
    114.                 chuoihauto[demxau++]=' ';
    115.         }
    116.         if(kitu=='(')
    117.         {
    118.             PUSH('(',S);                   
    119.         }  
    120.         if(isoperator(kitu))
    121.         {
    122.             if(!ISEMPTY_STACK(S))
    123.             {
    124.                 if(isoperator(TOP(S))&&(douutien(TOP(S))>=douutien(kitu)))
    125.                 {
    126.                     char kitutam;//CO THE SUA CODE NGAN LAI
    127.                     kitutam=TOP(S);
    128.                     chuoihauto[demxau++]=kitutam;
    129.                     POP(S);
    130.                     PUSH(kitu,S);
    131.                 }
    132.                 else
    133.                     PUSH(kitu,S);
    134.  
    135.             }
    136.             else
    137.                 PUSH(kitu,S);
    138.  
    139.         }      
    140.  
    141.         if(kitu==')')
    142.         {
    143.             char kitutam;
    144.             while(1)
    145.             {
    146.                 kitutam=TOP(S);
    147.                 POP(S);
    148.                 if(kitutam=='(')
    149.                     break;
    150.                 chuoihauto[demxau++]=kitutam;
    151.             }  
    152.  
    153.         }//END IF(kitu==')')   
    154.  
    155.     }//END FOR
    156.     while(!ISEMPTY_STACK(S))//Lay het nhung gi con lai trong stack
    157.     {
    158.         char kitutam;
    159.         kitutam=TOP(S);
    160.         POP(S);
    161.         chuoihauto[demxau++]=kitutam;
    162.     }
    163.     chuoihauto[demxau++]='\0';//CHEN KI TU NULL VAO CUOI XAU;
    164. }
    165. int main()
    166. {
    167.     char xaunhap[50], xauxuat[50];
    168.     printf("Nhap vao mot xau: ");gets(xaunhap);
    169.     chuyendoichuoi(xaunhap,xauxuat);
    170.     puts(xauxuat);
    171.     getch();   
    172.  
    173. }
    code ra gió bão

  7. #7
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Đến là khổ với mấy cái trình biên dịch. Hồi nào tới giờ mình toàn xài DevC++ nên bây giờ Paste qua Microsoft Visual C++ nó báo 54 errors và 11 warnings làm mình không biết lần thế nào nữa.
    Cậu có cách nào giúp nó chạy trên DevC++ không?
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  8. #8
    Ngày gia nhập
    04 2008
    Bài viết
    336

    xem nó báo error gì thì sửa error đó thôi chứ biết sao
    code ra gió bão

  9. #9
    Ngày gia nhập
    10 2008
    Bài viết
    2

    Mặc định nè các bạn chạy 100%

    Code:
    #include <iostream.h>
    #include <string.h>
    #define max 255
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    struct anode{
           char ope; int val;
    };
    struct node{
           char ope; int val;
           node *l,*r;
    };
    char c[max];
    char num[10]={'0','1','2','3','4','5','6','7','8','9'};
    char ope[4]={'+' , '-' , '*' , '/'};
    void read(char* expr){
    	 printf("Nhap bieu thuc tinh toan: ");
    	 fflush(stdin);
         gets(expr);
    }
    void write(anode suff[],int n){
    	 printf("Chuyen thanh bieu thuc hau to: \n");
    	 for (int i = 0;i < n;i++)
    	 if (suff[i].ope != '.')
    	 printf("%c ",suff[i].ope);
    	 else
    	 printf("%d ",suff[i].val);
    }
    int isope(char c)
    {
    	 int i = 0;
    	 while ((i < 4)&&(c != ope[i])) ++i;
    	 if (i < 4) return 1;
    	 else return 0;
    }
    int isnum(char c){
    	 int i = 0;
    	 while ((i < 10)&&(c != num[i])) ++i;
    	 if (i < 10) return 1;
    	 else return 0;
    }
    int power(int x,int y){
    	int p = 1;
    	for (int i = 0;i < y;i++) p *= x;
    	return p;
    }
    int ctoi(char c[],int n){
    	int m = 0;
    	for (int i = 0; i <= n;i++){
    		int j = 0;
    		while ((j < 10)&&(c[i] != num[j])) j++;
    		m += j*power(10,n-i);
    	}
    	return m;
    }
    int prio(char c){
    	if (c == '$') return 0;
    	else if ((c == '(')||(c == ')')) return 1;
    		 else if ((c == '+')||(c == '-')) return 2;
    			  else return 3;
    }
    void get(char* expr,anode suff[],int& n){
    	 char cnum[5],stack[max]; int m,top = 0,i = 0;
    	 stack[top] = '$';
    	 while (i < strlen(expr)){
    		   if (isope(expr[i]))
    			  if (prio(expr[i]) > prio(stack[top]))
    				 stack[++top] = expr[i++];
    			  else{
    				   while (prio(expr[i]) <= prio(stack[top])){
    						 suff[n].val = -1;
    						 suff[n++].ope = stack[top--];
    				   }
    				   stack[++top] = expr[i++];
    			  }
    		   if (isnum(expr[i])){
    			  m = -1;
    			  while ((i < strlen(expr))&&(isnum(expr[i])))
    					cnum[++m] = expr[i++];
    			  m = ctoi(cnum,m);
    			  suff[n].ope = '.';
    			  suff[n++].val = m;
    		   }
    		   if (expr[i] =='(') stack[++top] = expr[i++];
    		   if (expr[i] ==')'){
    			  while (stack[top] != '('){
    					suff[n].val = -1;
    					suff[n++].ope = stack[top--];
    			  }
    			  top--;
    			  i++;
    		   }
    	 }
    	 while (stack[top] != '$'){
    		   suff[n].val = -1;
    		   suff[n++].ope = stack[top--];
    	 }
    }
    void  main()
    {
    
    	char* expr; anode suff[max]; int n,menu;
    	clrscr();
    	do{
    	clrscr();
    	printf("\n$$$$$$$Demo chuong trinh chuyen bieu thuc trung to sang bieu thuc hau to$$$$$$$\n");
    	printf("\n==========================================================================\n");
    	printf("\n1.Nhap bieu thuc");
    	printf("\n2.Tinh gia tri bieu thuc");
    	printf("\n0.Thoat chuong trinh\n");
    	printf("\n==========================================================================\n");
    	printf("\nChon mot muc:");
    	scanf("%d",&menu);
    	switch(menu){
    	case 1:
    		read(expr);
    		n=0;
    		get(expr,suff,n);
    		write(suff,n);
    		fflush(stdin);
    		//getchar();
    		break;
    	case 2:
    		printf("\nUnder Contruction");		
    		getch();
    		break;
    	case 0:
    		exit(0);
    		//break;
    	//return 0;
    		}
    	}while(1);
    }

    bạn nào giúp mình tình biểu thức ra được khong

  10. #10
    Ngày gia nhập
    10 2008
    Bài viết
    25

    Bạn ơi xem lại chỗ này đi tôi chạy thử nhưng mà có được đâu
    Code:
    case 2:
    		printf("\nUnder Contruction");		
    		getch();
    		break;

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

  1. Thuật toán C++ chuyển đổi biểu thức từ dạng trung tố sang hậu tố bằng stack
    Gửi bởi trucma_91 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 4
    Bài viết cuối: 09-10-2012, 08:48 AM
  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. sai code chuyển hệ 10 sang hệ 16 dùng stack
    Gửi bởi quangbinhit trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 28-09-2011, 10:04 AM
  4. Help:dùng stack chuyển biểu thức từ trung sang hậu tố
    Gửi bởi nike trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 23-11-2010, 10:20 PM
  5. Code về stack | Chuyển hệ số 10 sang 2 dùng stack
    Gửi bởi ahappyboy89 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 17-04-2009, 09:48 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