Anda di halaman 1dari 11

Praktikum Pemrograman Bahasa C

TUJUAN BELAJAR: Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: 1. Memahami konsep stack dan mengerti kegunaannya 2. Mengimplementasikan struktur stack dalam pemrograman 3. Mengidentifikasi permasalahan-permasalahan pemrograman yang menggunakan stack dan menyelesaikannya.

PENDAHULUAN STACK

harus

diselesaikan

dengan

TUGAS PENDAHULUAN: 1. Buatlah algoritma/flowchart untuk melakukan konversi dari bilangan desimal ke bilangan biner, octal, heksa dengan menggunakan stack 2. Buatlah algoritma/flowchart untuk melakukan pembalikan terhadap kalimat dengan menggunakan stack Contoh: Kalimat : Struktur Data Hasil setelah dibalik : ataD rutkurtS 3. Dari soal no 2, buatlah algoritma/flowchart untuk menentukan apakah sebuah kalimat yang diinputkan dalam program (dengan menggunakan stack) adalah sebuah palindrom atau bukan. Palindrom adalah kalimat yang jika dibaca dari depan dan dari belakang, maka bunyinya sama. Contoh: Kalimat : sugus Kalimat tersebut adalah palindrom JAWABAN TUGAS PENDAHULUAN 1. Konversi Bilangan Desimal ke Bilangan Biner Algoritmanya adalah : Ambil sisa pembagian variable bilangan dengan angka 2, kemudian simpan dalam variable sisa. Kemudian simpan isi variable sisa ke dalam stack. Bagi variable bilangan dengan angka 2. Ulangi langkah 1 dan 2 selama bilangan tidak 0. Jika variable bilangan telah bernilai 0 maka lanjutkan ke langkah 4, Lakukan perulangan untuk langkah 5 dan 6 selama stack masih mempunyai isi (tidak kosong). ambil (pop) nilai yang ada di stack simpan di variable data. Tulis isi variable data ke layar . Selesai. Konversi Bilangan Desimal ke Bilangan Oktal Algoritmanya adalah : Ambil sisa pembagian variable bilangan dengan angka 8, kemudian simpan dalam variable sisa. Kemudian simpan isi variable sisa ke dalam stack. Bagi variable bilangan dengan angka 8. Ulangi langkah 1 dan 2 selama bilangan tidak 0. Jika variable bilangan telah bernilai 0 maka lanjutkan ke langkah 4, Lakukan perulangan untuk langkah 5 dan 6 selama stack masih mempunyai isi (tidak kosong). ambil (pop) nilai yang ada di stack simpan di variable data. Tulis isi variable data ke layar . Selesai. 1

Praktikum Pemrograman Bahasa C

Konversi Bilangan Desimal ke Bilangan Hexa Algoritmanya adalah : Ambil sisa pembagian variable bilangan dengan angka 16, kemudian simpan dalam variable sisa. Kemudian simpan isi variable sisa ke dalam stack. Bagi variable bilangan dengan angka 16. Ulangi langkah 1 dan 2 selama bilangan tidak 0. Jika variable bilangan telah bernilai 0 maka lanjutkan ke langkah 4, Jika sisa = 10,tambahi output A, sisa = 11, tambahi output B, sisa = 12, tambahi output C, sisa = 13, tambahi output D, sisa = 14, tambahi output E, sisa = 15, tambahi output F. Lakukan perulangan untuk langkah 5 dan 6 selama stack masih mempunyai isi (tidak kosong). ambil (pop) nilai yang ada di stack simpan di variable data. Tulis isi variable data ke layar . Selesai.

Praktikum Pemrograman Bahasa C


Start Biner Hexa

total=0, j=1

While (bil)

While (bil)

Masukkan banyak bil

for(i=0;i<=bil;i++)

mod=bil%2; bil/=2; total+=(mod*j); j*=10;

mod=bil%16

Mod=0 Push bil Cetak Biner

Copy 0

For(i=0;i<=bil;i++) Oktaf Pop bil While (bil) Biner mod=bil%8; bil/=8; total+=(mod*j); j*=10;

Mod=10

Copy A

Mod=11

Copy B

Oktaf

Mod=12

Copy C

Hexa Cetak Oktaf Mod=13 Stop Copy D

Mod=14

Copy E

Mod=15

Copy F

Copy bil

bil/=16

Balik bil

Cetak Hexa

2. Buatlah algoritma/flowchart untuk melakukan pembalikan terhadap kalimat dengan menggunakan stack Contoh: Kalimat : Struktur Data Hasil setelah dibalik : ataD rutkurtS

Praktikum Pemrograman Bahasa C


Start

Ubah string ke format char

For(i=0;i<=char;i++)

Push Char

For(i=char;i>=0;i++)

Pop Char

Cetak Char

Stop

3.

Dari soal no 2, buatlah algoritma/flowchart untuk menentukan apakah sebuah kalimat yang diinputkan dalam program (dengan menggunakan stack) adalah sebuah palindrom atau bukan. Palindrom adalah kalimat yang jika dibaca dari depan dan dari belakang, maka bunyinya sama. Contoh: Kalimat : sugus Kalimat tersebut adalah palindrome
Start 1

Masukkan kalimat String 2 = kalimat Ubah kalimat ke format char For(i=0;i<=char;i++)

For(i=char;i>=0;i++)

Pop Char

Gabungkan Char ke String 1

Push Char

String 1= String2

Cetak Palindrom

Cetak bukan Palindrom

Stop

