Trang ChínhTrang Chính  CalendarCalendar  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
  • Top posters
 Mr.Pakapun (256)
 ddtan90 (178)
 tvduong (147)
 dthnam90 (137)
 minhquankq (101)
 arianbo (70)
 DoanhNhan (54)
 chicken (53)
 stormit (52)
 gentle_storm (47)

Share | 
 

 nl 1 giai phương trình bằng stack

Go down 
Tác giảThông điệp
mapcao91
Thành viên mới
Thành viên mới
avatar

Tổng số bài gửi : 12
Join date : 28/02/2011

Bài gửiTiêu đề: nl 1 giai phương trình bằng stack   Mon Apr 04, 2011 9:51 pm

dưới đây là bài của mình,sử dụng ngăn xếp.mình k đưa tên biến và xuất kết quả ra từng bước được.các bạn ơi,giúp mình với.
Code:
#include <stdio.h>
#include <conio.h>
#include <string.h>

#define MAX 100

#define PLUS    0 /* Dau cong */
#define MINUS    1 /* Dau tru */
#define MULTIPLE 2 /* Dau nhan */
#define DIVIDE  3 /* Dau chia */
#define LPAREN  4 /* Dau mo ngoac don */
#define RPAREN  5 /* Dau dong ngoac don */

int top;

struct {
  int toantu;
} stack[MAX];

void push (int tt)
{
  if (top < MAX-1)
    stack[++top].toantu = tt;
}

int isempty()
{
  return top == -1;
}

int pop (int *tt)
{
  if (!isempty())
  {
    *tt = stack[top--].toantu;
    return 1;
  }
  return 0;
}

int get (int *tt)
{
  if (!isempty())
  {
    *tt = stack[top].toantu;
    return 1;
  }
  return 0;
}

void xet(int tt)
{
  char chuoi[] = "+-*/";
  int uutien[] = {0,0,1,1,-1,-1};
  int toantu, done = 0, val;

  if (isempty())
    push(tt);
  else
  {
    do {
      if (get(&toantu))
      {
        if (uutien[tt] <= uutien[toantu])
        {
          pop(&toantu);
          printf("%c ", chuoi[toantu]);
        }
        else
        {
          push(tt);
          done = 1;
        }
      }
      else
      {
        done = 1;
        push(tt);
      }
    } while (!done);
  }
}

void in_hauto(char *expr)
{
  int len, i=0, ttu, done;
  char c, chuoi[]="+-*/";
  top = -1;
  len = strlen(expr);
  do {
    c = expr[i++];
    while (c == ' ' && i < len-1)
      c = expr[i++];
    switch (c)
    {
      case '0' :
      case '1' :
      case '2' :
      case '3' :
      case '4' :
      case '5' :
      case '6' :
      case '7' :
      case '8' :
      case '9' : printf("%c ", c); break;
      case '+' : xet(PLUS); break;
      case '-' : xet(MINUS); break;
      case '*' : xet(MULTIPLE); break;
      case '/' : xet(DIVIDE); break;
      case '(' : push(LPAREN); break;
      case ')' : done = 0;
                do {
                  if (isempty())
                  {
                    done = 1;
                    printf("\n\nError\n");
                  }
                  else
                  {
                    pop(&ttu);
                    if (ttu != LPAREN)
                      printf("%c ", chuoi[ttu]);
                    else
                      done = 1;
                  }
                } while (!done);
                break;
    }
  } while (i <  len);
  while (!isempty())
  {
    pop(&ttu);
    printf("%c ", chuoi[ttu]);
  }
}
Code:
/*Bai tap:chuong trinh tinh gia tri bieu thuc khi cho bieu thuc dang hau to*/
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX 100
#include "trungto.cpp"
typedef char ElementType;
typedef struct
{
    ElementType Element[MAX];
    int Top_idx; 
}Stack;


/*khoi tao ngan xep */
void MakeNull_Stack(Stack *S)
{
    (*S).Top_idx=MAX;
}

//kiem tra ngan xep rong
ElementType Empty_Stack(Stack S)
{
    return S.Top_idx==MAX;
}

//kiem tra nga xep day
ElementType Full_Stack(Stack S)
{
    return S.Top_idx==0;
}

//them mot phan tu vao ngan xep
void Push(ElementType X,Stack *S)
{
    if(Full_Stack(*S))
    printf("\nError :Ngan xep day");
    else
    {
        (*S).Top_idx=(*S).Top_idx-1;
        (*S).Element[(*S).Top_idx]=X;
    }
}

//tra ve phan tu dau ngan xep
ElementType Top(Stack S)
{
    if(!Empty_Stack(S))// printf("\nError :Ngan xep rong");
    //else
    //{
        return S.Element[S.Top_idx];
    //}
   
}

//xoa mot phan tu khoi ngan xep
void Pop(Stack *S)
{
    if(!Empty_Stack(*S)) //printf("\nError : Ngan xep rong");
    // else
    //{
          (*S).Top_idx=(*S).Top_idx+1;
    // }
}

//in
void Print_Stack(Stack S)
{
    for(int i=S.Top_idx;i<MAX;i++)
    printf("%d ",S.Element[i]);
}

