Laporan Praktikum Struktur Data Modul 13 – Stack untuk Persamaan Matematis

TUJUAN

Mahasiswa mampu menerapkan konsep stack untuk persamaan matematis

Percobaan 1: Persamaan Matematis dalam Program yang Membingungkan

 

Salin dan jalankan coding berikut ini kemudian beri komentar pada setiap baris coding.

#include <stdio.h>

#include <conio.h>

#define MAX 5




struct stack

{

    char kur;

    struct stack *next;

};




struct stack *ujung,*temp;

int j=0;

char kode;




void push(char xp)

{

    if (j==0)

    {

        ujung=(struct stack*)malloc(sizeof(struct stack));

        ujung->kur=xp; //hasil push masuk ke sini

        ujung->next=NULL;

    }

    else

    {

        temp=(struct stack*)malloc(sizeof(struct stack));

        temp->kur=xp;

        temp->next=ujung; //hasil push masuk ke sini

        ujung=temp;

    }

    j++;

}




void pop()

{

    //printf("\n Data stack [%d] : %c",ujung->atas,ujung->data);

    kode=ujung->kur; //ambil data buka kurung

    temp=ujung;

    ujung=ujung->next;

    free(temp);

    //return kode;

}




void tampil()

{

    while(ujung!=NULL)

    {

        pop();




    }

}




int cek(char c)

{

    //char m;

    //m=c;

    //char s;

    //printf("%c",s);

    if(c=='(')

        return 1;

    else if (c=='{')

        return 1;

    else if (c=='[')

        return 1;

    else if(c==')')

        return 2;

    else if (c=='}')

        return 2;

    else if(c==']')

        return 2;

    else

        return 0;

}




int valid(char v)

{

    pop();

    if(kode=='('&&v==')')

        return 1;

    else if(kode=='{'&&v=='}')

        return 1;

    else if (kode=='['&&v==']')

        return 1;

    else return 0;

    //jika buka kurung sesuai dengan tutup kurung, return 1. jika tidak return 0

}




void main()

{

    char dat;

    int l;

    printf("Program checking persamaan matematis\n");

    printf("====================================\n");

    printf("Masukkan persamaan matematis dengan kesalahan tanda kurung, misal (a+b*(c+b)]\n");

    while((dat=getche())!=13)

    {

        //1=dat;

        //printf("%c",dat);

        if(cek(dat)==1) //jika dat = salah satu jenis buka kurung

        {

            push(dat); //push dat

        }

        if(cek(dat)==2) //jika dat = salah satu jenis tutup kurung

        {

            if(valid(dat)==1)

            {

                continue; //jika valid, continue

            }

            else

            {

                printf("Anda salah!"); //print jika tutup kurung tidak sesuai

                getch();

            }

        }

    }

}

 

 

Dari percobaan yang telah dilakukan, jawab pertanyaan berikut ini:

  1. Tampilkan hasil program setelah dijalankan
    1
  2. Deskripsikan fungsi program tersebut
    Program ini mencari typo dalam pengetikan tanda kurung dalam operasi aritmatika.
    fungsi cek() digunakan untuk menentukan apakah input merupakan tutup kurung, buka kurung, atau bukan
    fungsi push() digunakan untuk menyimpan buka kurung
    fungsi valid() digunakan untuk membandingkan kurung yang disimpan dengan push() dengan kurung penutup.
    fimgsi pop() digunakan untuk mengambil buka kurung dari struct.
  3. Gambarkan flowchart dari program tersebut dengan benar [100] capture

Source

1 2 3 6