SOAL SOAL TUGAS PEMROGRAMAN: 1. Untuk latihan program no 1 dan 2 buatlah bagan proses dari stack, untuk setiap operasi push dan pop pada representasi array dan linked list. Jangan lupa memasukkan juga perubahan nilai indeks array dan perubahan nilai pointernya 1. BAGAN PROGRAM 1 4

Praktikum Pemrograman Bahasa C


atas isi
struct tumpukan t;

strnilai
push(atoi(strnilai)); Jika t.atas = 10, maka tumpukan sudah penuh

atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
push(atoi(strnilai)); Jika t.atas belum 10. t.atas=top+1; t.isi[t.atas]=x top=t.atas;

t.atas = 10

top=3 top=2 atas isi x


t.atas = 1

x atas isi atas isi


t.atas = 2

top=1 x

atas isi atas isi atas isi

t.atas = 3

top=6 top=5 top=4 x x atas isi atas isi atas isi atas isi
t.atas = 4

x atas isi atas isi atas isi atas isi atas isi
t.atas = 5

atas isi atas isi atas isi atas isi atas isi atas isi

t.atas = 6

Praktikum Pemrograman Bahasa C


top=6 top=6 top=5 x x atas isi atas isi atas isi atas isi atas isi
t.atas = 5

x atas isi atas isi atas isi atas isi atas isi atas isi atas isi
t.atas = 6

atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi

t.atas = 7

top=10 top=9 top=8 x x atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
t.atas = 8

x atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
t.atas = 9

atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi

t.atas = 10

top=0

atas isi

t.atas

Jika top=0, tumpukan sudah kosong

Praktikum Pemrograman Bahasa C


top=10 x top=9 x top=8 x

atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi

t.atas=top-1; top=t.atas;

atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi

atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi

top=7 x

atas isi atas isi atas isi atas isi atas isi atas isi atas isi

top=6 x

top=5 atas isi atas isi atas isi atas isi atas isi atas isi x

atas isi atas isi atas isi atas isi atas isi

top=4 x

top=3 atas isi atas isi atas isi atas isi top=0 x

top=2 atas isi atas isi atas isi x

atas isi atas isi

top=1 x

atas isi

PROGRAM 2

Praktikum Pemrograman Bahasa C


isi next
atas

isi

next

isi

next

bantu

baru

nilai
j==1

isi

next

atas

nilai

isi

next

isi

next

nilai

isi

next

isi

next

baru

atas

atas = baru

nilai

isi

next

isi

next

isi

next

isi

next

isi

next

bantu atas

nilai

isi

next

isi

next

isi

next

isi

next

isi

next

bantu

atas

atas=atas->next

nilai

isi

next

isi

next

isi

next

isi

next

isi

next

bantu

atas

atas=atas->next

2. Buatlah program konversi system bilangan dengan stack, dapat menggunakan array atau linked list - Decimal ke biner - Decimal ke octal - Decimal ke hexa Source Code : #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 10 int top; struct tumpukan {

}t; void inisialisasi() { }

int isi[MAX+1][3]; char isi2[MAX+1][MAX]; int atas;

t.atas=0; top=0;

Praktikum Pemrograman Bahasa C

void push(int x) {

if (t.atas==MAX) printf("Stack is full\n"); else { t.atas=top+1; t.isi[t.atas][0]=x; top=t.atas; printf(" push %d : %d \n", t.atas, t.isi[t.atas][0]); //konversi bin(t.isi[t.atas][0]); oct(t.isi[t.atas][0]); hexa(t.isi[t.atas][0]); }

} void pop() {

if(top==0) printf("Stack is already/have been empty\n"); else { printf (" %d %d %d t.isi[top][0], t.isi[t.atas][1],t.isi[t.atas][2],t.isi2[t.atas]); t.atas=top-1; top=t.atas; } } bin (int x) {

%d

%s\n", top,

} oct (int x) {

int mod,j=1,total=0; while(x) { mod=x%2; x/=2; total+=(mod*j); j*=10; } t.isi[t.atas][1]=total;

int mod,j=1,total=0; while(x) { mod=x%8; x/=8; total+=(mod*j); 9

Praktikum Pemrograman Bahasa C

} hexa (int x) {

j*=10; } t.isi[t.atas][2]=total;

int mod; char hex[5],kata[5]; t.isi2[t.atas][0]=NULL; while(x) { mod=x%16; if(mod==0) strcpy(hex,"0"); else if(mod==10) strcpy(hex,"A"); else if(mod==11) strcpy(hex,"B"); else if(mod==12) strcpy(hex,"C"); else if(mod==13) strcpy(hex,"D"); else if(mod==14) strcpy(hex,"E"); else if(mod==15) strcpy(hex,"F"); else { itoa(mod,kata,10); strcpy(hex,kata); } strcat(t.isi2[t.atas],hex); x/=16; } strrev(t.isi2[t.atas]);

main() {

int i, jml; char strnilai[5], strjum[5]; inisialisasi(t); printf("Conversion Dec-Bin-Oct-Hexa\n\n"); printf("Insert a number of data ="); gets (strjum); jml=atoi(strjum); //push 10

Praktikum Pemrograman Bahasa C

for(i=1;i<=jml;i++) { printf(" Number %d : ",i); gets(strnilai); push(atoi(strnilai)); } printf("\n Data already pushed:\n"); printf(" Push Number\n"); for(i=1;i<=top;i++) printf(" %d %d\n",i,t.isi[i][0]); //pop printf("\n Data already pop + conversion result:\n"); printf(" Pop Number(dec) Bin Oct for(i=1;i<=jml;i++) pop();

Hex\n");

Preview :

11