TH0601
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.
TH0601

TH0601 - IT Department - Huflit
 
Trang ChínhPortalliTìm kiếmLatest imagesĐăng kýĐăng Nhập

 

 Stack - Làm sao làm A+B-C -> ABC+-

Go down 
+4
Anna
Eagles
golderos1026
strongest manits
8 posters
Tác giảThông điệp
strongest manits
Quản Trị Viên
Quản Trị Viên
strongest manits


Tổng số bài gửi : 186
Age : 35
Registration date : 07/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeThu 18 Oct 2007, 6:07 pm

Ai làm được cái bài A+B-C -> ABC+- chỉ giúp mình với. Mình đuối ngang giữa chừng gòi
Về Đầu Trang Go down
golderos1026
Người Nhà
Người Nhà
golderos1026


Tổng số bài gửi : 95
Registration date : 13/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeFri 19 Oct 2007, 1:28 pm

chu hoi may cai nay la thua roi chu oi vao dien dan tin hoc ma hoi di
Về Đầu Trang Go down
strongest manits
Quản Trị Viên
Quản Trị Viên
strongest manits


Tổng số bài gửi : 186
Age : 35
Registration date : 07/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeFri 19 Oct 2007, 5:58 pm

sax lap cai box nay ra chi vay chu ha ???
Về Đầu Trang Go down
Eagles
Bạn Bè
Bạn Bè
Eagles


Tổng số bài gửi : 28
Registration date : 13/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeSat 20 Oct 2007, 2:20 pm

chài đất ơi tao khuyên mài tốt nhất nên post source lên đây luôn đê mọi nguời củng giải quyết,à chúng tao nên dụ nhửng trùm về lập trình và đây làm mod,nghe đồn qua năm 2 nhiều thằng ngu hẳn đi,chúng ta nên dụ thằng An- Dủng vào làm mod để có gì chỉ anh em làm bài nữa chứ
Về Đầu Trang Go down
strongest manits
Quản Trị Viên
Quản Trị Viên
strongest manits


Tổng số bài gửi : 186
Age : 35
Registration date : 07/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeSat 20 Oct 2007, 5:18 pm

tui no chiu vao tao moi so !!!
Về Đầu Trang Go down
golderos1026
Người Nhà
Người Nhà
golderos1026


Tổng số bài gửi : 95
Registration date : 13/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeThu 25 Oct 2007, 1:32 pm

.....................


Được sửa bởi golderos1026 ngày Sun 11 Sep 2011, 3:39 pm; sửa lần 1.
Về Đầu Trang Go down
Anna
Nhóc Tì
Nhóc Tì
Anna


Tổng số bài gửi : 8
Age : 37
Registration date : 01/11/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeSat 03 Nov 2007, 10:48 pm

hả? cái topic mở ra & dừng lại chỉ có dzị thôi sao? hok thu thập đc tài kiệu j hít, bùn!
Á, mà u Nhật nói đúng í, khó mà mí người đó chịu dzô chỉ giúp, để nghĩ xem lên trời còn dễ hơn!
Về Đầu Trang Go down
strongest manits
Quản Trị Viên
Quản Trị Viên
strongest manits


Tổng số bài gửi : 186
Age : 35
Registration date : 07/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeTue 06 Nov 2007, 8:25 am

