Câu lạc bộ Hỗ Trợ Học Tập
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.



 
Trang ChínhTrang Chính  Latest imagesLatest images  Tìm kiếmTìm kiế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)

 

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

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


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

nl 1 giai phương trình bằng stack Empty
Bài gửiTiêu đề: nl 1 giai phương trình bằng stack   nl 1 giai phương trình bằng stack EmptyMon 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
mapcao91
Thành viên mới
Thành viên mới
mapcao91


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

nl 1 giai phương trình bằng stack Empty
Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   nl 1 giai phương trình bằng stack EmptyTue 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
mapcao91
Thành viên mới
Thành viên mới
mapcao91


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

nl 1 giai phương trình bằng stack Empty
Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   nl 1 giai phương trình bằng stack EmptyThu 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
gentle_storm
Thành viên tích cực
Thành viên tích cực
gentle_storm


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

nl 1 giai phương trình bằng stack Empty
Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   nl 1 giai phương trình bằng stack EmptyThu 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
mapcao91
Thành viên mới
Thành viên mới
mapcao91


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

nl 1 giai phương trình bằng stack Empty
Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   nl 1 giai phương trình bằng stack EmptyThu 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
gentle_storm
Thành viên tích cực
Thành viên tích cực
gentle_storm


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

nl 1 giai phương trình bằng stack Empty
Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   nl 1 giai phương trình bằng stack EmptyThu 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
mapcao91
Thành viên mới
Thành viên mới
mapcao91


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

nl 1 giai phương trình bằng stack Empty
Bài gửiTiêu đề: Re: nl 1 giai phương trình bằng stack   nl 1 giai phương trình bằng stack EmptySat 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
Sponsored content





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

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
-
» Chương trình giải hệ phương trình tuyến tính bằng phương pháp Crammer.
» giai phương trình
» Giải hệ phương trình tuyến tính
» nien luan1 giai phuong trinh
» Chương trình nén và giải nén tập tin văn bản txt bằng thuật toán Huffman.

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