28
3.2 Pseudocode
Pseudocode adalah penjelasan dari algoritma pemrograman komputer yang
menggunakan struktur sederhana dari bahasa pemrograman. Biasanya yang ditulis dari pseudocode
adalah variabel dan fungsi. Tujuan penggunaan utama dari pseudocode adalah untuk memudahkan dalam memahami prinsip-prinsip dari suatu algoritma.
3.2.1 Pseudocode pembacaan berkas
Pada pembacaan berkas, berkas yang dibaca merupakan berkas yang dimasukkan secara digital. Pseudocode pembacaan berkas:
bacafile {
input file; String keluaran;
if file == .txt {
file = StringBuffer.toString; }
else if file == .bmp {
byte[] imageBytes = ByteArrayOutputStream.toByteArray; file = BASE64Encoder.encodeimageBytes;
} output keluaran;
}
Flowchart dari pseudocode pembacaan berkas dapat dilihat pada Gambar 3.6.
Universitas Sumatera Utara
29
Input File; String keluaran;
File == .txt
File = StringBuffer.toString; File == .bmp
Output keluaran
Selesai Mulai
ya ya
tidak tidak
Byte[] imageBytes = ByteArrayOutputStream.toByteArray;
File = BASE64Encoder.encodeimageBytes;
Gambar 3.6
Flowchart Pembacaan Berkas 3.2.2
Pseudocode pengurutan frekuensi Pada pengurutan frekuensi, pengurutan dilakukan secara menaik. Pseudocode
pengurutan frekuensi:
sorting {
array arr_char[int count,String char]; nchar = arr_char.count;
kchar = arr_char.char; String char temp;
for int i=0; ichar.length; i++ {
for int j=0; jchar.length-1; j++ {
if nchar[j] nchar[j+1] {
temp = nchar[j]; nchar[j] = nchar[j+1];
nchar[j+1] = temp; }
nchar[j].index = j; nchar[j+1].index = j+1;
Universitas Sumatera Utara
30
} char.length-1--;
} for int i=0; ichar.length; i++
{ output kchar[i],nchar[i];
} }
Flowchart pengurutan frekuensi karakter dapat dilihat pada Gambar 3.7.
array arr_char[int count,String char]; nchar = arr_char.count;
kchar = arr_char.char; String char temp;
Mulai
nchar[j] nchar[j+1] temp = nchar[j];
nchar[j] = nchar[j+1]; nchar[j+1] = temp;
ya ya
ya
nchar[j].index = j; nchar[j+1].index = j+1;
tidak
Output kchar[i],nchar[i];
Selesai ya
int i=0; ichar.length; i++
int j=0; jchar.length-1; j++
int i=0; ichar.length; i++ tidak
tidak
tidak char.length-1--;
Gambar 3.7 Flowchart
Pengurutan Frekuensi Karakter
Universitas Sumatera Utara
31
3.2.3 Pseudocode kompresi algoritma Shannon-Fano
Pseudocode proses kompresi algoritma Shannon-Fano:
splitint my_index {
ifmy_index 1 {
array my_char[int s0_index, int s1_index, int s0_count, int s1_count];
String g_char, g_code; s0_char = my_char.length];
s1_char = my_char.length]; int i_s0_char = 0;
int i_s1_char = 0; s0_index = 0;
s1_index = my_index-1; s0_count = my_char[s0_index].g_count;
s1_count = my_char[s1_index].g_count; s0_char = s_addmy_char[s0_index],s0_char,i_s0_char;
i_s0_char++; s1_char = s_addmy_char[s1_index],s1_char,i_s1_char;
i_s1_char++;
karakter_s0 = my_char[s0_index].g_char; kode_s0 = my_char[s0_index].g_code;
karakter_s1 = my_char[s1_index].g_char; kode_s1 = my_char[s1_index].g_code;
my_char[s0_index].add_code1; outputkarakter_s0+ , +kode_s0;
my_char[s1_index].add_code0; outputkarakter_s1+ , +kode_s1;
forint i=0; imy_index; i++ {
ifs1_index-s0_index == 1 || s1_index-s0_index == - 1
{ ifs0_count s1_count
{ s0_index++;
s0_count += my_char[s0_index].g_count;
Universitas Sumatera Utara
32
my_char[s0_index].add_code1; s0_char =
s_addmy_char[s0_index],s0_char,i_s0_char; i_s0_char++;
outputkarakter_s0+ , +kode_s0; }
else {
s1_index--; s1_count += my_char[s1_index].g_count;
my_char[s1_index].add_code0; s1_char =
s_addmy_char[s1_index],s1_char,i_s1_char; i_s1_char++;
outputkarakter_s1+ , +kode_s1; }
} }
splits0_char, i_s0_char; splits1_char, i_s1_char;
} }
Flowchart proses kompresi algoritma Shannon-Fano dapat dilihat pada
Gambar 3.8 dan Gambar 3.9.
Mulai
My_index 1 array my_char[int s0_index, int
s1_index, int s0_count, int s1_count]; String g_char, g_code;
s0_char = my_char.length; s1_char = my_char.length;
s1_index = my_index-1; s0_count = my_char[s0_index].g_count;
s1_count = my_char[s1_index].g_count; s0_char = s_addmy_char[s0_index],s0_char,i_s0_char;
i_s0_char++; s1_char = s_addmy_char[s1_index],s1_char,i_s1_char;
i_s1_char++; ya
tidak
a b
Gambar 3.8
Flowchart Kompresi Algoritma Shannon-Fano 1
Universitas Sumatera Utara
int i=0; imy_index; i++ karakter_s0 = my_char[s0_index].g_char;
kode_s0 = my_char[s0_index].g_code karakter_s1 = my_char[s1_index].g_char;
kode_s1 = my_char[s1_index].g_code
my_char[s0_index].add_code1; my_char[s1_index].add_code0;
s0_count s1_count ya
ya tidak
splits0_char, i_s0_char; splits1_char, i_s1_char;
ya
output karakter_s0+ , +kode_s0; output karakter_s1+ , +kode_s1;
Selesai s0_index++;
s0_count += my_char[s0_index].g_count; my_char[s0_index].add_code1;
s0_char = s_addmy_char[s0_index],s0_char,i_s0_char; i_s0_char++;
s1_index--; s1_count += my_char[s1_index].g_count;
my_char[s1_index].add_code0; s1_char = s_addmy_char[s1_index],s1_char,i_s1_char;
i_s1_char++; s1_index – s0_index == 1 ||
s1_index – s0_index == -1 tidak
tidak a
b
Gambar 3.9
Flowchart Kompresi Algoritma Shannon-Fano 2
Universitas Sumatera Utara
34
3.2.4 Pseudocode dekompresi algoritma Shannon-Fano
Pseudocode proses dekompresi algoritma Shannon-Fano:
decode {
String bin, biner; array tree[String g_char, String g_code];
int binLength = bin.length; char[] binCharAt = bin.toCharArray;
Stringbuffer bf; biner = ;
for int i=0; ibinLength; i++ {
biner += binCharAt[i]; for int j=0; jtree.length; j++
{ output biner+ , +tree[j].g_code;
if biner.equalstree[j].g_code {
output karakter : +tree[j].g_char; bf.appendtree[j].g_char;
output string : +bf; biner = ;
} }
} }
Flowchart proses dekompresi algoritma Shannon-Fano dapat dilihat pada
Gambar 3.10.
Universitas Sumatera Utara
35
String bin, biner; array tree[String g_char, String g_code];
int binLength = bin.length; char[] binCharAt = bin.toCharArray;
Mulai
int i=0; ibinLength; i++
biner += binCharAt[i];
int j=0; itreeLength; j++
biner.equalstree[j].g_code
bf.appendtree[j].g_char; biner;
Output tree[j].g_char+bf; ya
ya
ya tidak
tidak tidak
Selesai
Gambar 3.10
Flowchart Dekompresi Algoritma Shannon-Fano
Universitas Sumatera Utara
36
3.2.5 Pseudocode kompresi algoritma Arithmetic Coding
Pseudocode proses kompresi algoritma Arithmetic Coding:
findDecimaldouble low, double high, String text {
array header[symbol,range_min,range_max]; double min,max;
iftext.length 0 {
int i = 0; whiletext.charAt0 = header.symbol[i]
{ i++;
} min = low+high-lowheader.range_min[i];
max = low+high-lowheader.range_max[i]; text =removeFirstChartext;
findDecimalmin, max, text; }
} final String findBinarydouble a,double b, String result{
ifa0.5 b0.5{ result = findBinary2a, 2b, result+0;
}else ifa0.5 b0.5{ result = findBinarya-0.52, b-0.52, result+1;
}else ifa==0 b=0.5{ result = result+0;
}else ifa=0.5 b==1{ result = result+1;
}else ifa=0.5 b= 0.5{ result = 1-2a b-0.52 - 0 ? findBinary2a,
1, result+0 : findBinary0, b-0.52, result+1; }
return result; }
arithmetic {
double ifLength; char[] ifCharAt;
StringBuffer sb;
Universitas Sumatera Utara
37
String buff,bin; ifLength = inputfile.length;
ifCharAt = inputfile.toCharArray; buff = ;
for int i=0; iifLength; i++ {
buff += ifCharAt[i]; if buff.length == 2
{ findDecimal0,1,buff;
bin = findBinarymin,max,; output buff+ : + min + - + max + bin : +bin;
sb.appendbin; buff = ;
} }
if buff.length == 1 {
findDecimal0,1,buff; bin = findBinarymin,max,;
output buff+ : + min + - + max + bin : +bin; sb.appendbin;
} Output sb;
}
Flowchart proses kompresi Arithmetic Coding dapat dilihat pada Gambar
3.11, Gambar 3.12, Gambar 3.13 dan Gambar 3.14.
Universitas Sumatera Utara
38
Mulai
Double ifLength; Char[] ifCharAt;
StringBuffer sb; String buff,bin;
ifLength = inputFile.length; ifCharAt = inputFile.toCharArray;
buff = “”;
int i=0; iifLength; i++;
buff += ifCharAt[i];
buff.length == 2
findDecimal0,1,buff;
bin = findBinarymin,max,””;
sb.appendbin; buff = “”;
ya ya
tidak
tidak
output buff+ : + min + - + max + bin : +bin;
a
Gambar 3.11 Flowchart
Kompresi Algoritma Arithmetic Coding 1
Universitas Sumatera Utara
39
buff.length == 1
findDecimal0,1,buff;
bin = findBinarymin,max,””;
sb.appendbin; ya
tidak
Selesai a
Output sb;
Gambar 3.12 Flowchart
Kompresi Algoritma Arithmetic Coding 2
double low,high; String text;
array header[symbol,range_min,range_max];
double min,max; int i = 0;
Mulai findDecimal
text.length 0
text.charAt0 = header.symbol[i]
i++; tidak
ya ya
min = low+high-lowheader.range_min[i]; max = low+high-lowheader.range_max[i];
text =removeFirstChartext; findDecimalmin, max, text;
Selesai tidak
Gambar 3.13 Flowchart
Method findDecimal
Universitas Sumatera Utara
40
Mulai findBinary
Double a,b; String result;
a0.5 b0.5
result = findBinary2a, 2b, result +”0;
a0.5 b0.5
result = findBinarya-0.52, b-0.52, result +”1;
ya
ya tidak
a==0 b=0.5
result = result +”0; ya
tidak a=0.5 b==1
result = result +”1; ya
tidak a=0.5 b= 0.5
result = 1-2a b-0.52 - 0 ? findBinary2a, 1, result+0 : findBinary0,
b-0.52, result+1; ya
tidak
result; tidak
Selesai
a a
Gambar 3.14
Flowchart Method findBinary
Universitas Sumatera Utara
41
3.2.6 Pseudocode dekompresi algoritma Arithmetic Coding
Pseudocode proses dekompresi algoritma Arithmetic Coding:
decodearith {
int binLength,tempLength; array binRange[double range_min,double range_max];
array libRange[String libSymbol,double lib_min,double lib_max]; array header[String hsymbol,double h_min,double h_max];
char[] binCharAt,tempCharAt; StringBuffer sb;
String bin,temp; binLength = bin.length;
binCharAt = bin.toCharArray; temp = ;
for int i=0; ibinLength; i++ {
temp += binCharAt[i]; tempLength = temp.length;
tempCharAt = temp.toCharArray; range_min = 0;
range_max = 1; binRange = binValuebinRange,temp;
for int j=0; jlibRange.length; j++ {
if libRange[j].lib_min = binRange.range_min libRange[j].lib_max = binRange.range_max
{ sb.appendlibSymbol[j];
temp = ; }
} }
if temp.length = 0 {
for int j=0; jsymbolLength; j++ {
if header[j].h_min =binRange.range_min header[j].h_max=binRange.range_max
{
Universitas Sumatera Utara
42
sb.appendhsymbol[j]; temp = ;
} }
} Output sb;
}
Flowchart proses dekompresi algoritma Arithmetic Coding dapat dilihat pada
Gambar 3.15 dan Gambar 3.16.
Mulai
int binLength,tempLength; array binRange[double range_min,double range_max];
array libRange[String libSymbol,double lib_min, double lib_max]; array header[String hsymbol,double h_min,double h_max];
char[] binCharAt,tempCharAt; StringBuffer sb;
String bin,temp;
binLength = bin.length; binCharAt = bin.toCharArray;
temp = ;
int i=0; ibinLength; i++; temp += binCharAt[i];
tempLength = temp.length; tempCharAt = temp.toCharArray;
range_min = 0; range_max = 1;
binRange = binValuebinRange,temp; int j=0; jLibLength; j++;
libRange[j].lib_min = binRange.range_min libRange[j].lib_max = binRange.range_max
sb.appendlibSymbol[j]; temp = “”;
ya
ya tidak
tidak tidak
a
Gambar 3.15
Flowchart Dekompresi Algoritma Arithmetic Coding 1
Universitas Sumatera Utara
43
temp.length = 0
int j=0; jsymbolLength; j++; ya
header[j].h_min =binRange.range_min header[j].h_max=binRange.range_max
sb.appendheader.symbol[j]; temp = “”;
ya
tidak tidak
Output sb; tidak
Selesai a
ya
Gambar 3.16
Flowchart Dekompresi Algoritma Arithmetic Coding 2 3.2.7
Pseudocode kompresi algoritma Huffman Pseudocode
proses kompresi algoritma Huffman:
find_lowesthufftree[] mytree, int index {
banding {
bool kosong = true; int index = 0;
int sum = 0; }
banding[0] = new banding; banding[1] = new banding;
array tchar[String g_char, String g_code, int g_count];
Universitas Sumatera Utara
44
for int i=0; iindex; i++ {
output tchar[i].g_char,tchar[i].g_code; if mytree[i].sum = 0
{ if result[0].kosong
{ result[0].index = mytree[i].index;
result[0].sum = mytree[i].sum; result[0].kosong = false;
} else if mytree[i].sum result[0].sum
{ result[0].sum = mytree[i].sum;
result[0].index = mytree[i].index; }
} }
for int i=0; iindex; i++ {
if mytree[i].sum = 0 mytree[i].index = result[0].index {
if result[1].kosong {
result[1].index = mytree[i].index; result[1].sum = mytree[i].sum;
result[1].kosong = false; }
else if mytree[i].sum result[1].sum {
result[1].sum = mytree[i].sum; result[1].index = mytree[i].index;
} }
} int[3] out;
out[0] = result[0].index; out[1] = result[1].index;
if result[0].kosong || result[1].kosong {
Universitas Sumatera Utara
45
out[2] = 1; }
else {
out[2] = 0; }
returnout; }
the_huffmanhufftree[] mytree,int i_mytree {
int[3] lowest; lowest = find_lowestmytree,i_mytree;
if lowest[2] == 0 {
for int i=0; imytree[lowest[0].i_char_index; i++ {
mytree[lowest[0]].char_index[i].add_code0; output tchar[i].g_char,tchar[i].g_code;
} for int i=0; imytree[lowest[1].i_char_index; i++
{ mytree[lowest[1]].char_index[i].add_code1;
output tchar[i].g_char,tchar[i].g_code; }
} }
Flowchart proses kompresi algoritma Huffman dapat dilihat pada
Gambar 3.17, Gambar 3.18, dan Gambar 3.19.
Universitas Sumatera Utara
46
Mulai Find_lowest
huffree[] mytree; int index;
bool kosong = true; int index = 0;
int sum = 0; array tchar[String g_char, String g_code, int g_count];
int i=0; iindex; i++;
mytree[i].sum = 0
result[0].kosong
result[0].index = mytree[i].index; result[0].sum = mytree[i].sum;
result[0].kosong = false;
mytree[i].sum result[0].sum
result[0].sum = mytree[i].sum; result[0].index = mytree[i].index;
ya
ya
ya
ya tidak
tidak tidak
tidak
a
Gambar 3.17 Flowchart
Method FindLowest 1
Universitas Sumatera Utara
47
int i=0; iindex; i++;
mytree[i].sum = 0 mytree[i].index = result[0].index
result[1].kosong
result[1].index = mytree[i].index; result[1].sum = mytree[i].sum;
result[1].kosong = false;
mytree[i].sum result[1].sum
result[1].sum = mytree[i].sum; result[1].index = mytree[i].index;
ya
ya
ya
ya tidak
int[3] out; out[0] = result[0].index;
out[1] = result[1].index;
result[0].kosong || result[1].kosong
out[2] = 1; ya
out[2] = 1; tidak
out
Selesai tidak
tidak
tidak a
Gambar 3.18 Flowchart
Method FindLowest 2
Universitas Sumatera Utara
48
Mulai
hufftree[] mytree,int i_mytree; int[3] lowest =
find_lowestmytree,i_mytree;
lowest[2] == 0
int i=0; imytree[lowest[0].i_char_index;
i++
mytree[lowest[0].char_index[i].add_code0;
output tchar[i].g_char,tchar[i].g_code;
int i=0; imytree[lowest[1].i_char_index;
i++
mytree[lowest[1]].char_index[i].add_code1;
output tchar[i].g_char,tchar[i].g_code;
Selesai tidak
tidak tidak
Gambar 3.19 Flowchart
Kompresi Algoritma Huffman
Universitas Sumatera Utara
49
3.2.8 Pseudocode dekompresi algoritma Huffman
Pseudocode proses dekompresi algoritma Huffman:
decode {
String bin, biner; array tree[String g_char, String g_code];
int binLength = bin.length; char[] binCharAt = bin.toCharArray;
Stringbuffer bf; biner = ;
for int i=0; ibinLength; i++ {
biner += binCharAt[i]; for int j=0; jtree.length; j++
{ output biner+ , +tree[j].g_code;
if biner.equalstree[j].g_code {
output karakter : +tree[j].g_char; bf.appendtree[j].g_char;
output string : +bf; biner = ;
} }
} }
Flowchart proses dekompresi algoritma Huffman dapat dilihat pada Gambar 3.20.
Universitas Sumatera Utara
50
String bin, biner; array tree[String g_char, String g_code];
int binLength = bin.length; char[] binCharAt = bin.toCharArray;
Mulai
int i=0; ibinLength; i++
biner += binCharAt[i];
int j=0; itreeLength; j++
biner.equalstree[j].g_code
bf.appendtree[j].g_char; biner;
Output tree[j].g_char+bf; ya
ya
ya tidak
tidak tidak
Selesai
Gambar 3.20
Flowchart Dekompresi Algoritma Huffman
Universitas Sumatera Utara
51
3.3 Perancangan Antarmuka