stack

11

Click here to load reader

Upload: ahmad-reza-musthafa

Post on 30-Jul-2015

812 views

Category:

Documents


41 download

TRANSCRIPT

Page 1: Stack

Praktikum Pemrograman Bahasa C

1

PENDAHULUAN STACK

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 harus diselesaikan dengan

menggunakan stack dan menyelesaikannya. 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.

Page 2: Stack

Praktikum Pemrograman Bahasa C

2

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.

Page 3: Stack

Praktikum Pemrograman Bahasa C

3

Masukkan banyak bil

Start

Push bil

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

Cetak Biner

While (bil)total=0, j=1

mod=bil%2;bil/=2;

total+=(mod*j);j*=10;

Pop bil

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

Cetak Oktaf

While (bil)

mod=bil%8;bil/=8;

total+=(mod*j);j*=10;

While (bil)

mod=bil%16

Mod=0 Copy “0”

Mod=10 Copy “A”

Mod=11 Copy “B”

Mod=12 Copy “C”

Mod=13 Copy “D”

Mod=14 Copy “E”

Mod=15 Copy “F”

Copy bil

Balik bil

bil/=16

Cetak Hexa

Biner

Oktaf

Hexa

Stop

Biner

Oktaf

Hexa

2. Buatlah algoritma/flowchart untuk melakukan pembalikan terhadap kalimat dengan menggunakan stack

Contoh: Kalimat : Struktur Data Hasil setelah dibalik : ataD rutkurtS

Page 4: Stack

Praktikum Pemrograman Bahasa C

4

Start

Push Char

Pop Char

Cetak Char

Ubah string ke format char

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

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

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

Masukkan kalimat

String 2 = kalimatUbah kalimat ke format

char

Push Char

Pop Char

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

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

Gabungkan Char ke String 1

String 1= String2

Cetak bukan Palindrom

Cetak Palindrom

Stop

1

1

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

Page 5: Stack

Praktikum Pemrograman Bahasa C

5

struct tumpukan t;

isi

atas

strnilai

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

isiatasisi

atasisi

atasisi

atasisi

atasisi

atasisi

atasisi

atas

isiatas

isiatas

t.atas = 10

push(atoi(strnilai));Jika t.atas belum 10.

t.atas=top+1;t.isi[t.atas]=xtop=t.atas;

isiatas

top=1t.atas = 1

x

isiatas

top=2t.atas = 2

x

isiatas

isiatas

top=3t.atas = 3

x

isiatas

isiatas

isiatas

top=4t.atas = 4

x

isiatas

isiatas

isiatas

isiatas

top=6t.atas = 6

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

top=5t.atas = 5

x

isiatas

isiatas

isiatas

isiatas

Page 6: Stack

Praktikum Pemrograman Bahasa C

6

isiatas

top=5

x

isiatas

isiatas

isiatas

isiatas

top=6t.atas = 7

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

top=6t.atas = 6

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

t.atas = 5

isiatas

top=10t.atas = 10

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

top=9t.atas = 9

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

top=8t.atas = 8

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

top=0t.atas

Jika top=0, tumpukan sudah kosong

Page 7: Stack

Praktikum Pemrograman Bahasa C

7

isiatas

top=10

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

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

isiatas

top=9

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

top=8

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

top=7

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

top=6

x

isiatas

isiatas

isiatas

isiatas

isiatas

isiatas

top=5

x

isiatas

isiatas

isiatas

isiatas

isiatas

top=4

x

isiatas

isiatas

isiatas

isiatas

top=3

x

isiatas

isiatas

isiatas

top=2

x

isiatas

isiatas

top=1

xtop=0

• PROGRAM 2

Page 8: Stack

Praktikum Pemrograman Bahasa C

8

atas bantu baru

atas

nilai

isi next isi next isi next

isi next

baru

nilai isi next

j==1

isi next

atas

nilai isi next isi next

atas = baru

bantu

nilai isi next isi next

atas

isi next isi next isi next

bantu

nilai isi next isi next

atas

isi next isi next isi next

atas=atas->next

bantu

nilai isi next isi next

atas

isi next isi next isi next

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 { int isi[MAX+1][3]; char isi2[MAX+1][MAX]; int atas; }t; void inisialisasi() { t.atas=0; top=0; }

Page 9: Stack

Praktikum Pemrograman Bahasa C

9

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 %d %s\n", top, 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) { int mod,j=1,total=0; while(x) { mod=x%2; x/=2; total+=(mod*j); j*=10; } t.isi[t.atas][1]=total; } oct (int x) { int mod,j=1,total=0; while(x) { mod=x%8; x/=8; total+=(mod*j);

Page 10: Stack

Praktikum Pemrograman Bahasa C

10

j*=10; } t.isi[t.atas][2]=total; } hexa (int x) { 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

Page 11: Stack

Praktikum Pemrograman Bahasa C

11

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 Hex\n"); for(i=1;i<=jml;i++) pop(); }

Preview :