nebulafire
Tổng số bài gửi : 25 Join date : 06/02/2010 Age : 37
| Tiêu đề: Tính trị biểu thức hậu tố Mon Feb 22, 2010 6:45 pm | |
| Nếu muốn tính trung tố, tiền tố thì tương tự - Code:
-
#include <stdio.h> #include <stdlib.h> #include <conio.h>
#define MAXSTACK 100 #define TRUE 1 #define FALSE 0
struct stack{ int top; double nodes[MAXSTACK]; }; typedef struct stack STACK;
void init(STACK *ps){ ps->top = -1; }
int empty(STACK *ps){ return (ps->top==-1 ? TRUE : FALSE); }
void push(STACK *ps, int x){ if (ps->top == MAXSTACK -1) printf("\nStack bi day !"); else{ ps->nodes[++(ps->top)] = x; } }
double pop(STACK *ps){ if (empty(ps)) printf("\nStack bi rong !"); else return (ps->nodes[ps->top--]); return -1; }
int lakyso(char kytu){ return (kytu >= '0' && kytu <= '9'); }
double tinh(char toantu, double toanhang1, double toanhang2){ switch(toantu) { case '+': return(toanhang1 + toanhang2); case '-': return(toanhang1 - toanhang2); case '*': return(toanhang1 * toanhang2); case '/': return(toanhang1 / toanhang2); default:{ printf("Toan tu ko hop le"); exit(1);} }
return -1; }
double dinh_tri(char bt[]){ int c, vitri; double toanhang1, toanhang2, tri; STACK *ps; init(ps); for (vitri = 0;(c=bt[vitri])!='\0'; ++vitri){ if (lakyso(c)){ push(ps, (double)(c-'0')); } else{ toanhang2 = pop(ps); toanhang1 = pop(ps); tri = tinh(c,toanhang1,toanhang2); push(ps, tri); } }
return (pop(ps)); }
void main(){ char c, bt[MAXSTACK]; int vitri; clrscr(); vitri = 0; printf("Nhap bieu thuc hau to can dinh tri: "); while ((bt[vitri++] = getchar())!='\n'); bt[--vitri] = '\0'; printf("\nBieu thuc: %s = %5.2f",bt,dinh_tri(bt)); getch();
} | |
|