powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Кодирование информации)
2 сообщений из 2, страница 1 из 1
Кодирование информации)
    #38467780
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кто-нибудь кинуть текст программы на си или си#, которая кодирует информацию по алгоритму Шеннона Фано или Хаффмана
...
Рейтинг: 0 / 0
Кодирование информации)
    #38467783
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args);
}
class TreeCompare :IComparer<KeyValuePair<string, int>>
{
public int Compare(KeyValuePair<string, int> kvp1, KeyValuePair<string, int> kvp2)
{
return kvp1.Value.CompareTo(kvp2.Value);
}

}
class HaffmanTree
{
private List<KeyValuePair<string, int>> tree;
private List<KeyValuePair<string, bool>> listOfFreeNodes;
public HaffmanTree(char[] arraOfFrequency, int[] countOfFrequency)
{
string[] strArrayOfFrequency = new string[arraOfFrequency.Length];
for (int i = 0; i < strArrayOfFrequency.Length; i++)
{
strArrayOfFrequency[i] = Convert.ToString(arraOfFrequency[i]);
}

tree = new List<KeyValuePair<string, int>>();
for (int i = 0; i < arraOfFrequency.Length; i++)
{
tree.Insert(i, new KeyValuePair<string, int>(strArrayOfFrequency[i], countOfFrequency[i]));
}

listOfFreeNodes = new List<KeyValuePair<string, bool>>();
}

private void BuildListOfFreeNodes()
{
foreach(KeyValuePair<string, int> node in tree)
{
listOfFreeNodes.Add(new KeyValuePair<string, bool>(node.Key, true));
}
}

private bool IsFreeElement(string key)
{
return listOfFreeNodes.Any(node => key == node.Key && node.Value == true);
}

public void BuildTree()
{
IComparer<KeyValuePair<string, int>> comparer = new TreeCompare();
tree.Sort(comparer);
BuildListOfFreeNodes();
int countTrueValue = 0;
while (countTrueValue != 1)
{
int indMin1 = 0, indMin2 = 0;
int min1 = int.MaxValue, min2 = int.MaxValue;
string keyMin1 = string.Empty;
string keyMin2 = string.Empty;
foreach (KeyValuePair<string, int> kvp in tree.Where(kvp => kvp.Value < min1 && IsFreeElement(kvp.Key)))
{
keyMin1 = kvp.Key;
indMin1 = tree.IndexOf(kvp);
min1 = kvp.Value;
listOfFreeNodes[indMin1] = new KeyValuePair<string, bool>(keyMin1, false);
foreach (KeyValuePair<string, int> kvp2 in tree.Where(kvp2 => kvp2.Value < min2 && (kvp2.Value == min1 || kvp2.Value > min1) && kvp2.Key != keyMin1 && IsFreeElement(kvp2.Key)))
{
indMin2 = tree.IndexOf(kvp2);
min2 = kvp2.Value;
keyMin2 = kvp2.Key;
}
listOfFreeNodes[indMin2] = new KeyValuePair<string, bool>(keyMin2, false);
}
string result = keyMin1 + keyMin2;
tree.Add(new KeyValuePair<string, int>(result, min1 + min2));
listOfFreeNodes.Add(new KeyValuePair<string, bool>(result, true));
countTrueValue = listOfFreeNodes.Count(kvp => kvp.Value == true);
}
}

public void ShowHaffmanTree()
{
Console.WriteLine("Tree");
foreach(KeyValuePair<string, int> node in tree)
{
Console.WriteLine("{0} {1}", node.Key, node.Value);
}
Console.WriteLine();
Console.WriteLine("List of free nodes");
foreach (KeyValuePair<string, bool> node in listOfFreeNodes)
{
Console.WriteLine("{0} {1}", node.Key, node.Value);
}
}
}
}
вот нашел текст программы, но выдает ошибку ошибка CS0501: "ConsoleApplication2.Program.Main(string[])" должен объявлять тело, т.к. он не помечен модификатором abstract, extern, или partial. Как исправить?

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Кодирование информации)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]