ha'ha' cai chu~ ky' cua nam' lun` vui nhi?
Về Đầu Trang Go down
whynothack
Nhóc Tì
Nhóc Tì



Tổng số bài gửi : 3
Registration date : 17/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeSat 10 Nov 2007, 4:51 pm

Wa cac ban cai nhau nhu cho voi meo ay!!!
Về Đầu Trang Go down
Love C++
Nhóc Tì
Nhóc Tì



Tổng số bài gửi : 2
Age : 35
Registration date : 10/11/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeSat 10 Nov 2007, 5:59 pm

Giải thuật:
1/ Tạo chuỗi kq để lưu kết quả lại
2/ Lấy chiều dài chuỗi gốc.
3/ Duyệt chuỗi gốc từ trái qua phải
- Nếu gặp toán hạng thì đưa vào chuỗi kết quả.
- Nếu gặp dấu ngoặc mở thì đưa vào Stack.
- Nếu gặp toán tử thì thực hiện 2 động tác sau:
+ Trong khi Stack chưa rỗng, nếu độ ưu tiên của toán tử đang xét (Current) lớn hơn toán tử ở trong Stack (InStacck) thì Pop cái ở trong Stack ra (Ko thì thôi)
+ Push toán tử này (Current) vào Stack.
/*Vd:
- Trong Stack đang chứa +, và bạn đang xét là * thì phải Pop dấu + ra rồi mới Push dấu * vào.
- Nếu trong stack là dấu *, và bạn đang xét là dấu + thì bước này bỏ qua và tiếp tục với bước thứ 2 là Push dấu + vào. */
- Nếu gặp ngoặc đóng thì Pop toàn bộ toán tử trong Stack ra cho đến khi gặp dấu ngoặc mở.
4/ Lấy toàn bộ toán tử còn lại trong Stack ra.
5/ Gán kí tự kết thúc cho chuỗi kq
6/ Trả về chuỗi kq

Cài đặt: Có 2 cách
- Class TAStack - dùng mảng (Array) để biểu diễn, thường dùng để cài đặt trược tiếp luôn.
- Class TStack - dùng danh sách liên kết đơn (Single Linked List) để biểu diễn, thường phải cài đặt thành 1 class hoàn chỉnh rồi mới include thư viện vô xài.

Code: Xem bài viết dưới
Lưu ý rằng các toán hạng ở đây chỉ giới hạn từ 0-9 thôi, ai nhập 12 hay 13 vô thì tìm đỏ con mắt cũng ko ra lỗi đâu.

Key Word: Để tìm kiếm thêm tư liệu về bài này
T.Anh: Infix To Postfix Notation
T.Việt: Ký pháp nghịch đảo Ba Lan
Ai rành tiếng Anh có thể xem sách CTDL của thầy Ngân phần Stack có mã giả của bài này đó.

Good Luck!


Được sửa bởi ngày Tue 13 Nov 2007, 4:34 pm; sửa lần 1.
Về Đầu Trang Go down
strongest manits
Quản Trị Viên
Quản Trị Viên
strongest manits


Tổng số bài gửi : 186
Age : 35
Registration date : 07/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeSat 10 Nov 2007, 7:26 pm

ui that la` cam on ban wa ! diem danh di ban nhe'
Về Đầu Trang Go down
Love C++
Nhóc Tì
Nhóc Tì



Tổng số bài gửi : 2
Age : 35
Registration date : 10/11/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeTue 13 Nov 2007, 4:22 pm

Bài ở trên còn thiếu 1 bước cuối cùng là Pop toàn bộ những gì còn lại trong Stack ra. Bạn xem lại bài mình sửa. Như đã hứa mình cũng Post lại bài Stack hoàn chỉnh lên luôn.

==== File TASTack.h =====
#if !defined(_TASTACK_H_)
#define _TASTACK_H_

#include <memory.h>

template <class TYPE>
class TAStack
{
public: //INTERFACE OF TASTACK CLASS
TAStack(int Capacity=128, int GrowBy=64);
TAStack(const TAStack<TYPE>& souStack); //Copy Constructor
virtual ~TAStack();
void Empty();
bool IsFull();
bool IsEmpty();
bool Push(const TYPE& info);
bool Pop();
TYPE Top();
TAStack<TYPE> operator = (const TAStack<TYPE>& souStack);
void InPut();
void OutPut();
friend TAStack<TYPE> Merge(const TAStack<TYPE>& souStack1,
const TAStack<TYPE>& souStack2); //Tron 2 Stack lai
protected:
TYPE* m_pData;
int m_Top;
int m_Capacity;
int m_GrowBy;
};

