Analisis Perbandingan Algoritma Elias Delta Code Dan Algoritma Unary Coding Dalam Mengkompresi File Text
A-1
LAMPIRAN A
LISTING PROGRAM
FUNGSI
public void StopWatchStart()
{
stopWatch.Reset();
stopWatch.Start();
Cursor.Current = Cursors.WaitCursor;
txtLog.Text = "";
}
public void StopWatchStop(string Title)
{
stopWatch.Stop();
lblWaktu.Text = Title;
txtWaktu.Text = stopWatch.Elapsed.ToString();
Cursor.Current = Cursors.Arrow;
}
public string toBiner(int desimal, int digit)
{
string biner = "";
string buf = "";
int hasilBagi = desimal;
int p, sisa;
while (hasilBagi > 1)
{
if (hasilBagi % 2 == 1)
{
hasilBagi -= 1;
hasilBagi = hasilBagi / 2;
biner = "1" + biner;
}
else
{
hasilBagi = hasilBagi / 2;
biner = "0" + biner;
}
}
biner = hasilBagi + biner;
p = biner.Length / 8;
sisa = biner.Length % 8;
if (sisa != 0)
p += 1;
if (biner.Length < (p * 8))
for (int i = 1; i 0)
{
//biner = buf + biner;
Universitas Sumatera Utara
A-2
int len = biner.Count();
if (digit > len)
{
for (int i = 0; i < digit - len; i++)
biner = "0" + biner;
}
}
return biner;
}
public int toDecimal(string biner)
{
int result = 0;
int num = 0;
for (int i = 1; i L[i].Freq)
{
Kar = L[j].Kar;
Freq = L[j].Freq;
L[j].Kar = L[i].Kar;
L[j].Freq = L[i].Freq;
L[i].Kar = Kar;
L[i].Freq = Freq;
}
}
else if (Arah == 'Z')
{
for (int j = 0; j < L.Count - 1; j++)
for (int i = j + 1; i < L.Count; i++)
if (L[j].Freq < L[i].Freq)
{
Kar = L[j].Kar;
Freq = L[j].Freq;
L[j].Kar = L[i].Kar;
L[j].Freq = L[i].Freq;
L[i].Kar = Kar;
L[i].Freq = Freq;
}
}
return L;
}
public List BuatKode(List L)
{
string temp;
for (int j = 0; j < L.Count; j++)
{
temp = "";
for (int i = 0; i < j; i++)
temp += "1";
temp += "0";
L[j].Kode = temp;
}
Universitas Sumatera Utara
A-4
return L;
}
public List BuatKodeDelta(List L)
{
string temp;
int N, S;
for (int j = 0; j < L.Count; j++)
{
temp = "";
temp += toBiner(j + 1, 0);
L[j].Kode = temp.Remove(0, 1);
N = temp.Length;
L[j].Kode = toBiner(N, 0) + L[j].Kode;
S = toBiner(N, 0).Length - 1;
for (int i = 0; i < S; i++)
L[j].Kode = "0" + L[j].Kode;
}
return L;
}
KOMPRESI
public void Kompres()
{
int Pad;
Log = "";
CB = new List();
CT = "";
CTB = "";
JlhBit_CT = 0;
UN = HitungFreqKarakter(PT, KS);
UN = UrutkanKS(UN, 'Z');
if (rdbElias.Checked)
UN = BuatKodeDelta(UN);
else if (rdbUnary.Checked)
UN = BuatKode(UN);
for (int j = 0; j < PT.Count(); j++)
{
for (int i = 0; i < UN.Count(); i++)
{
if (PT[j] == UN[i].Kar)
{
CB.Add(UN[i].Kode);
break;
}
}
Universitas Sumatera Utara
A-5
}
// Buat Compressed Binary
for (int i = 0; i < CB.Count(); i++)
{
CTB += CB[i];
JlhBit_CT += CB[i].Count();
}
JlhKarCB = Convert.ToInt16(Math.Ceiling(Convert.ToDouble(JlhBit_CT) / 8));
// Buat Compressed Text
string b = "";
b = CTB.Substring((JlhKarCB - 1) * 8, JlhBit_CT - ((JlhKarCB - 1) * 8));
int x = b.Length;
Pad = 8 - x;
for (int i = 0; i < Pad; i++)
{
CTB += '1';
}
CBytes = new byte[JlhKarCB + 1];
for (int i = 0; i < JlhKarCB; i++)
{
b = CTB.Substring(i * 8, 8);
CT += Convert.ToChar(toDecimal(b));
CBytes[i] = Convert.ToByte(toDecimal(b));
}
CT += Convert.ToChar(Pad + 48);
CTB += toBiner(Pad + 48, 8);
// Simpan ke Array Byt
for (int i = 0; i < CT.Count(); i++)
CBytes[i] = Convert.ToByte(CT[i]);
// Cetak Hasil
for (int i = 0; i < UN.Count; i++)
Log += UN[i].Kar + "\t" + UN[i].Freq + "\t" + UN[i].Kode + "\n";
RC = Convert.ToDouble(CTB.Count() / 8) / Convert.ToDouble(PjgTeks);
RC = Convert.ToDouble(String.Format("{0:0.0000}", RC));
CR = Convert.ToDouble(CTB.Count() / 8) / Convert.ToDouble(PjgTeks) * 100;
CR = Convert.ToDouble(String.Format("{0:0.00}", CR));
Red = Convert.ToDouble(PjgTeks - (CTB.Count() / 8)) / Convert.ToDouble(PjgTeks) * 100;
Red = Convert.ToDouble(String.Format("{0:0.00}", Red));
txtPad.Text = Pad.ToString();
txtCTB.Text = CTB;
txtCT.Text = CT;
txtJlhBit_CT.Text = CTB.Count().ToString();
txtJlhKar_CT.Text = (CTB.Count() / 8).ToString();
txtRC.Text = RC.ToString();
txtCR.Text = CR.ToString() + " %";
txtRed.Text = Red.ToString() + " %";
txtLog.Text = Log;
}
Universitas Sumatera Utara
A-6
DEKOMPRESI
public string CT_ke_CTB()
{
CT = txtCT.Text.Trim(); // Substring(0, txtCT.Text.Length);
CTB = "";
TambahBit = Convert.ToInt16(CT[CT.Count() - 1]) - 48 ;
for (int i = 0; i < CT.Count() - 1; i++)
{
CTB += toBiner(Convert.ToInt16(CT[i]), 8);
}
if (TambahBit > 0)
{
CTB = CTB.Remove(CTB.Length - TambahBit, TambahBit);
}
return CTB;
}
public void Dekompres(List Tabel, string CTB)
{
String Hasil = "";
Log = "";
if (rdbElias.Checked)
{
//CTB = txtCTB.Text;
string S = "";
string KT;
char Kar = 'A';
int TC = 0;
int Index = 0;
Boolean Ketemu;
for (int i = 0; i < CTB.Count(); i++)
{
S += CTB[i];
TC++;
Ketemu = false;
for (int j = 0; j < Tabel.Count(); j++)
{
try
{
if (S == Tabel[j].Kode.Substring(0, TC))
{
KT = S;
Kar = Tabel[j].Kar;
Log += "Bit " + Index + " ke " + (Index + TC - 1) + " = " + KT + "\n";
Ketemu = true;
break;
}
}
catch { }
}
Universitas Sumatera Utara
A-7
if (Ketemu == false)
{
Hasil += Kar;
S = "";
TC = 0;
Index = i;
i--;
Log += "========================= Karakter : " + Kar + "\n\n";
}
}
Log += "======================= Karakter : " + Kar + "\n";
Hasil += Kar;
}
else if (rdbUnary.Checked)
{
//CTB = txtCTB.Text;
string S = "";
char Kar = 'A';
int TC = 0;
for (int i = 0; i < CTB.Count(); i++)
{
S += CTB[i];
if (CTB[i] == '0')
{
for (int j = 0 ; j < Tabel.Count(); j++)
if (S == Tabel[j].Kode)
{
Kar = Tabel[j].Kar;
Hasil += Kar;
break;
}
TC++;
Log += "Deretan Bit ke " + i + "\t: " + S + "\n" + "=====================
Karakter : " + Kar + "\n";
S = "";
}
}
}
JlhBit_PT = (Hasil.Count() * 8);
JlhBit_CT = Convert.ToInt16(txtJlhBit_CT.Text);
PjgTeks = Hasil.Count();
CR = Convert.ToDouble(JlhBit_CT / 8) / Convert.ToDouble(PjgTeks) * 100;
CR = Convert.ToDouble(String.Format("{0:0.00}", CR));
Red = Convert.ToDouble(PjgTeks - (JlhBit_CT / 8)) / Convert.ToDouble(PjgTeks) * 100;
Red = Convert.ToDouble(String.Format("{0:0.00}", Red));
txtCR.Text = CR.ToString() + " %";
txtRed.Text = Red.ToString() + " %";
txtPad.Text = TambahBit.ToString();
txtPT.Text = Hasil;
txtJlhKar_PT.Text = PjgTeks.ToString();
txtJlhBit_PT.Text = JlhBit_PT.ToString();
txtCTB.Text = CTB;
txtLog.Text = Log;
}
Universitas Sumatera Utara
B-1
CURRICULUM VITAE
Data Pribadi
Nama
: Julita Sinaga
Tempat/Tanggal Lahir
: Lumban Sinaga / 17 Juli 1992
Tinggi/Berat Badan
: 154 cm / 48 kg
Agama
: Kristen
Kewarganegaraan
: Indonesia
Alamat Sekarang
: Jl. Kepodang 1 No.183 Perumnas Mandala
Telp/ Hp
: 0812 6455 2304
Email
: [email protected]
----------------------------------------------------------------------------------------------------------Riwayat Pendidikan
2013 – 2017
: S1 Extensi Ilmu Komputer Universitas Sumatera Utara
2010 – 2013
: D3 Teknik Informatika Universitas Sumatera Utara
2007 – 2010
: SMA Katolik Budi Murni 1 Medan
2004 – 2007
: SMP Negeri 2 Pangaribuan, Tapanuli Utara
1998 – 2004
: SD Negeri 173194 Pangaribuan, Tapanuli Utara
----------------------------------------------------------------------------------------------------------Pengalaman Organisasi
2011 :Panitia Natal Jurusan D3-Teknik Informatika dan S-1 Teknologi Informasi
USU.
2013 :Panitia Konser Tahunan Paduan Suara Consolatio USU ke-24 sebagai
Anggota seksi dana
2017 :Panitia Kompetisi Consolatio Goes To Marktoberdorf, Jerman sebagai Ketua
seksi dana
----------------------------------------------------------------------------------------------------------Seminar dan Pelatihan
2014 : Seminar Nasional Literasi Informasi “SENARAI”
2012 : Training Webmater di Webmedia Training Center
Universitas Sumatera Utara
LAMPIRAN A
LISTING PROGRAM
FUNGSI
public void StopWatchStart()
{
stopWatch.Reset();
stopWatch.Start();
Cursor.Current = Cursors.WaitCursor;
txtLog.Text = "";
}
public void StopWatchStop(string Title)
{
stopWatch.Stop();
lblWaktu.Text = Title;
txtWaktu.Text = stopWatch.Elapsed.ToString();
Cursor.Current = Cursors.Arrow;
}
public string toBiner(int desimal, int digit)
{
string biner = "";
string buf = "";
int hasilBagi = desimal;
int p, sisa;
while (hasilBagi > 1)
{
if (hasilBagi % 2 == 1)
{
hasilBagi -= 1;
hasilBagi = hasilBagi / 2;
biner = "1" + biner;
}
else
{
hasilBagi = hasilBagi / 2;
biner = "0" + biner;
}
}
biner = hasilBagi + biner;
p = biner.Length / 8;
sisa = biner.Length % 8;
if (sisa != 0)
p += 1;
if (biner.Length < (p * 8))
for (int i = 1; i 0)
{
//biner = buf + biner;
Universitas Sumatera Utara
A-2
int len = biner.Count();
if (digit > len)
{
for (int i = 0; i < digit - len; i++)
biner = "0" + biner;
}
}
return biner;
}
public int toDecimal(string biner)
{
int result = 0;
int num = 0;
for (int i = 1; i L[i].Freq)
{
Kar = L[j].Kar;
Freq = L[j].Freq;
L[j].Kar = L[i].Kar;
L[j].Freq = L[i].Freq;
L[i].Kar = Kar;
L[i].Freq = Freq;
}
}
else if (Arah == 'Z')
{
for (int j = 0; j < L.Count - 1; j++)
for (int i = j + 1; i < L.Count; i++)
if (L[j].Freq < L[i].Freq)
{
Kar = L[j].Kar;
Freq = L[j].Freq;
L[j].Kar = L[i].Kar;
L[j].Freq = L[i].Freq;
L[i].Kar = Kar;
L[i].Freq = Freq;
}
}
return L;
}
public List BuatKode(List L)
{
string temp;
for (int j = 0; j < L.Count; j++)
{
temp = "";
for (int i = 0; i < j; i++)
temp += "1";
temp += "0";
L[j].Kode = temp;
}
Universitas Sumatera Utara
A-4
return L;
}
public List BuatKodeDelta(List L)
{
string temp;
int N, S;
for (int j = 0; j < L.Count; j++)
{
temp = "";
temp += toBiner(j + 1, 0);
L[j].Kode = temp.Remove(0, 1);
N = temp.Length;
L[j].Kode = toBiner(N, 0) + L[j].Kode;
S = toBiner(N, 0).Length - 1;
for (int i = 0; i < S; i++)
L[j].Kode = "0" + L[j].Kode;
}
return L;
}
KOMPRESI
public void Kompres()
{
int Pad;
Log = "";
CB = new List();
CT = "";
CTB = "";
JlhBit_CT = 0;
UN = HitungFreqKarakter(PT, KS);
UN = UrutkanKS(UN, 'Z');
if (rdbElias.Checked)
UN = BuatKodeDelta(UN);
else if (rdbUnary.Checked)
UN = BuatKode(UN);
for (int j = 0; j < PT.Count(); j++)
{
for (int i = 0; i < UN.Count(); i++)
{
if (PT[j] == UN[i].Kar)
{
CB.Add(UN[i].Kode);
break;
}
}
Universitas Sumatera Utara
A-5
}
// Buat Compressed Binary
for (int i = 0; i < CB.Count(); i++)
{
CTB += CB[i];
JlhBit_CT += CB[i].Count();
}
JlhKarCB = Convert.ToInt16(Math.Ceiling(Convert.ToDouble(JlhBit_CT) / 8));
// Buat Compressed Text
string b = "";
b = CTB.Substring((JlhKarCB - 1) * 8, JlhBit_CT - ((JlhKarCB - 1) * 8));
int x = b.Length;
Pad = 8 - x;
for (int i = 0; i < Pad; i++)
{
CTB += '1';
}
CBytes = new byte[JlhKarCB + 1];
for (int i = 0; i < JlhKarCB; i++)
{
b = CTB.Substring(i * 8, 8);
CT += Convert.ToChar(toDecimal(b));
CBytes[i] = Convert.ToByte(toDecimal(b));
}
CT += Convert.ToChar(Pad + 48);
CTB += toBiner(Pad + 48, 8);
// Simpan ke Array Byt
for (int i = 0; i < CT.Count(); i++)
CBytes[i] = Convert.ToByte(CT[i]);
// Cetak Hasil
for (int i = 0; i < UN.Count; i++)
Log += UN[i].Kar + "\t" + UN[i].Freq + "\t" + UN[i].Kode + "\n";
RC = Convert.ToDouble(CTB.Count() / 8) / Convert.ToDouble(PjgTeks);
RC = Convert.ToDouble(String.Format("{0:0.0000}", RC));
CR = Convert.ToDouble(CTB.Count() / 8) / Convert.ToDouble(PjgTeks) * 100;
CR = Convert.ToDouble(String.Format("{0:0.00}", CR));
Red = Convert.ToDouble(PjgTeks - (CTB.Count() / 8)) / Convert.ToDouble(PjgTeks) * 100;
Red = Convert.ToDouble(String.Format("{0:0.00}", Red));
txtPad.Text = Pad.ToString();
txtCTB.Text = CTB;
txtCT.Text = CT;
txtJlhBit_CT.Text = CTB.Count().ToString();
txtJlhKar_CT.Text = (CTB.Count() / 8).ToString();
txtRC.Text = RC.ToString();
txtCR.Text = CR.ToString() + " %";
txtRed.Text = Red.ToString() + " %";
txtLog.Text = Log;
}
Universitas Sumatera Utara
A-6
DEKOMPRESI
public string CT_ke_CTB()
{
CT = txtCT.Text.Trim(); // Substring(0, txtCT.Text.Length);
CTB = "";
TambahBit = Convert.ToInt16(CT[CT.Count() - 1]) - 48 ;
for (int i = 0; i < CT.Count() - 1; i++)
{
CTB += toBiner(Convert.ToInt16(CT[i]), 8);
}
if (TambahBit > 0)
{
CTB = CTB.Remove(CTB.Length - TambahBit, TambahBit);
}
return CTB;
}
public void Dekompres(List Tabel, string CTB)
{
String Hasil = "";
Log = "";
if (rdbElias.Checked)
{
//CTB = txtCTB.Text;
string S = "";
string KT;
char Kar = 'A';
int TC = 0;
int Index = 0;
Boolean Ketemu;
for (int i = 0; i < CTB.Count(); i++)
{
S += CTB[i];
TC++;
Ketemu = false;
for (int j = 0; j < Tabel.Count(); j++)
{
try
{
if (S == Tabel[j].Kode.Substring(0, TC))
{
KT = S;
Kar = Tabel[j].Kar;
Log += "Bit " + Index + " ke " + (Index + TC - 1) + " = " + KT + "\n";
Ketemu = true;
break;
}
}
catch { }
}
Universitas Sumatera Utara
A-7
if (Ketemu == false)
{
Hasil += Kar;
S = "";
TC = 0;
Index = i;
i--;
Log += "========================= Karakter : " + Kar + "\n\n";
}
}
Log += "======================= Karakter : " + Kar + "\n";
Hasil += Kar;
}
else if (rdbUnary.Checked)
{
//CTB = txtCTB.Text;
string S = "";
char Kar = 'A';
int TC = 0;
for (int i = 0; i < CTB.Count(); i++)
{
S += CTB[i];
if (CTB[i] == '0')
{
for (int j = 0 ; j < Tabel.Count(); j++)
if (S == Tabel[j].Kode)
{
Kar = Tabel[j].Kar;
Hasil += Kar;
break;
}
TC++;
Log += "Deretan Bit ke " + i + "\t: " + S + "\n" + "=====================
Karakter : " + Kar + "\n";
S = "";
}
}
}
JlhBit_PT = (Hasil.Count() * 8);
JlhBit_CT = Convert.ToInt16(txtJlhBit_CT.Text);
PjgTeks = Hasil.Count();
CR = Convert.ToDouble(JlhBit_CT / 8) / Convert.ToDouble(PjgTeks) * 100;
CR = Convert.ToDouble(String.Format("{0:0.00}", CR));
Red = Convert.ToDouble(PjgTeks - (JlhBit_CT / 8)) / Convert.ToDouble(PjgTeks) * 100;
Red = Convert.ToDouble(String.Format("{0:0.00}", Red));
txtCR.Text = CR.ToString() + " %";
txtRed.Text = Red.ToString() + " %";
txtPad.Text = TambahBit.ToString();
txtPT.Text = Hasil;
txtJlhKar_PT.Text = PjgTeks.ToString();
txtJlhBit_PT.Text = JlhBit_PT.ToString();
txtCTB.Text = CTB;
txtLog.Text = Log;
}
Universitas Sumatera Utara
B-1
CURRICULUM VITAE
Data Pribadi
Nama
: Julita Sinaga
Tempat/Tanggal Lahir
: Lumban Sinaga / 17 Juli 1992
Tinggi/Berat Badan
: 154 cm / 48 kg
Agama
: Kristen
Kewarganegaraan
: Indonesia
Alamat Sekarang
: Jl. Kepodang 1 No.183 Perumnas Mandala
Telp/ Hp
: 0812 6455 2304
: [email protected]
----------------------------------------------------------------------------------------------------------Riwayat Pendidikan
2013 – 2017
: S1 Extensi Ilmu Komputer Universitas Sumatera Utara
2010 – 2013
: D3 Teknik Informatika Universitas Sumatera Utara
2007 – 2010
: SMA Katolik Budi Murni 1 Medan
2004 – 2007
: SMP Negeri 2 Pangaribuan, Tapanuli Utara
1998 – 2004
: SD Negeri 173194 Pangaribuan, Tapanuli Utara
----------------------------------------------------------------------------------------------------------Pengalaman Organisasi
2011 :Panitia Natal Jurusan D3-Teknik Informatika dan S-1 Teknologi Informasi
USU.
2013 :Panitia Konser Tahunan Paduan Suara Consolatio USU ke-24 sebagai
Anggota seksi dana
2017 :Panitia Kompetisi Consolatio Goes To Marktoberdorf, Jerman sebagai Ketua
seksi dana
----------------------------------------------------------------------------------------------------------Seminar dan Pelatihan
2014 : Seminar Nasional Literasi Informasi “SENARAI”
2012 : Training Webmater di Webmedia Training Center
Universitas Sumatera Utara