Diễn đa`n của CĐTH07A
 
IndexPortalTrợ giúpTìm kiếmThành viênNhómĐăng kýĐăng Nhập

Share | 
 

 Thuật toán Baln ngược:

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
seven_14104
VIP
VIP


Tổng số bài gửi : 25
Join date : 16/05/2008
Age : 27

Bài gửiTiêu đề: Thuật toán Baln ngược:   Sun May 18, 2008 7:16 pm

bài tập ôg thầy ra đêyExclamation Very Happy mấy ku debug lại rùi cùng nhau... nộp ^^

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
//------------------------------------------------------------------------------
const int MAX_STRING_LEN = 256;
typedef char String[MAX_STRING_LEN + 1]; // Plus '\0' character
//------------------------------------------------------------------------------
void Input(String infix)
{
do
{
printf("Nhap bieu thuc cong tru nhan chia: ");
gets(infix);
} while (infix[0] == '\0');
// Remove spaces
int i, j = 0;
for (i = 0; infix[i] != '\0'; i++)
if (!isspace(infix[i]))
{
infix[j] = infix[i];
j++;
}
infix[j] = '\0';
}
//------------------------------------------------------------------------------
char isNumberChar(char k)
{
return (isdigit(k) || k == '.');
}
//------------------------------------------------------------------------------
char isOperator(char k)
{
return (k == '*' || k == '/' || k == '+' || k == '-');
}
//------------------------------------------------------------------------------
char isLargerOrSame(char x, char y)
{
return (x == '*' || x == '/' || y == '+' || y == '-');
}
//------------------------------------------------------------------------------
void BuildPostfix(String postfix, String infix)
{
String stack;
int slen = 0; // Length of stack
int plen = 0; // Length of postfix
int i, j;

for (i = 0; infix[i] != '\0'; i++)
if (isNumberChar(infix[i]))
{
postfix[plen] = infix[i];
plen++;
}
else if (infix[i] == ')')
{
for (j = slen - 1; (j >= 0) && (stack[j] != '('); j--)
{
postfix[plen] = stack[j];
plen++;
}
slen = j;
}
else
{
if (isOperator(infix[i]))
{
while (slen > 0
&& stack[slen - 1] != '('
&& isLargerOrSame(stack[slen - 1], infix[i]))
{
slen--;
postfix[plen] = stack[slen];
plen++;
}
postfix[plen] = ' ';
plen++;
}
stack[slen] = infix[i];
slen++;
}
// Add all remaining
while (slen > 0)
{
postfix[plen] = stack[slen - 1];
slen--;
plen++;
}
postfix[plen] = '\0';
}
//------------------------------------------------------------------------------
double GetResult(String postfix)
{
double stack[MAX_STRING_LEN / 2];
int slen = 0;
int i, j;
for (i = 0; postfix[i] != '\0'; i++)
{
if (isNumberChar(postfix[i]) && !isNumberChar(postfix[i + 1]))
{
j = i;
while (j > 0 && isNumberChar(postfix[j - 1]))
j--;
sscanf(postfix + j, "%lf", &stack[slen]);
slen++;
}
else if (isOperator(postfix[i]))
{
slen--;
if (postfix[i] == '*')
stack[slen - 1] *= stack[slen];
else if (postfix[i] == '/')
stack[slen - 1] /= stack[slen];
else if (postfix[i] == '+')
stack[slen - 1] += stack[slen];
else if (postfix[i] == '-')
stack[slen - 1] -= stack[slen];
}
}
return stack[0];
}
//------------------------------------------------------------------------------
int main()
{
String infix, postfix;
Input(infix);
printf("Trung to: %s\n", infix);
BuildPostfix(postfix, infix);
printf("Hau to: %s\n", postfix);
printf("Ket qua: %lf", GetResult(postfix));
return EXIT_SUCCESS;
}

_________________
switch(pm me)
{
case (U R girl): U love me;
default : U R a fan of me;
}
YM!: seven_14104
Về Đầu Trang Go down
Xem lý lịch thành viên http://iamit.wordpress.com/
Admin
Admin
Admin


Tổng số bài gửi : 22
Join date : 15/05/2008
Age : 27

Bài gửiTiêu đề: Re: Thuật toán Baln ngược:   Mon May 19, 2008 9:29 am

công nhận mình giỏi thật! hâm mộ mình ghê Very Happy Laughing Wink cheers
Về Đầu Trang Go down
Xem lý lịch thành viên http://imit.tk/
iamkernel
Moderator
Moderator


Tổng số bài gửi : 81
Join date : 17/05/2008

Bài gửiTiêu đề: Re: Thuật toán Baln ngược:   Mon May 19, 2008 2:19 pm

Sax ... cái này cũng share nữa àh... DEL bi giờ nhá .. Chơi gian lận àh ...
(mình cũng fải copy rùi debug lại .. đi nộp thui monkey monkey

_________________
Kernel - That's everything i can do
Fone : 0908.155.005
Yahoo : phannhan0088@yahoo.com.vn (Y!M)
Gmail : phannhan0088@gmail.com
Home page : http://360.yahoo.com/phannhan0088 ; http://imkernel.worpress.com
Về Đầu Trang Go down
Xem lý lịch thành viên http://360.yahoo.com/phannhan0088
Sponsored content




Bài gửiTiêu đề: Re: Thuật toán Baln ngược:   Today at 5:20 am

Về Đầu Trang Go down
 
Thuật toán Baln ngược:
Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Cho thuê căn hộ cao cấp 88 Láng Hạ, Sky City Tower
» Cần thuê nhà trọ khu Kim ngưu, Vĩnh tuy, Lĩnh Nam
» Cho thuê chung cư Cao cấp Văn Khê,cực rẻ 4,5tr/tháng
» Cần cho thuê VP tầng 7 nhà Vinaconex 9, Phạm Hùng, Từ Liêm, Hà Nội
» Cho thuê nguyên căn số 62/111 Lý Chính Thắng P8 Q3

Permissions in this forum:Bạn không có quyền trả lời bài viết
imit :: Học tập - nghiên cứu :: Lập trình-
Chuyển đến