template <class TYPE>
TAStack<TYPE>::TAStack(int Capacity, int GrowBy)
{
m_Top = -1;
m_Capacity = Capacity;
m_GrowBy = GrowBy;
m_pData = new TYPE [m_Capacity];
}

template <class TYPE>
TAStack<TYPE>::TAStack(const TAStack<TYPE>& souStack)
{
m_Top = souStack.m_Top;
m_Capacity = souStack.m_Capacity;
m_GrowBy = souStack.m_GrowBy;
m_pData = new TYPE [m_Capacity];
memcpy(m_pData,souStack.m_pData,(m_Top+1)*sizeof(TYPE));
}

template <class TYPE>
TAStack<TYPE>::~TAStack()
{
if(m_pData)
delete [] m_pData;
}

template <class TYPE>
void TAStack<TYPE>::Empty()
{
m_Top = -1;
}

template <class TYPE>
bool TAStack<TYPE>::IsFull()
{
return m_Top == m_Capacity-1;
}

template <class TYPE>
bool TAStack<TYPE>::IsEmpty()
{
return m_Top == -1;
}

template <class TYPE>
bool TAStack<TYPE>::Push(const TYPE& info)
{
if(IsFull())
{
int NewSize = m_Capacity + m_GrowBy;
TYPE* pTemp = new TYPE [NewSize];
memcpy(pTemp,m_pData,m_Capacity*sizeof(TYPE));
delete [] m_pData;
m_pData = pTemp;
m_Capacity = NewSize;
}
m_pData[++m_Top] = info;
return true;
}

template <class TYPE>
bool TAStack<TYPE>::Pop()
{
if(IsEmpty())
return false;
m_Top--;
return true;
}

template <class TYPE>
TYPE TAStack<TYPE>::Top()
{
return m_pData[m_Top];
}

template <class TYPE>
void TAStack<TYPE>::OutPut()
{
while(!IsEmpty())
{
cout<<Top() <<" ";
Pop();
}
cout<<endl;
}

template <class TYPE>
void TAStack<TYPE>::InPut()
{
cout<<"(Nhap -1 de ket thuc)" <<endl;
TYPE x;
while(x!=-1)
{
cin>>x;
Push(x);
}
Pop();
}

template <class TYPE>
TAStack<TYPE> Merge(const TAStack<TYPE>& souStack1,
const TAStack<TYPE>& souStack2)
{
TAStack<TYPE> mergeStack(souStack1);
int newpos = mergeStack.m_Top+1;
memcpy(mergeStack.m_pData + newpos,
souStack2.m_pData,(souStack2.m_Top+1)*sizeof(TYPE));
mergeStack.m_Top += souStack2.m_Top + 1;
return mergeStack;
}

template <class TYPE>
TAStack<TYPE> TAStack<TYPE>::operator = (const TAStack<TYPE>& souStack)
{
m_Top = souStack.m_Top;
m_Capacity = souStack.m_Capacity;
m_GrowBy = souStack.m_GrowBy;
delete [] m_pData;
m_pData = new TYPE [m_Capacity];
memcpy(m_pData,souStack.m_pData,(m_Top+1)*sizeof(TYPE));
return *this;
}

#endif
=============================

===== File InFixToPostFix =====
/* CHUYEN BIEU THUC DANG TRUNG TO SANG HAU TO
(Ky phap nghich dao Ba Lan)
Nhap: ((1+2)*7-(5+7)/2)
-> 12+7*57+2/-
*/

#include <iostream.h>
#include <string.h>
#include <ctype.h>
#include "TAStack.h"
#include "TStack.h"

int UuTien(char toantu);
char* InfixToPostfix(char *str);

int main()
{
char *str="(1+2)*7-(5+7)/2";
cout<<"Trung to: " <<str <<endl;
cout<<"Hau to: " <<InfixToPostfix(str) <<endl;
return 0;
}