ElementType GiaTri(char expr[],Stack S)
{
    MakeNull_Stack(&S);
    //if(Empty_Stack(S)) printf("\nError :Ngan xep rong");
//    else printf("tai sao");
    for(int i=0;i<strlen(expr);i++)
    {
      if(expr[i]>='0'&&expr[i]<='9')
      {Push(expr[i]-'0',&S); }
      else
      {
         
        int x=Top(S);
        Pop(&S);
        int y=Top(S);
        Pop(&S);
       
        if(expr[i]=='+') Push(y+x,&S);
        else if(expr[i]=='-') Push(y-x,&S);
        else if(expr[i]=='*') Push(y*x,&S);
        else if(expr[i]=='/') Push(y/x,&S);
      } 
    }
    return Top(S);
}
int main(){
  char expr[50];
  int done = 0;

//printf("\nChuong trinh in bieu thuc hau to tuong ung voi mot bieu thuc"
//        "trung to hop le"
//        "\nChu y :"
//        "\nCac toan hang chi tu 0 den 9"
//        "\nCac toan tu chi gom + - * / ( )\n");
  do {
    printf("\nNhap mot bieu thuc trung to : ");
    gets(expr);
    if (strlen(expr) > 0)
      in_hauto(expr);
    else
      done = 1;
  } while ( done);
       
  // char ch='0';
    Stack S;
    //char str[20];
    printf("\nBieu thuc trung to vua nhap la:" ); in_hauto(expr);
    printf("\nNhap lai bieu thuc trung to tren :" );
    gets(expr);
    //printf("%d",strlen(str));
    printf("\nKet Qua : %d",GiaTri(expr,S));
    GiaTri(expr,S);
    getch();
    return 0;
   
   
}
Về Đầu Trang Go down
Xem lý lịch thành viên
mapcao91
Thành viên mới
Thành viên mới
avatar

Tổng số bài gửi : 12
Join date : 28/02/2011

Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   Tue Apr 05, 2011 8:04 pm

các bạn ơi có ai biết hok?giúp mình với
Về Đầu Trang Go down
Xem lý lịch thành viên
mapcao91
Thành viên mới
Thành viên mới
avatar

Tổng số bài gửi : 12
Join date : 28/02/2011

Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   Thu Apr 07, 2011 8:59 am

co ai biet la xuat ket qua ra tung buoc sao hok?chi minh voi
Về Đầu Trang Go down
Xem lý lịch thành viên
gentle_storm
Thành viên tích cực
Thành viên tích cực
avatar

Tổng số bài gửi : 47
Join date : 03/01/2011

Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   Thu Apr 07, 2011 9:02 am

Bạn muốn xuất kết quả sao? Bạn nói rõ hơn được không?
Về Đầu Trang Go down
Xem lý lịch thành viên
mapcao91
Thành viên mới
Thành viên mới
avatar

Tổng số bài gửi : 12
Join date : 28/02/2011

Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   Thu Apr 07, 2011 6:56 pm

tức là khi mình thêm dấu '= tên biến' vào bên phải xong ui thì xuất kết quả ra từng bước.
vd:9-1+4*2+3/1=x
9-1+8+3/1=x
9-1+8+3=x
8+8+3=x
16+3=x
19=x
Về Đầu Trang Go down
Xem lý lịch thành viên
gentle_storm
Thành viên tích cực
Thành viên tích cực
avatar

Tổng số bài gửi : 47
Join date : 03/01/2011

Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   Thu Apr 07, 2011 8:34 pm

Mình gợi ý bạn thế này nhé, giờ mình cũng không rảnh để code dùm bạn(sắp thi rồi) Smile
mình in ra từng dòng, thay vi phải chuyển chuổi expr lại trung tố thì sao khi nhập xong bạn tạo thêm một mảng bandau[50] chẳng hạn. Sau đó gán bandau[i]=expr[i]. Vậy là bạn giữ lại được mảng ban đầu nhập vào, rồi viết thêm hàm in ra từng dòng, chẳng hạn inTungDong(char*) với tham số là mảng bandau.
Bạn có thể tham khảo code trong chủ để này để in ra từng dòng cho một biểu thức: [You must be registered and logged in to see this link.]

Chúc bạn thành công!
Về Đầu Trang Go down
Xem lý lịch thành viên
mapcao91
Thành viên mới
Thành viên mới
avatar

Tổng số bài gửi : 12
Join date : 28/02/2011

Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   Sat Apr 09, 2011 3:42 pm

bạn ơi,bạn có thể bỏ ra tí thời gian code jum mình hok?sao minh làm nó bị lỗi ùi.cảm ơn bạn rất nhiều
Về Đầu Trang Go down
Xem lý lịch thành viên
Sponsored content




Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   

Về Đầu Trang Go down
 
nl 1 giai phương trình bằng stack
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Tìm hiểu về "Tứ sát” và cách hóa giải
» Vô hình ...
» Cái Mép - Thị Vải: Đầu mối trung chuyển hàng hóa của khu vực?
» ARPA- Automatic Radar Plotting Aids
» Cần giúp đỡ về hiện tương hút nhau giữa hai tàu

Permissions in this forum:Bạn không có quyền trả lời bài viết
Câu lạc bộ Hỗ Trợ Học Tập :: NIÊN LUẬN - TIỂU LUẬN - LUẬN VĂN TỐT NGHIỆP :: NIÊN LUẬN :: >>NIÊN LUẬN 1-
Chuyển đến