When we control the event,we control your lives
 
Trang ChínhTrợ giúpTìm kiếmThành viênNhómĐăng kýĐăng Nhập
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Latest topics
» Tô màu theo vùng quét
Tue Aug 13, 2013 4:18 pm by minhlap

» authentischen Hermes Lindy Taschen
Wed Jan 23, 2013 11:15 am by cangliang

» Hermes Bag
Wed Jan 23, 2013 11:14 am by cangliang

» Hermes Evelyn pm
Wed Jan 23, 2013 11:13 am by cangliang

» Hermes Kelly bag billig
Mon Jan 21, 2013 8:57 am by cangliang

» Hermes Constance Bag
Mon Jan 21, 2013 8:56 am by cangliang

» Discout Hermes Belt
Mon Jan 21, 2013 8:55 am by cangliang

» Christian Louboutin Love Flats
Tue Jan 15, 2013 12:25 pm by cangliang

» Christian Louboutin Love Flats
Tue Jan 15, 2013 12:25 pm by cangliang

Navigation
 Portal
 Diễn Đàn
 Thành viên
 Lý lịch
 Trợ giúp
 Tìm kiếm
May 2018
MonTueWedThuFriSatSun
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendarCalendar
Diễn Đàn
Affiliates
free forum


Share | 
 

 Bài Ký pháp nghịch đảo Balan cài đặt bằng OOP

Go down 
Tác giảThông điệp
minhlapb
Thành viên bậc 2
Thành viên bậc 2


Tổng số bài gửi : 32
Points : 90
Reputation : 2
Join date : 22/07/2009

Bài gửiTiêu đề: Bài Ký pháp nghịch đảo Balan cài đặt bằng OOP   Sun Aug 09, 2009 12:47 pm

Đây là bài ký pháp nghịch đảo Balan được viết bằng OOP

Code:

//Kí phap nghich dao ba lan
#include <iomanip.h>
#include <string.h>
#include <iostream.h>
#include <stdlib.h>

typedef char Elem[10];

#define M 100

//Stack
class Stack
{   private:
      int KichThuoc;
      int Top;
      Elem *Data;
   public:
      Stack(int);
      ~Stack();
      int StackRong();
      int StackDay();
      void Push(Elem);
      void Pop(Elem &);
      void Nhap(int &);
      void DuyetStack(int);
      //-------------KHai bao ham hau to---------------
      void Tach(char bt[], Elem tp[], int &n);
      int Dut(char pt);
      void RPN(Elem tp[], int n, Elem rpn[], int &k, int &Error);
      int TinhToan(int x, int y, char pt);
      int DanhGia(Elem rpn[], int k, int &Error);
};

Stack::Stack(int KichThuoc)
{   Top = -1;
   this->KichThuoc = KichThuoc;
   Data = new Elem[this->KichThuoc];
}

Stack::~Stack()
{   delete []Data;
}

int Stack::StackRong()
{   return Top == -1;
}

int Stack::StackDay()
{   return Top == (this->KichThuoc) - 1;
}

void Stack::Push(Elem x)
{   if(StackDay())
   {   cout<<"Stack day";
      exit(0);
   }
   else
   {   Top++;
      memcpy(this->Data[this->Top],x,sizeof(Elem));
   }
}

void Stack::Pop(Elem &x)
{   if(StackRong())
   {   cout<<"Stack rong";
      exit(0);
   }
   else
      memcpy(x, this->Data[this->Top--],sizeof(Elem));
}

void Stack::DuyetStack(int k)
{   int i;
   Elem x;
   for(i=0; i<k; i++)
   {   this->Pop(x);
      cout<<x<<endl;
   }
}

void Stack::Nhap(int &n)
{   do
   {   cout<<"Nhap so phan tu:";
      cin>>n;
   }while(n<0);
   cin.ignore();
   Elem x;
   for(int i=0; i<n; i++)
   {   cout<<"Nhap x["<<i<<"] :";
      cin.getline(x,10);
      this->Push(x);
   }
}
//---------------Ham su ly hau to--------------
void Stack::Tach(char bt[], Elem tp[], int &n)
{   Elem tmp;
   int j,i=0,l=strlen(bt);
   n=0;
   while(i<l)
   {   j=0;
      while (i<l && !strchr("+-*/()",bt[i])) tmp[j++]=bt[i++];
      tmp[j]='\0';
      if (tmp[0])   strcpy(tp[n++],tmp);
      while (i<l && bt[i]==' ')   i++;
      if (i<l && strchr("+-*/()",bt[i]))
      {   tp[n][0]=bt[i++];
         tp[n++][1]='\0';
      }
   }
}

