Anda di halaman 1dari 5

Praktikum 5

Stack (lanj.)
NIM/Nama : 4312011026 / Ikhwan Ash Shafa Arrafi
Setelah mengikuti praktikum ini, mahasiswa diharapkan dapat:
 Menggambarkan konsep stack pada memory
 Membuat struktur data stack dalam bahasa C
 Melakukan operasi pada stack
 Mengaplikasikan stack pada program

Salah satu penggunaan stack oleh compiler adalah untuk memeriksa kelengkapan pasangan
kurung buka dan kurung tutup suatu ekspresi aritmetika. Susun program untuk menginput
sebuah ekspresi aritmetika (tidak lebih dari 20 karakter). Kemudian periksa kurung buka dan
kurung tutupnya apakah tepat saling berpasangan. Tampilkan perkataan “BENAR” jika tepat
saling berpasangan, atau tampilkan perkataan “SALAH” bila ada yang tidak tepat saling
berpasangan.

Contoh:

Input Tampilan
A+B* C–D/E BENAR
A + B * (C – D) / E BENAR
(A + B) * (C – D) / E BENAR
(A + B * (C – D) / E) BENAR
(A + B * (C – D) / E SALAH
(A + B) * C – D) / E SALAH
)A + B * (C – D / E SALAH
(A + B ( * (C – D) / E SALAH
(A + B) * )C – D) / E SALAH

Petunjuk:

Telusuri karakter per karakter isi ekspresi aritmetika sampai ditemui karakter NULL (‘\0’).

 Jika terbaca karakter kurung buka ‘(‘ maka PUSH kurung buka tersebut ke dalam
stack.
 Jika terbaca karakter kurung tutup ‘)’ maka periksa isi stack. Jika stack ada isinya,
maka keluarkan (POP) satu isi stack, yaitu sebuah kurung buka ‘(‘. Tetapi jika isi
stack KOSONG berarti kurung buka dan kurung tutup tidak berpasangan, maka
tampilkan “SALAH” dan proses selesai.

~1~
 Setelah semua karakter telah ditelusuri, sampai ditemui karakter NULL, maka periksa
isi stack. Jika isi stack KOSONG, berarti kurung buka dan kurung tutup telah tepat
saling berpasangan, tampilkan “BENAR” dan proses selesai. Jika isi stack masih ada,
berarti kurung buka lebih banyak daripada kurung tutup, tampilkan “SALAH” dan
proses selesai.

Salin dan jelaskan kode program Anda di sini.


#include <stdio.h>
#include <string.h>
#define MAX 50

typedef char tipeItem;


typedef struct{
tipeItem data[MAX];
int top;
}Stack;

Stack S;

void create(Stack *S)


{
(*S).top = -1;
}

int isEmpty(Stack S)
{
return (S.top == -1);
}

int isFull(Stack S)
{
return (S.top == MAX-1);
}

void push(Stack *S, tipeItem x)


{
if(!isFull(*S)){
(*S).top++;
(*S).data[(*S).top] = x;
}else
printf("Stack penuh, Push gagal.\n");
}

~2~
void pop(Stack *S)
{
if(!isEmpty (*S))
{
(*S).top--;
}
else
{
printf("Urutan Tanda Kurung Tidak Benar, Program
berhenti\n");
exit(0);
}
}
void tampilan()
{
if (S.top == -1){
printf("Urutan Tanda Kurung Benar\n");
}else{
printf("Urutan Tanda Kurung Tidak Benar\n");
}
}
int main()
{
int i;
A:
create(&S);
char x[100];
printf("Inputkan Operasi Aritmatika dengan Tanda Kurung: \n");
scanf("%s", &x);
for (i = 0; x[i] != '\0';i++)
{
if (x[i] == '(')
{
push(&S, x[i]);
}
else if (x[i] == ')')
{
pop(&S);
}
}
tampilan();
getch();

~3~
system("cls");
goto A;
}
Tampilkan hasil running dan penjelasannya di sini.

Program akan meminta inputan berupa char untuk sebuah operasi aritmatika dengan tanda
kurung, setelah input dimasukkan, program akan memeriksa stack apakah urutan tanda
kurung pada operasi aritmatika yang diketikkan telah benar, apabila salah maka program
akan berhenti/Selesai.

~4~
SOAL EKSTRA (Bonus Nilai)
Modifikasi program stack sebelumnya sehingga memiliki kemampuan untuk memeriksa
kelengkapan pasangan kurung buka ‘(‘, ‘[‘, ‘{‘ dan kurung tutup ‘)’, ‘]’, ‘}’.

Contoh:

Input Tampilan
A + [ B * (C – D) – E] / F BENAR
[A + B * (C – D)]– E / F BENAR
[A + B * (C – D)} – E / F SALAH
{ A + B * (C – D)] – E / F SALAH

Salin dan jelaskan kode program Anda di sini.

Tampilkan hasil running dan penjelasannya di sini.

Kesimpulan
Setelah mengikuti praktikum ini, apa saja yang telah Anda pelajari?

Pengumpulan tugas praktikum:


Simpan laporan praktikum ini dengan nama P05_NIM.docx di folder yang sama dengan
folder tempat kode program. Namai folder dengan P05_NIM, kemudian zip. Upload ke
http://learning-if.polibatam.ac.id.

~5~

Anda mungkin juga menyukai