stack
TRANSCRIPT
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.
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.
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
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
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
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
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
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; }
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);
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
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 :