int Stack::Dut (char pt)
{   switch(pt)
   {   case '(': return 0;
      case '+': case '-': return 1;
      case '*': case '/': return 3;
   }
   return 0;
}

void Stack::RPN (Elem tp[], int n, Elem rpn[], int &k, int &Error)
{   int i,stop;
//   Stack s;
   Elem pt;
//   CreateStack(s);
   k=i=0;
   Error=0;
   while (i<n && !Error)
   {   switch (tp[i][0])
      {   case '(': Push(tp[i]);break;
         case ')':
            do
            {   if (StackRong())   Error=1;
               else
               {   Pop(pt);
                  if (pt[0]!='(')   strcpy(rpn[k++],pt);
               }
            }while (pt[0]!='(' && !Error);break;
         case '+': case '-': case '*': case '/': stop=0;
            while (!stop && !StackRong())
            {   Pop(pt);
               if (Dut(tp[i][0])>Dut(pt[0]))
               {   Push(pt);
                  stop=1;
               }
               else   strcpy(rpn[k++],pt);
            }
            Push(tp[i]);break;
         default: strcpy(rpn[k++],tp[i]);
      }
      i++;
   }
   while (!StackRong() && !Error)
   {   Pop(pt);
      if (pt[0]!='(')   strcpy(rpn[k++],pt);
      else   Error=1;
   }
}

int Stack::TinhToan(int x,int y,char pt)
{   switch(pt)
   {   case '+': return x+y;
      case '-': return x-y;
      case '*': return x*y;
      case '/': return x/y;
   }
   return 0;
}
int Stack::DanhGia(Elem rpn[],int k,int &Error)
{   Elem x,y;
//   Stack s(100);
   int i=0,ix,iy;

   while(i<k && !Error)
   {   if(strchr("+-*/",rpn[i][0]))
      {   if(!StackRong())
         {   Pop(x);
            ix=atoi(x);
            if(!StackRong())
            {   Pop(y);
               iy=atoi(y);
               ix=TinhToan(iy,ix,rpn[i][0]);
               itoa(ix,x,10);
               Push(x);
            }
            else   Error=1;
         }
         else   Error=1;
      }
      else   Push(rpn[i]);
      i++;   
   }   
   if(!Error)
   {   Pop(x);
      ix=atoi(x);
      if(!StackRong())   Error=1;
      else   return ix;
   }
   return 0;
}

void main()
{   int n;
   Stack a(9);
   a.StackRong();
   char bt[80];
   Elem tp[20],rpn[20];
   int i,k,Error;
   cin.getline(bt,80);
   a.Tach(bt,tp,n);
   cout<<"Tach bieu thuc trung to :"<<endl;
   for(i=0;i<n;i++)   cout<<tp[i]<<"    ";
   cout<<endl;
   a.RPN(tp,n,rpn,k,Error);
   if(!Error)
   {   cout<<"Bieu thuc hau to :"<<endl;
      for(i=0;i<k;i++)   cout<<rpn[i]<<" ";
      cout<<endl;
   }
   else   cout<<"\nDoi hau to Error !\n";
   n=a.DanhGia(rpn,k,Error);
   if(!Error)   cout<<"\nKet qua :"<<n<<endl;
   else   cout<<"nKet qua : Error !\n";
}
Về Đầu Trang Go down
Xem lý lịch thành viên
 
Bài Ký pháp nghịch đảo Balan cài đặt bằng OOP
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» bán đất khu công nghiệp ngọc hồi,bán đất ngọc hồi đống đa
» Bán 1 lô đất 70m2 tại Khu Công Nghiệp Tân Bình.
» Đất bán dự án công nghiệp sài gòn IPD Quận 2
» Cần bán đất nông nghiệp
» CHẾ ĐỘ KẾ TOÁN HÀNH CHÍNH SỰ NGHIỆP 2015 mới nhất

Permissions in this forum:Bạn không có quyền trả lời bài viết
minhlap.allgoo.us :: Lập trình :: Lập Trình Hướng Đối Tượng,Đồ Họa OpenGL C, C++-
Chuyển đến