Algoritma Shannon Fano Pada CSharp C#

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;
      }                      
    }
     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;
    }                
}
            
//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;
          }                      
       }
    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 = "";

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() + ")");
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");
                }
            }
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

Artikel Terkait



1 komentar:

Pro - Computer mengatakan...

gan yang (kiri, kanan, root)
itu variabel type list atau nama komponen ya ?

trims .

Poskan Komentar

Jadilah pengunjung yang aktif, komentar anda sangat berarti.