FAQ |
Calendar |
![]() |
|
Programming Share, tanya jawab, saling bantu antar programmer dengan berbagai macam bahasa pemrograman. |
![]() |
|
Thread Tools |
#1
|
|||
|
|||
![]()
gan ane kan dikasih tugas struktur data buat bikin program ngerubah statement infix jadi postfix... detailnya gini : Quote:
nah langkah 1 sampe 2 udah beres gan... ini source code-nya : Code: #include #include #define MAX 10 #define Kosong -1 struct stack { char data[MAX]; int top; }; int cekKosong(struct stack *s); void KosongkanStack(struct stack* s); void push(struct stack* s,int item); char pop(struct stack* s); void tampil(struct stack s); int cekOperator(char e); int cekPrioritas(char e); void konversi(char* infix, char* postfix, int spasi); int main() { char infix[50],postfix[50]; strcpy(&postfix[50],""); printf("Masukan Statement Hitungan : "); fflush(stdin); gets(infix); konversi(&infix[0],&postfix[0],1); printf("Bentuk Postfix dari Statement Hitungan diatas adalah : %s\n",&postfix[0]); getch(); return 0; } //fungsi untuk mengecek kosong atau tidaknya stack int cekKosong(struct stack *s) { if(s->top == Kosong) return 1; else return 0; } // fungsi untuk mengosongkan stack void KosongkanStack(struct stack* s) { s->top=Kosong; } // fungsi untuk memasukan data ke stack void push(struct stack* s,int item) { if(s->top == (MAX-1)) // jika topnya ke max - 1, berarti stack penuh { printf("\nStack Penuh, silakan pop atau hapus stack"); } else //jika tidak { ++s->top; // naikan stack s, lalu pindahkan topnya s->data[s->top]=item; // list data dari top diisi dari item } } char pop(struct stack* s) { char ret=(char)Kosong; // inisialisasi variabel ret = 0 jadi char if(!cekKosong(s)) // mengecek kosong atau tidak, bila tidak ? { ret= s->data[s->top]; //tempatkan ret pada list s di posisi top --s->top; // lalu mundurkan list s satu list dan jadikan top // ini berarti ret berada di list paling belakang } return ret; // keluarkan si ret } void tampil(struct stack s) { while(s.top != Kosong) // selama s gak kosong { printf("\n%d",s.data[s.top]); // tampilkan data list s pada posisi top s.top--; // mundurkan list ke posisi sebelumnya } } // fungsi untuk mengecek operator int cekOperator(char e) { if(e == '+' || e == '-' || e == '*' || e == '/' || e == '^') { return 1; // jika operatornya + , - , * , / , ^(pangkat) , berarti OK } else { return 0; } } // fungsi untuk mengecek prioritas suatu operator int cekPrioritas(char e) { int pri = 0; // inisialisasi nilai variabel pri if (e == '^') pri = 3; // jika terdapat tanda pangkat (^), dia menjadi prioritas no wahid else { if(e == '*' || e == '/') pri = 2; // jika * atau / maka jadi prioritas ke 2 else { if(e == '+' || e == '-') pri = 1; // jika + atau - jadi prioritas ke 3 } } return pri; // ngeluarin nilai variabel prioritas } // Fungsi proses konversinya void konversi(char* infix, char* postfix, int spasi) { char *i,*p; struct stack X; char n1; int j; KosongkanStack(&X); i = &infix[0]; p = &postfix[0]; j=0; cekOperator(*i); while(*i) { while(*i == ' ' || *i == '\t') // melewatkan spasi dan tab { i++; } if( isdigit(*i) || isalpha(*i) ) { while( isdigit(*i) || isalpha(*i)) { *p = *i; p++; i++; } /*SPACE CODE*/ if(spasi) { *p = ' '; p++; } /*END SPACE CODE*/ } if( *i == '(' ) { push(&X,*i); i++; } if( *i == ')') { n1 = pop(&X); while( n1 != '(' ) { *p = n1; p++; /*SPACE CODE*/ if(spasi) { *p = ' '; p++; } /*END SPACE CODE*/ n1 = pop(&X); } i++; } if( cekOperator(*i)) { if(cekKosong(&X)) push(&X,*i); else { n1 = pop(&X); while(cekPrioritas(n1) >= cekPrioritas(*i)) { *p = n1; p++; /*SPACE CODE*/ if(spasi) { *p = ' '; p++; } /*END SPACE CODE*/ n1 = pop(&X); } push(&X,n1); push(&X,*i); } i++; } } while(!cekKosong(&X)) { n1 = pop(&X); *p = n1; p++; /*SPACE CODE*/ if(spasi) { *p = ' '; p++; } /*END SPACE CODE*/ } *p = ''; } ane mohon bantuannya buat yg nomor 3 sama 4-nya dong gan ![]() ![]() ntar ane kasih 2 ![]() Terkait:
|
![]() |
Thread Tools | |
|
|