TUJUAN
Mahasiswa mampu menerapkan konsep stack untuk konversi Infix ke Postfix
Percobaan 1: Konversi Infix ke Postfix dengan Stack Array
Salin dan jalankan coding berikut ini kemudian beri komentar pada setiap baris coding.
#include <stdio.h> #include <conio.h> #define MAX 20 void push(char karakter); void pop(); int cek_prioritas(char simbol_operator); int indeks_i=0,indeks_p=0,indeks_s=0; int prioritas_lama=0,prioritas_baru; char infix[MAX],postfix[MAX],stack[MAX]; void main() { printf("Masukkan persamaan matematis infix tanpa kurung : "); gets(infix); printf("Hasil postfix dari persamaan tersebut adalah "); while(infix[indeks_i]!=NULL) { if(infix[indeks_i]=='+'||infix[indeks_i]=='-'|| infix[indeks_i]=='*'||infix[indeks_i]=='/') { push(infix[indeks_i]); } else { postfix[indeks_p]=infix[indeks_i]; indeks_p++; } indeks_i++; } int i=0; while(postfix[i]!=NULL) { printf("%c",postfix[i]); i++; } pop(); } void push(char karakter) { prioritas_baru=cek_prioritas(karakter); if(prioritas_lama<=prioritas_baru) { stack[indeks_s]=karakter; if(stack[indeks_s-1]==stack[indeks_s]) { postfix[indeks_s-1]=stack[indeks_s]; indeks_p++; stack[indeks_s-1]=stack[indeks_s]; stack[indeks_s]=NULL; } else { indeks_s++; } prioritas_lama=prioritas_baru; } else { stack[indeks_s]=karakter; postfix[indeks_p]=stack[indeks_s-1]; indeks_p++; stack[indeks_s-1]=stack[indeks_s]; stack[indeks_s]=NULL; } } void pop() { while(stack[indeks_s-1]!=NULL) { printf("%c",stack[indeks_s-1]); indeks_s--; } } int cek_prioritas(char simbol_operator) { if(simbol_operator=='+'||simbol_operator=='-') return 1; else if (simbol_operator=='*'||simbol_operator=='/') return 2; else if (simbol_operator=='^') return 3; }
Dari percobaan yang telah dilakukan, jawab pertanyaan berikut ini:
- Tampilkan hasil program setelah dijalankan.
- Deskripsikan fungsi program tersebut
Program ini mengubah dari infix menjadi postfix. - Sebutkan 4 aturan konversi infix ke postfix yang diterapkan pada program tersebut dan tunjukkan bagian coding mana yang mewakili masing-masing aturan
Setiap operand masuk kedalam postfix
else { postfix[indeks_p]=infix[indeks_i]; indeks_p++; }
Setiap operator masuk kedalam infix
while(infix[indeks_i]!=NULL) { if(infix[indeks_i]=='+'||infix[indeks_i]=='-'|| infix[indeks_i]=='*'||infix[indeks_i]=='/') { push(infix[indeks_i]); }
Setiap prioritas yang tinggi tidak boleh menghimpit prioritas yang lebih rendahvoid push(char karakter) { prioritas_baru=cek_prioritas(karakter); if(prioritas_lama<=prioritas_baru) { stack[indeks_s]=karakter; if(stack[indeks_s-1]==stack[indeks_s]) { postfix[indeks_s-1]=stack[indeks_s]; indeks_p++; stack[indeks_s-1]=stack[indeks_s]; stack[indeks_s]=NULL; } else { indeks_s++; } prioritas_lama=prioritas_baru; }
Simbol yang sama salah satunya harus pindah ke postfixif(stack[indeks_s-1]==stack[indeks_s]) { postfix[indeks_s-1]=stack[indeks_s]; indeks_p++; stack[indeks_s-1]=stack[indeks_s]; stack[indeks_s]=NULL; }
Incoming Terms
- Laporan Praktikum 14 Struktur 2