kalo beberapa waktu yang lalu sudah dibahas tentang cara membuat algoritma LZW(salah satu algoritma kompresi) di C#. kali ini akan dibahas tentang algoritma Shannon Fano. Shannon fano juga merupakan algoritma kompresi, hanya mempunyai cara kerja pengkompresian yang berbeda dengan LZW. oke sekarang kita mulai membuat projectnya
langkah 1 : buat project baru, klik menu file, pilih new project, kotak project name diisi sesuai keinginan (bebas)
langkah 2 : tambahkan componen tiga label, satu tree view, satu textbox, satu button dan satu datagridview.
langkah 3 : atur dan tata sedemikian rupa sehingga tambpilannya seperti pada gambar dibawah ini
langkah 4 : pada button1, tambahkan source code berikut ini
string outPut,data;
bool statusTulis;
int indek,jum;
data=textBox1.Text.Trim().ToUpper();
outPut = "";
indek = 0;
jum = 0;
dataGridView1.Rows.Clear();
label1.Text = data.Length.ToString();
label1.Text += " karakter";
for (int i = 0; i < data.Length; i++)
{
if (data.Substring(i, 1) == " ")
{
data=data.Remove(i, 1);
}
statusTulis=true;
for (int j = i+1; j < data.Length; j++)
{
if (data.Substring(i, 1) == data.Substring(j, 1))
{
statusTulis=false;
}
bool statusTulis;
int indek,jum;
data=textBox1.Text.Trim().ToUpper();
outPut = "";
indek = 0;
jum = 0;
dataGridView1.Rows.Clear();
label1.Text = data.Length.ToString();
label1.Text += " karakter";
for (int i = 0; i < data.Length; i++)
{
if (data.Substring(i, 1) == " ")
{
data=data.Remove(i, 1);
}
statusTulis=true;
for (int j = i+1; j < data.Length; j++)
{
if (data.Substring(i, 1) == data.Substring(j, 1))
{
statusTulis=false;
}
}
if (statusTulis==true)
{
dataGridView1.Rows.Add(1);
outPut=outPut+data.Substring(i,1);
dataGridView1.Rows[indek].Cells[0].Value =
if (statusTulis==true)
{
dataGridView1.Rows.Add(1);
outPut=outPut+data.Substring(i,1);
dataGridView1.Rows[indek].Cells[0].Value =
data.Substring(i, 1);
indek = indek + 1;
}
indek = indek + 1;
}
}
//check count each karakter
for (int i=0;i<(dataGridView1.Rows.Count-1);i++)
{
jum = 0;
for (int j = 0; j < data.Length; j++)
{
if (dataGridView1.Rows[i].Cells[0].Value.ToString() ==
//check count each karakter
for (int i=0;i<(dataGridView1.Rows.Count-1);i++)
{
jum = 0;
for (int j = 0; j < data.Length; j++)
{
if (dataGridView1.Rows[i].Cells[0].Value.ToString() ==
data.Substring(j, 1))
{
jum = jum + 1;
}
{
jum = jum + 1;
}
}
dataGridView1.Rows[i].Cells[1].Value = (jum).ToString();
}
treeView1.Nodes.Clear();
root = treeView1.Nodes.Add(data.Length.ToString());
sortData();
//DataGridViewColumn newColumn = dataGridView1.Columns[1];
//dataGridView1.Sort(newColumn, ListSortDirection.Descending);
drawTree();
dataGridView1.Rows[i].Cells[1].Value = (jum).ToString();
}
treeView1.Nodes.Clear();
root = treeView1.Nodes.Add(data.Length.ToString());
sortData();
//DataGridViewColumn newColumn = dataGridView1.Columns[1];
//dataGridView1.Sort(newColumn, ListSortDirection.Descending);
drawTree();
Langkah 5: tambahkan function sortData() dan function drawTree()
untuk sordData() berikut ini adalah source codenya
int temp;
string tempKa;
int k;
k = 0;
ArrayList tempData = new ArrayList();
ArrayList tempKarakter = new ArrayList();
tempData.Clear();
tempKarakter.Clear();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
tempData.Add(Convert.ToInt16(dataGridView1.Rows[i].Cells[1].Value));
tempKarakter.Add(Convert.ToString(dataGridView1.Rows[i].Cells[0].Value));
}
for (int i = 0; i < tempData.Count-1; i++)
{
for (int j = 0; j < tempData.Count-1; j++)
{
if (Convert.ToInt16(tempData[j+1])>Convert.ToInt16(tempData[j]))
{
temp = Convert.ToInt16(tempData[j]);
tempData[j] = Convert.ToInt16(tempData[j+1]);
tempData[j + 1] = temp;
tempKa = tempKarakter[j].ToString();
tempKarakter[j] = tempKarakter[j + 1].ToString();
tempKarakter[j + 1] = tempKa;
}
}
}
for (k = 0; k < tempData.Count; k++)
{
dataGridView1.Rows[k].Cells[1].Value = tempData[k].ToString();
dataGridView1.Rows[k].Cells[0].Value = tempKarakter[k].ToString();
}
dataGridView1.Rows[k-1].Cells[1].Value = "";
string tempKa;
int k;
k = 0;
ArrayList tempData = new ArrayList();
ArrayList tempKarakter = new ArrayList();
tempData.Clear();
tempKarakter.Clear();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
tempData.Add(Convert.ToInt16(dataGridView1.Rows[i].Cells[1].Value));
tempKarakter.Add(Convert.ToString(dataGridView1.Rows[i].Cells[0].Value));
}
for (int i = 0; i < tempData.Count-1; i++)
{
for (int j = 0; j < tempData.Count-1; j++)
{
if (Convert.ToInt16(tempData[j+1])>Convert.ToInt16(tempData[j]))
{
temp = Convert.ToInt16(tempData[j]);
tempData[j] = Convert.ToInt16(tempData[j+1]);
tempData[j + 1] = temp;
tempKa = tempKarakter[j].ToString();
tempKarakter[j] = tempKarakter[j + 1].ToString();
tempKarakter[j + 1] = tempKa;
}
}
}
for (k = 0; k < tempData.Count; k++)
{
dataGridView1.Rows[k].Cells[1].Value = tempData[k].ToString();
dataGridView1.Rows[k].Cells[0].Value = tempKarakter[k].ToString();
}
dataGridView1.Rows[k-1].Cells[1].Value = "";
Sedangkan untuk source code drawTree() sebagai berikut ini
for (int i = 0; i < dataGridView1.Rows.Count - 2; i++)
{
if (i == 0)
{
kiri = root.Nodes.Add("0 " + DataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i].Cells[1].Value.ToString() + ")");
{
if (i == 0)
{
kiri = root.Nodes.Add("0 " + DataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i].Cells[1].Value.ToString() + ")");
kanan = root.Nodes.Add("1");
}
else if (i == dataGridView1.Rows.Count - 3)
{
kiri = kanan.Nodes.Add("0 " + dataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i].Cells[1].Value.ToString() + ")");
kanan = kanan.Nodes.Add("1 " + dataGridView1.Rows[i + 1].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i + 1].Cells[1].Value.ToString() + ")");
}
else
{
kiri = kanan.Nodes.Add("0 " + dataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i].Cells[1].Value.ToString() + ")");
kanan = kanan.Nodes.Add("1");
}
}
}
else if (i == dataGridView1.Rows.Count - 3)
{
kiri = kanan.Nodes.Add("0 " + dataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i].Cells[1].Value.ToString() + ")");
kanan = kanan.Nodes.Add("1 " + dataGridView1.Rows[i + 1].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i + 1].Cells[1].Value.ToString() + ")");
}
else
{
kiri = kanan.Nodes.Add("0 " + dataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper() + ":(" + dataGridView1.Rows[i].Cells[1].Value.ToString() + ")");
kanan = kanan.Nodes.Add("1");
}
}
treeView1.ExpandAll();
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
if (i < dataGridView1.Rows.Count - 2)
{
dataGridView1.Rows[i].Cells[2].Value = "0";
for (int j = 0; j < i; j++)
{
dataGridView1.Rows[i].Cells[2].Value = dataGridView1.Rows[i].Cells[2].Value.ToString() + "1";
}
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "";
for (int j = 0; j < i; j++)
{
dataGridView1.Rows[i].Cells[2].Value = dataGridView1.Rows[i].Cells[2].Value.ToString() + "1";
}
}
}
Langkah 6. Done Program selesai dibuat...
jika keenam langkah diatas dilakukan dengan benar, maka jika program dijalankan hasilnya akan seperti gambar berikut ini
1 komentar:
gan yang (kiri, kanan, root)
itu variabel type list atau nama komponen ya ?
trims .
Posting Komentar
Jadilah pengunjung yang aktif, komentar anda sangat berarti.