65 LISTING PROGRAM 1. Mainform.cs using stem; Sy using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace Home / <summary> / Description of MainForm. / </summary> public partial class MainForm : Form public MainForm() The InitializeComponent() call is required for Windows Forms designer support. InitializeComponent(); TODO: Add constructor code after the InitializeComponent() call. void MainFormLoad(object sender, EventArgs e) Home frmcld = new Home(); frmcld.mdiparent=this; frmcld.show(); void AboutToolStripMenuItemClick(object sender, EventArgs e) About frmcld = new About(); frmcld.mdiparent=this; frmcld.show(); void EliasGammaCodeToolStripMenuItemClick(object sender, Even targs e) Elias frmcld = new Elias(); frmcld.mdiparent=this; frmcld.show(); gs e) void ShannonFanoToolStripMenuItemClick(object sender, EventAr Shannon frmcld = new Shannon(); frmcld.mdiparent=this; frmcld.show();
66 void HelpToolStripMenuItemClick(object sender, EventArgs e) Help frmcld = new Help(); frmcld.mdiparent=this; frmcld.show(); void ExitToolStripMenuItemClick(object sender, EventArgs e) this.close(); void HomeToolStripMenuItemClick(object sender, EventArgs e) Home frmcld = new Home(); frmcld.mdiparent=this; frmcld.show(); 2. Elias.cs using stem; Sy using System.Drawing; using System.IO; using System.Dynamic; using System.Windows.Forms; using System.Text; using System.Collections.Generic; using IronPython.Hosting; namespace Home / <summary> / Description of Elias. / </summary> public partial class Elias : Form public Elias() The InitializeComponent() call is required for Windows Forms designer support. InitializeComponent(); TODO: Add constructor code after the InitializeComponent() call. void ButtonBrowseClick(object sender, EventArgs e) OpenFileDialog dialog = new OpenFileDialog(); dialog.filter = "Document (MsWord) *.doc"; dialog.title = "Open file doc : "; dialog.restoredirectory = true;
67 if(dialog.showdialog() == DialogResult.OK) string dirname = System.IO.Path.GetDirectoryName(dialog.FileName); var fileinfo = new FileInfo(dialog.FileName); var size= fileinfo.length; string drive = dirname.split(system.io.path.volumeseparatorchar)[1]; txtukuranfilee.text=size.tostring(); textboxloadfilepath.text = dirname + "\\" + dialog.safefilename.tostring(); buttonbaca.enabled = true; void ButtonBacaClick(object sender, EventArgs e) Microsoft.Office.Interop.Word.Application wordapp = new Microsoft.Office.Interop.Word.ApplicationClass(); object filenameo = textboxloadfilepath.text.tostring(); object objfalse = false; object objtrue = true; object missing = System.Reflection.Missing.Value; object emptydata = string.empty; try Microsoft.Office.Interop.Word.Document adoc = wordapp.documents.open(ref filenameo, ref objfalse, ref objtrue, r ef missing, ref missing, ref missing, ref missing, ref missing, ref m issing, ref missing, ref objtrue, ref missing, ref missing, ref missi ng, ref missing); adoc.activewindow.selection.wholestory(); adoc.activewindow.selection.copy(); IDataObject data = System.Windows.Forms.Clipboard.GetDataObject(); String filetext = data.getdata(system.windows.forms.dataformats.text).tostring(); System.Windows.Forms.Clipboard.SetDataObject(string.E mpty); textboxdisplaytext.text = filetext; catch(exception err) MessageBox.Show(err.Message); finally MessageBox.Show("File berhasil dibaca"); btncompresseg.enabled = true; void BtnCompressEGClick(object sender, EventArgs e) var input = textboxdisplaytext.text; try var ipy = Python.CreateRuntime(); dynamic eliasgamma =
68 ipy.usefil e ("eliasgamma.py"); DateTime starttime = DateTime.Now; dynamic CR = eliasgamma.processeg(input); dynamic RedudancyData = eliasgamma.processeg1(input); dynamic hasilcompress = eliasgamma.processeg2(input); DateTime endtime = DateTime.Now; TimeSpan elapsed = endtime.subtract(starttime); txtwaktukompres.text = elapsed.hours.tostring("00") + ":" + elapsed.minutes.tostring("00") + ":" + elapsed.se conds.tostring("00") + "." + elapsed.milliseconds.tostring("000"); txtredudancyelias.text= RedudancyData.ToString(); txthasil.text = hasilcompress.tostring(); txtrasio.text = CR.ToString(); File.WriteAllText("D:/data.txt", txthasil.text); var fileinfo = new FileInfo("D:/data.txt"); var size= fileinfo.length; ukuranfile.text=size.tostring(); catch(exception ex) MessageBox.Show(ex.ToString()); btndecompresseg.enabled = true; void TimereliasTick(object sender, EventArgs e) void BtnDecompressEGClick(object sender, EventArgs e) SaveFileDialog savefiledialog1 = new SaveFileDialog(); savefiledialog1.filter = "Word 1997-2003 *.doc Word 2007-2013 *.docx Rich Text File *.rtf All Files (*.*) *.*"; savefiledialog1.title = ""; var input = textboxdisplaytext.text; try var ipy = Python.CreateRuntime(); dynamic eliasgamma = ipy.usefile("eliasgamma.py"); DateTime starttime = DateTime.Now; dynamic hasildecompress = eliasgamma.processeg3(input); DateTime endtime = DateTime.Now; TimeSpan elapsed = endtime.subtract(starttime); txtwaktudekompres.text = elapsed.hours.tostring("00") + ":" + elapsed.minutes.tostring("00") + ":" + elapsed.se
69 conds.tostri ng ("00") + "." + elapsed.milliseconds.tostring("000"); txtdecompresselias.text = hasildecompress.tostring(); if (savefiledialog1.showdialog() == DialogResult.OK) String filetext = txtdecompresselias.text; Microsoft.Office.Interop.Word.Application oword = new Microsoft.Office.Interop.Word.Application(); oword.visible = true; var odoc = oword.documents.add(); Insert a paragraph at the beginning of the document. var paragraph1 = odoc.content.paragraphs.add(); paragraph1.range.text = filetext; odoc.saveas(@savefiledialog1.filename); MessageBox.Show("Penyimpanan berhasil", savefiledialog1.filename); oword.quit(); catch(exception ex) MessageBox.Show(ex.ToString()); btnreset.enabled = true; void TxtDecompressEliasTextChanged(object sender, EventArgs e) void BtnResetClick(object sender, EventArgs e) textboxloadfilepath.text = ""; txtukuranfilee.text = ""; ukuranfile.text = ""; txtrasio.text = ""; txtwaktukompres.text = ""; txtredudancyelias.text = ""; txtwaktudekompres.text = ""; textboxdisplaytext.text = ""; txthasil.text = ""; txtdecompresselias.text = ""; buttonbaca.enabled = false; btncompresseg.enabled = false; btndecompresseg.enabled = false; btnreset.enabled = false;
70 3. Shannon-Fano.cs using stem; Sy using System.Drawing; using System.IO; using System.Dynamic; using System.Windows.Forms; using System.Text; using System.Collections.Generic; using IronPython.Hosting; namespace Home / <summary> / Description of Shannon. / </summary> public partial class Shannon : Form public Shannon() The InitializeComponent() call is required for Windows Forms designer support. InitializeComponent(); TODO: Add constructor code after the InitializeComponent() call. void ButtonBrowseClick(object sender, EventArgs e) OpenFileDialog dialog = new OpenFileDialog(); dialog.filter = "Document (MsWord) *.doc"; dialog.title = "Open file doc : "; dialog.restoredirectory = true; if(dialog.showdialog() == DialogResult.OK) string dirname = System.IO.Path.GetDirectoryName(dialog.FileName); var fileinfo = new FileInfo(dialog.FileName); var size= fileinfo.length; string drive = dirname.split(system.io.path.volumeseparatorchar)[1]; txtukuranfiles.text=size.tostring(); textboxloadfilepath.text = dirname + "\\" + dialog.safefilename.tostring(); buttonbaca.enabled=true; void ButtonBacaClick(object sender, EventArgs e) Microsoft.Office.Interop.Word.Application wordapp = new Microsoft.Office.Interop.Word.ApplicationClass(); object filenameo = textboxloadfilepath.text.tostring(); object objfalse = false; object objtrue = true; object missing = System.Reflection.Missing.Value; object emptydata = string.empty;
71 try Microsoft.Office.Interop.Word.Document adoc = wordapp.documents.open(ref filenameo, ref objfalse, ref objtrue, r ef missing, ref missing, ref missing, ref missing, ref missing, ref m issing, ref missing, ref objtrue, ref missing, ref missing, ref missi ng, ref missing); adoc.activewindow.selection.wholestory(); adoc.activewindow.selection.copy(); IDataObject data = System.Windows.Forms.Clipboard.GetDataObject(); String filetext = data.getdata(system.windows.forms.dataformats.text).tostring(); System.Windows.Forms.Clipboard.SetDataObject(string.E mpty); textboxdisplaytext.text = filetext; catch(exception err) MessageBox.Show(err.Message); finally MessageBox.Show("File berhasil dibaca"); btncompresssf.enabled=true; void BtnCompressSFClick(object sender, EventArgs e) var input = textboxdisplaytext.text; try var ipy = Python.CreateRuntime(); dynamic shannonfano = ipy.usefile("shannonfano.py"); DateTime starttime = DateTime.Now; dynamic CR = shannonfano.processsf(input); dynamic RedudancyData = shannonfano.processsf1(input); dynamic hasilcompress = shannonfano.processsf2(input); DateTime endtime = DateTime.Now; TimeSpan elapsed = endtime.subtract(starttime); txtwaktukompres.text = elapsed.hours.tostring("00") + ":" + elapsed.minutes.tostring("00") + ":" + elapsed.se conds.tostring("00") + "." + elapsed.milliseconds.tostring("000"); txtredudancyshannon.text= RedudancyData.ToString(); txthasil.text = hasilcompress.tostring(); txtrasio.text = CR.ToString(); File.WriteAllText("D:/data.txt", txthasil.text); var fileinfo = new FileInfo("D:/data.txt");
72 var size= fileinfo.length; ukuranfile.text=size.tostring(); catch(exception ex) MessageBox.Show(ex.ToString()); btndecompresssf.enabled=true; void BtnDecompressSFClick(object sender, EventArgs e) SaveFileDialog savefiledialog1 = new SaveFileDialog(); savefiledialog1.filter = "Word 1997-2003 *.doc Word 2007-2013 *.docx Rich Text File *.rtf All Files (*.*) *.*"; savefiledialog1.title = ""; var input = textboxdisplaytext.text; try var ipy = Python.CreateRuntime(); dynamic shannonfano = ipy.usefile("shannonfano.py"); DateTime starttime = DateTime.Now; dynamic hasildecompress = shannonfano.processsf3(input); DateTime endtime = DateTime.Now; TimeSpan elapsed = endtime.subtract(starttime); txtwaktudekompres.text = elapsed.hours.tostring("00") + ":" + elapsed.minutes.tostring("00") + ":" + elapsed.se conds.tostring("00") + "." + elapsed.milliseconds.tostring("000"); txtdecompressshannon.text = hasildecompress.tostring(); if (savefiledialog1.showdialog() == DialogResult.OK) String filetext = txtdecompressshannon.text; Microsoft.Office.Interop.Word.Application oword = new Microsoft.Office.Interop.Word.Application(); oword.visible = true; var odoc = oword.documents.add(); Insert a paragraph at the beginning of the document. var paragraph1 = odoc.content.paragraphs.add(); paragraph1.range.text = filetext; odoc.saveas(@savefiledialog1.filename); MessageBox.Show("Penyimpanan berhasil", savefiledialog1.filename); oword.quit(); catch(exception ex)
73 MessageBox.Show(ex.ToString()); btnreset.enabled=true; void BtnResetClick(object sender, EventArgs e) textboxloadfilepath.text = ""; txtukuranfiles.text = ""; ukuranfile.text = ""; txtrasio.text = ""; txtwaktukompres.text = ""; txtredudancyshannon.text = ""; txtwaktudekompres.text = ""; textboxdisplaytext.text = ""; txthasil.text = ""; txtdecompressshannon.text = ""; buttonbaca.enabled = false; btncompresssf.enabled = false; btndecompresssf.enabled = false; btnreset.enabled = false; void Label8Click(object sender, EventArgs e) 4. Eliasgamma.py #*- coding: utf-8 -*- #title: Elias' Gamma and Shannon-Fano's Algorithm #purpose: Data Compression #author: 1.Mohammad Andri Budiman 2.Nurhennida Br Sitepu #version: 1.3 #date: May 5nd 2014 #time: 18:30 from math import log #fungsi berikut ini mengembalikan 2 nilai, yaitu: #(1) list char = karakter apa saja yang ada pada string st #(2) list freq = berapa frequency masing-masing karakter def count_freq(st): char = list(set(st)) freq = [] for i in char: x = st.count(i) freq.append(x) return char, freq #fungsi berikut ini mengembalikan 2 nilai yaitu: #(1) list freq yang sudah tersortir descending order #(2) list char yang sudah tersortir mengikuti urutan freq-nya def InsertionSort(f, c): n = len(f)
74 for i in range(1, n): for j in range(0, i): if f[i] > f[j]: f.insert(j, f.pop(i)) c.insert(j, c.pop(i)) return f, c #fungsi berikut ini menjumlahkan semua angka yang ada pada list f def sum(f): s = 0 for i in f: s = s + i return s #fungsi berikut ini mengembalikan 2 nilai, yaitu: #(1) difference = beda antara jumlah freq table atas dgn jumlah freq table bawah #(2) row = baris tempat pemotongan tabel, dihitung dari bawah def findrow(f): difference = sum(f) row = 1 t = len(f) for i in range(1, t): upper = f[0:(t-i)] lower = f[t - i:] x = abs(sum(upper) - sum(lower)) if x < difference: difference = x # difference = beda antara jumlah freq table atas dgn jumlah freq table bawah row = i # row = baris tempat pemotongan table return difference, row def EliasGamma(st): if len(st) <= 1: raise Exception(' String harus > 1') t = len(char) if t == 1: return char[0], '1' eg = [] for i in range(1, t + 1): if i == 1: eg.append('1') continue z = countzero(i) s = '' for j in range(z): s = s + '0' s = s + '1' c = i - pow(2, z) # banyaknya sisa i - 2^n b = dec2bin(c) pad = z - len(b) s = s + pad * '0' + b eg.append(s) return char, eg
75 def untzero(n): co return int(log(n,2)) def dec2bin(dec): dec = int(dec) bin = '' r = dec % 2 bin = str(r) + bin dec=2 while(dec!= 0): r = dec % 2 bin = str(r) + bin dec=2 return bin def bin2dec(bin): bin = bin[::-1] n = 1 dec = 0 for i in bin: dec+=(int(i) * n) n*=2 return dec #fungsi berikut mengubah string-bits menjadi kode ASCII def encode(sb): code = '' for i in range(0, len(sb), 8): x = sb[i:i+8] y = chr(bin2dec(str(x))) code += y return code #fungsi berikut mengubah kode ASCII kembali menjadi string-bits def decode(code): sb = '' t = len(code) for i in range(len(code)): x = code[i] y = dec2bin(ord(x)) if len(y) < 8: z = 8 - len(y) % 8 y = '0' * z + y sb += y return sb #fungsi berikut mengubah string menjadi string-bits def string2sb(st, c, s): sb = '' for i in st: k = c.index(i) sb = sb + s[k] x = len(sb) % 8 pad = 0 if x!= 0: pad = (8 - x) sb = sb + '0' * pad d = dec2bin(pad) dl = len(d) y = 8 - dl
76 sb = sb + '0' * y + d return sb #fungsi berikut mengubah string-bits kembali menjadi string def decompress(sb, c, s): st = '' bit = '' t = len(sb) pad = bin2dec(sb[-8:]) sb = sb[0:t-pad-8] for i in range(len(sb)): bit = bit + sb[i] if bit in s: x = s.index(bit) y = c[x] st = st + y bit = '' return st def processeg(st): c, s = EliasGamma(st) for i in range(len(c)): sb = string2sb(st, c, s) uncompressed_bits = len(st) * 8 compressed_bits = len(sb) CR = (uncompressed_bits * 1.0) / compressed_bits return CR def processeg1(st): c, s = EliasGamma(st) for i in range(len(c)): sb = string2sb(st, c, s) uncompressed_bits = len(st) * 8 compressed_bits = len(sb) CR = (uncompressed_bits * 1.0) / compressed_bits SS = (1.0-1.0/CR) * 100 return SS def processeg2(st): c, s = EliasGamma(st) for i in range(len(c)): sb = string2sb(st, c, s) uncompressed_bits = len(st) * 8 compressed_bits = len(sb) CR = (uncompressed_bits * 1.0) / compressed_bits SS = (1.0-1.0/CR) * 100 code = encode(sb) dc = decode(code) return dc def processeg3(st): c, s = EliasGamma(st)
77 for i in range(len(c)): sb = string2sb(st, c, s) uncompressed_bits = len(st) * 8 compressed_bits = len(sb) CR = (uncompressed_bits * 1.0) / compressed_bits SS = (1.0-1.0/CR) * 100 code = encode(sb) dc = decode(code) ds = decompress(dc, c, s) return ds 5.Shannonfano.py #*- coding: utf-8 -*- #title: Elias' Gamma and Shannon-Fano's Algorithm #purpose: Data Compression #author: 1.Mohammad Andri Budiman 2.Nurhennida Br Sitepu #version: 1.3 #date: May 5nd 2014 #time: 18:30 from math import log #fungsi berikut ini mengembalikan 2 nilai, yaitu: #(1) list char = karakter apa saja yang ada pada string st #(2) list freq = berapa frequency masing-masing karakter def count_freq(st): char = list(set(st)) freq = [] for i in char: x = st.count(i) freq.append(x) return char, freq #fungsi berikut ini mengembalikan 2 nilai yaitu: #(1) list freq yang sudah tersortir descending order #(2) list char yang sudah tersortir mengikuti urutan freq-nya def InsertionSort(f, c): n = len(f) for i in range(1, n): for j in range(0, i): if f[i] > f[j]: f.insert(j, f.pop(i)) c.insert(j, c.pop(i)) return f, c #fungsi berikut ini menjumlahkan semua angka yang ada pada list f def sum(f): s = 0 for i in f: s = s + i return s #fungsi berikut ini mengembalikan 2 nilai, yaitu: #(1) difference = beda antara jumlah freq table atas dgn jumlah freq table bawah #(2) row = baris tempat pemotongan tabel, dihitung dari bawah def findrow(f): difference = sum(f)
78 row = 1 t = len(f) for i in range(1, t): upper = f[0:(t-i)] lower = f[t - i:] x = abs(sum(upper) - sum(lower)) if x < difference: difference = x # difference = beda antara jumlah freq table atas dgn jumlah freq table bawah row = i # row = baris tempat pemotongan table return difference, row #fungsi berikut ini berfungsi melakukan table splitting secara rekursif, sekaligus meng-update kode Shannon-Fano def split(s, F, C, charset, sf): t = len(s) if t > 1: diff, row = findrow(f) S1 = [] S2 = [] F1 = [] F2 = [] C1 = [] C2 = [] S1 = S[0:t - row] S2 = S[t - row:] F1 = F[0:t - row] F2 = F[t - row:] for i in range(t): if i < t - row: C[i] = str(c[i]) + '0' else: C[i] = str(c[i]) + '1' C1 = C[0:t - row] C2 = C[t - row:] if len(s1) == 1: charset.append(s1[0]) sf.append(c1[0]) if len(s2) == 1: charset.append(s2[0]) sf.append(c2[0]) split(s1, F1, C1, charset, sf) split(s2, F2, C2, charset, sf) #fungsi berikut ini mengembalikan 2 nilai, yaitu: #(1) charset = character set #(2) sf = kode Shannon-Fano yang bersesuaian def ShannonFano(st): if len(st) <= 1: raise Exception(' String harus > 1') t = len(char) if t == 1: return char[0], '1' global charset, sf code = [] charset = [] sf = []
79 for i in range(t): code.append('') split(char, freq, code, charset, sf) return charset, sf def dec2bin(dec): dec = int(dec) bin = '' r = dec % 2 bin = str(r) + bin dec=2 while(dec!= 0): r = dec % 2 bin = str(r) + bin dec=2 return bin def bin2dec(bin): bin = bin[::-1] n = 1 dec = 0 for i in bin: dec+=(int(i) * n) n*=2 return dec #fungsi berikut mengubah string-bits menjadi kode ASCII def encode(sb): code = '' for i in range(0, len(sb), 8): x = sb[i:i+8] y = chr(bin2dec(str(x))) code += y return code #fungsi berikut mengubah kode ASCII kembali menjadi string-bits def decode(code): sb = '' t = len(code) for i in range(len(code)): x = code[i] y = dec2bin(ord(x)) if len(y) < 8: z = 8 - len(y) % 8 y = '0' * z + y sb += y return sb #fungsi berikut mengubah string menjadi string-bits def string2sb(st, c, s): sb = '' for i in st: k = c.index(i) sb = sb + s[k] x = len(sb) % 8 pad = 0 if x!= 0: pad = (8 - x) sb = sb + '0' * pad d = dec2bin(pad)
80 dl = len(d) y = 8 - dl sb = sb + '0' * y + d return sb #fungsi berikut mengubah string-bits kembali menjadi string def decompress(sb, c, s): st = '' bit = '' t = len(sb) pad = bin2dec(sb[-8:]) sb = sb[0:t-pad-8] for i in range(len(sb)): bit = bit + sb[i] if bit in s: x = s.index(bit) y = c[x] st = st + y bit = '' return st def processsf(st): c, s = ShannonFano(st) for i in range(len(c)): sb = string2sb(st, c, s) uncompressed_bits = len(st) * 8 compressed_bits = len(sb) CR = (uncompressed_bits * 1.0) / compressed_bits return CR def processsf1(st): c, s = ShannonFano(st) for i in range(len(c)): sb = string2sb(st, c, s) uncompressed_bits = len(st) * 8 compressed_bits = len(sb) CR = (uncompressed_bits * 1.0) / compressed_bits SS = (1.0-1.0/CR) * 100 return SS def processsf2(st): c, s = ShannonFano(st) for i in range(len(c)): sb = string2sb(st, c, s) uncompressed_bits = len(st) * 8 compressed_bits = len(sb) CR = (uncompressed_bits * 1.0) / compressed_bits SS = (1.0-1.0/CR) * 100 code = encode(sb) dc = decode(code) ds = decompress(dc, c, s) return dc def processsf3(st):
81 c, s = ShannonFano(st) for i in range(len(c)): sb = string2sb(st, c, s) uncompressed_bits = len(st) * 8 compressed_bits = len(sb) CR = (uncompressed_bits * 1.0) / compressed_bits SS = (1.0-1.0/CR) * 100 code = encode(sb) dc = decode(code) ds = decompress(dc, c, s) return ds
82 CURRICULUM VITAE Data Pribadi Nama Lengkap : Nurhennida Br Sitepu Nama Panggilan : Nur Tempat/ Tgl. Lahir : Berastagi, 1 Maret 1992 Jenis Kelamin : Perempuan Agama : Islam Warga Negara : Indonesia Alamat : Jl. Pasar VII No.12 Padang Bulan Medan No. HP : 087884858092 / 085658052929 Email : nurhestp@gmail.com Status : Belum Menikah Latar Belakang Pendidikan 1. SD SD Neg 040458 Berastagi 2. SMP SMP N.1 Berastagi 3. SMA SMA N.1 Berastagi 4. Universitas Pengalaman Kerja No Instansi/Lembaga Jabatan/Posisi Tahun 1 LCC Pengajar 2010 2011 2 IKLC Kepala Divisi Karya / Pengajar 2013 2014 Kemampuan dalam Bidang Komputer Software Aplikasi : Microsoft Office, Photoshop, Dreamweaver Bahasa Pemrograman : C++, C# Simulator : Matlab
83 Pengalaman Organisasi No Nama Organisasi Jabatan Tahun Menjabat 1 OSIS SMA N.1 Berastagi Sekretaris Umum 2008 2009 2 BKM SMA N.1 Berastagi Angggota Humas 2009 2010 3 BKM Al-KHUWARIZMI Anggota Kewirausahaan 2010 2011 4 IMILKOM Anggota Kemahasiswaan 2011 2012 5 GAMADIKSI Anggota Divisi pendidikan 2011 2012 6 UKMI Al-KHUWARIZMI Bendahara Umum 2011 2012 7 IMILKOM Kepala Biro Kesekretariatan 2012 2013 8 UKM ROBOTIK SIKONEK Sekretaris Umum 2013 2014 9 IMILKOM Kepala Biro Kesekretariatan 2013 2014 10 Relawan TIK Sumatera Utara Anggota 2013 Sekarang