int UuTien(char toantu)
{
int ut;
switch(toantu)
{
case '+': ut=0; break;
case '-': ut=0; break;
case '*': ut=1; break;
case '/': ut=1; break;
}
return ut;
}

char* InfixToPostfix(char *str)
{
TAStack<char> stack;
int len=strlen(str);
char *strKQ= new char [len+1];
int j=0;
for(int i=0;i<len;i++)
{
if(isdigit(str[i]))//Gap toan hang ghi vao chuoi kq
strKQ[j++]=str[i];
else if(str[i]=='(') //Neu gap dau mo ngoac
stack.Push(str[i]); //Dua no vao ngan xep
else if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')
//Neu gap 1 toan tu
{
if(UuTien(str[i])<=UuTien(stack.Top()))
{
strKQ[j++]=stack.Top();
stack.Pop();
}
stack.Push(str[i]);
}
else if(str[i]==')')//Neu gap dau dong ngoac
{
while(stack.Top()!='(')
{
strKQ[j++]=stack.Top();
stack.Pop();
}
stack.Pop(); //Pop dau ngoac mo ra
}
}
while(!stack.IsEmpty())
//Lay cac toan tu con lai ra khoi ngan xep
{
strKQ[j++]=stack.Top();
stack.Pop();
}
strKQ[j]='\0';
return strKQ;
}

======================================
Để biên dịch chạy CT bạn tạo ra 1 Project mới, Add 2 file này vào rồi nhấn Ctrl + F5.
Lưu ý là class Stack này xây dựng bằng mảng động, khi sức chứa bị vượt nó có khả năng nới rộng ra chứ không cứng nhắc như mảng thông thường. Sự khác biệt đó thể hiện ở Hàm Push, kích thước nới mỗi lần là GrowBy do người sử dụng đưa vào. Nếu ai có hứng thú với các Class Container mình sẽ gửi tài liệu tham khảo.
Về Đầu Trang Go down
strongest manits
Quản Trị Viên
Quản Trị Viên
strongest manits


Tổng số bài gửi : 186
Age : 35
Registration date : 07/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeTue 13 Nov 2007, 9:36 pm

Thay mat moi nguoi` xin cam on dong' gop cua ban. Hy vong ban se tiep tuc giai dap thac mac cho ban be`
Về Đầu Trang Go down
Kennyta
Bạn Bè
Bạn Bè
Kennyta


Tổng số bài gửi : 19
Age : 35
Registration date : 21/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeSat 24 Nov 2007, 4:08 pm

Khanh Nhat Khoai rui` ha~ .hahaha.Sao ko tu la`m de ma` toan nho` va~ ban be` ko a`
Về Đầu Trang Go down
http://dienanh.net
golderos1026
Người Nhà
Người Nhà
golderos1026


Tổng số bài gửi : 95
Registration date : 13/10/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeSun 25 Nov 2007, 11:08 am

love c++ la ai ma pro wa dza........nguong mo wa di ah
Về Đầu Trang Go down
Jimmy Valentine
Quyền Lực Tối Cao
Quyền Lực Tối Cao
Jimmy Valentine


Tổng số bài gửi : 101
Age : 35
Registration date : 29/09/2007

Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitimeTue 04 Dec 2007, 2:41 pm

tưởng chưa có ai reply, J có source bài này nè!
Về Đầu Trang Go down
http://360.yahoo.com/Mr.7immy
Sponsored content





Stack - Làm sao làm A+B-C -> ABC+- Empty
Bài gửiTiêu đề: Re: Stack - Làm sao làm A+B-C -> ABC+-   Stack - Làm sao làm A+B-C -> ABC+- Icon_minitime

Về Đầu Trang Go down
 
Stack - Làm sao làm A+B-C -> ABC+-
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
TH0601 :: Huflit Đại Học Đường :: Lập Trình - Từ A -> Z-
Chuyển đến