Laporan Praktikum Struktur Data Modul 14 – Stack untuk Konversi Infix ke Postfix

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:

  1. Tampilkan hasil program setelah dijalankan.
  2. Deskripsikan fungsi program tersebut
    Program ini mengubah dari infix menjadi postfix.
  3. 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 rendah

                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;
    
        }


    Simbol yang sama salah satunya harus pindah ke postfix

     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;
    
            }

Share Button

Oleh Rinaldo Jonathan

Admin of this site. Artis papan PCB. #zoneRinaldo #Controllerism Studio Demon, Stage Angel, Sleepy Developer, Smoke free. Kalkud SHS 2012, PCR G15.

Tinggalkan Balasan

Verified by ExactMetrics