Anda di halaman 1dari 7

Praktikum 5

Stack (lanj.)
NIM/Nama : 3312111058/Ryan Krisna Bayu
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 <stdlib.h>
#include <string.h>
#define MAX 20
typedef char variable;
typedef struct {
variable character[MAX];
int top;
} stack;
stack checkChar;
void create(stack *ex){
(*ex).top = -1;
}
int isEmpty(stack ex){
if (ex.top <=0){
return 1;
}else{
return 0;
}
}
int Full(stack ex){
if(ex.top==MAX-1){
return 1;
}else {
return 0;
}
}
void push(stack *ex, variable character){
if(!Full(*ex)){
(*ex).character[(*ex).top] = character;
(*ex).top++;
} else {
}
}
void pop(stack *ex) {
if(!isEmpty(*ex)){
(*ex).top--;

~2~
}else{
printf("SALAH");
exit(0);
}
}
void check(stack *ex, int i)
{
if((*ex).character[1] == '('){
}
}
int main(){
char *insert;
insert = malloc(256);
scanf("%s", insert);
int i;
for(i = 0; i <= strlen(insert); i++){
if(insert[i] == '('){
push(&checkChar,'(');
}
if(insert[i] == ')'){
pop(&checkChar);
}
}
if(isEmpty(checkChar)){
printf("\nBenar");
return 0;
}else{
printf("\nSalah");
return 1;
}
}

Tampilkan hasil running dan penjelasannya di sini.

~3~
Program ini berfungsi mengecheck atau memeriksa data yang sudah ada seperti pada soal
gambar di atas. Jika data yang di masukan sesuai pada soal di di gambar dan mengeluarkan
notif tampilan benar maka statement yang di tampilkan adalah benar , dan jika salah maka
akan menampilkan notif salah .

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.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
typedef char variable;
typedef struct {
variable character[MAX];
int top;
} stack;
stack checkChar;
void create(stack *ex){
(*ex).top = -1;
}

~4~
int isEmpty(stack ex){
if (ex.top <=0){
return 1;
}else{
return 0;
}
}
int Full(stack ex){
if(ex.top==MAX-1){
return 1;
}else {
return 0;
}
}
void push(stack *ex, variable character){
if(!Full(*ex)){
(*ex).character[(*ex).top] = character;
(*ex).top++;
} else {
}
}
void pop(stack *ex) {
if(!isEmpty(*ex)){
(*ex).top--;
}else{
printf("SALAH");
exit(0);
}
}
void check(stack *ex, int i)
{
if((*ex).character[1] == '('){
}
}
int main(){
char *insert;
insert = malloc(256);
scanf("%s", insert);
int i;
for(i = 0; i <= strlen(insert); i++){
if(insert[i] == '('){
push(&checkChar,'(');
}

~5~
if(insert[i] == ')'){
pop(&checkChar);
}
if(insert[i] == '{'){
push(&checkChar,'{');
}
if(insert[i] == '}'){
pop(&checkChar);
}
if(insert[i] == '['){
push(&checkChar,'[');
}
if(insert[i] == ']'){
pop(&checkChar);
}
}
if(isEmpty(checkChar)){
printf("\nBENAR");
return 0;
}else{
printf("\nSALAH");
return 1;
}
}

Tampilkan hasil running dan penjelasannya di sini.

~6~
Sama seperti program di atas program ini hanya menambahkan fitur kurung dan beberapa
penyesuaian selebihnya sama seperti program di atas . Mengecheck atau memeriksa apakah
ada kurung buka yang tanpa kurung tutup atau kurung buka dan tutup tapi bentuk dan jenis
yang berbeda , hasil akan mengeksekusi notif yang keluar yaitu benar atau salah.

Kesimpulan
Setelah mengikuti praktikum ini, apa saja yang telah Anda pelajari?
=> saya mulai memahami dan mengerti fungsi fungsi dari stack.

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.

~7~

Anda mungkin juga menyukai