Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2011, 00:26   #1
Вечно грустная...
Пользователь
 
Аватар для Вечно грустная...
 
Регистрация: 04.02.2011
Сообщений: 34
Печаль метод Шеннона-Фано

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
 
 
    class A
    {
       
        double[] P1 = {  0.062,  0.014,  0.038,  0.013,  0.025,  0.072,  0.072,  0.007,  0.016,  0.062  ,0.010,  0.028,  0.035,  0.026, 0.053,  0.090,  0.023,  0.040,  0.045, 0.053,  0.021,  0.002,  0.009,  0.004,  0.012,  0.006,  0.003,  0.014,  0.003,  0.014,  0.003,  0.006,  0.018 };
        char[] Alpha ={     'А',    'Б',    'В',    'Г',    'Д',    'Е',    'Ё',    'Ж',    'З',    'И',    'Й',    'К',    'Л',    'М',    'Н',    'О',    'П',    'Р',    'С',    'Т',    'У',    'Ф',    'Х',    'Ц',    'Ч',    'Ш',    'Щ',    'Ъ',    'Ы',    'Ь',    'Э',    'Ю',    'Я'};
        
                string[] Res=new string[33];
       
        double schet1=0;
         double schet2=0;
        
       
        public void Sort()
        {
            for (int i = 0; i < P1.Length; i++)
            {
                for (int j = 0; j < P1.Length - i - 1; j++)
                {
                    if (P1[j] < P1[j + 1])
                    {
                        char temp2;
                        double temp1 = 0;
 
                        temp1 = P1[j];
                        temp2 = Alpha[j];
                        P1[j] = P1[j + 1];
                        Alpha[j] = Alpha[j + 1];
                        P1[j + 1] = temp1;
                        Alpha[j + 1] = temp2;
 
                    }
                }
            }
            
 
        }
        int m;
       
        public int Delenie_Posledovatelnosty(int L, int R) 
        {
           
            schet1= 0;
         for(int i=L;i<=R-1;i++)
             {
                    schet1=schet1+P1[i];     
              }
 
            schet2=P1[R];                 
            m= R;
        while (schet1>=schet2 )
        {
                m=m-1;
                schet1=schet1 - P1[m];
                schet2=schet2+ P1[m];
        }
                return m;
 
 
        }
        int g = 0;
        
        public void Fano(int L, int R)
        {
            int n;
 
            if (L < R)
            {
 
                n = Delenie_Posledovatelnosty(L, R);
                Console.WriteLine(n);
                for (int i = L; i <= R; i++)
                {
                    if (i <= n)
                    {
                        Res[i] += Convert.ToByte(0);
                    }
                    else
                    {
                        Res[i] += Convert.ToByte(1);
                    }
                }
 
 
                
                Fano1(L, n);
 
                Fano(n + 1, R);
 
            }
                
            
        }
 
        public void Fano1(int L, int R)
        {
            int n;
 
            if (L < R)
            {
 
                n = Delenie_Posledovatelnosty(L, R);
                Console.WriteLine(n);
                for (int i = L; i <= R; i++)
                {
                    if (i <= n)
                    {
                        Res[i] += Convert.ToByte(0);
                    }
                    else
                    {
                        Res[i] += Convert.ToByte(1);
                    }
                }
 
                 Fano(L, n);
 
                Fano1(n + 1, R);
 
            }
 
 
        }
        public static void Main() 
        {
            A ob=new A();
           
 
            ob.Sort();
 
            ob.Fano(0,32);
            for (int i = 0; i < 33; i++)
            {
                
              
                    Console.WriteLine(ob.Alpha[i] + " " + ob.Res[i]);
               
            }
            
        }
        
    }
Очень нуженкод реализаций метода Шеннона-Фано на с++.
Разборчивый и не сложный код только нашла на С. У меня трудности с переводом=( Помогите пожалуйста.
Хочу жить... а не существовать...
Вечно грустная... вне форума Ответить с цитированием
Старый 11.11.2011, 00:34   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Разборчивый и не сложный код только нашла на С.
да? Вы так считаете?
тогда вынужден Вас немного огорчить...
Это не C. Это C# (Си Шарп). Это совершенно другой язык.
(хотя они с C++ "родные" братья, поэтому перевод не должен вызвать принципиальных трудностей!
(я совсем не знаю C++, поэтому ничем помочь не могу!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.11.2011, 01:01   #3
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Если перевести "дословно", получится вот так
Код:
#include <iostream>
#include <string>
#include <clocale>
using namespace std;
double P1[] = {  0.062,  0.014,  0.038,  0.013,  0.025,  0.072,  0.072,  0.007,  0.016,  0.062  ,0.010,  0.028,  0.035,  0.026, 0.053,  0.090,  0.023, 
0.040,  0.045, 0.053,  0.021,  0.002,  0.009,  0.004,  0.012,  0.006,  0.003,  0.014,  0.003,  0.014,  0.003,  0.006,  0.018 };
char Alpha[] ={     'А',    'Б',    'В',    'Г',    'Д',    'Е',    'Ё',    'Ж',    'З',    'И',    'Й',    'К',    'Л',    'М',    'Н',    'О',    'П',
   'Р',    'С',    'Т',    'У',    'Ф',    'Х',    'Ц',    'Ч',    'Ш',    'Щ',    'Ъ',    'Ы',    'Ь',    'Э',    'Ю',    'Я'};

string* Res=new string[33];

double schet1=0;
double schet2=0;


void Sort()
{
for (int i = 0; i < 33; i++)
{
for (int j = 0; j < 33 - i - 1; j++)
{
if (P1[j] < P1[j + 1])
{
char temp2;
double temp1 = 0;

temp1 = P1[j];
temp2 = Alpha[j];
P1[j] = P1[j + 1];
Alpha[j] = Alpha[j + 1];
P1[j + 1] = temp1;
Alpha[j + 1] = temp2;

}
}
}


}
int m;

int Delenie_Posledovatelnosty(int L, int R)
{

schet1= 0;
for(int i=L;i<=R-1;i++)
{
schet1=schet1+P1[i];     
}

schet2=P1[R];                 
m= R;
while (schet1>=schet2 )
{
m=m-1;
schet1=schet1 - P1[m];
schet2=schet2+ P1[m];
}
return m;


}
int g = 0;

void Fano1(int L, int R);

void Fano(int L, int R)
{
int n;

if (L < R)
{

n = Delenie_Posledovatelnosty(L, R);
cout<<n<<endl;
for (int i = L; i <= R; i++)
{
if (i <= n)
{
Res[i] += '0';
}
else
{
Res[i] += '1';
}
}



Fano1(L, n);

Fano(n + 1, R);

}
Правда код выглядит достаточно костыльным, и насколько он рабочий я не смотрел.

}

void Fano1(int L, int R)
{
int n;

if (L < R)
{

n = Delenie_Posledovatelnosty(L, R);
cout<<n<<endl;
for (int i = L; i <= R; i++)
{
if (i <= n)
{
Res[i] += '0';
}
else
{
Res[i] += '1';
}
}

Fano(L, n);

Fano1(n + 1, R);

}


}

void main()
{
setlocale(LC_ALL,"Russian");
Sort();

Fano(0,32);
for (int i = 0; i < 33; i++)
{


cout<<Alpha[i] << " " << Res[i]<<endl;

}

}
Son Of Pain вне форума Ответить с цитированием
Старый 11.11.2011, 11:41   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Вечно грустная...
Очень нуженкод реализаций метода Шеннона-Фано на с++.
Запрос "Shannon fano method C++" в Гугле задать не пробовали?.. А сходить потом по первой же вывалившейся ссылке?.. (да, чистый Си, а не "плюсы", но уж вывод сами переделать в состоянии?..).
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эффективное кодирование информации методами Шеннона-Фано и Хаффмана в Delphi LoveCookies Помощь студентам 0 06.11.2011 01:19
Теория информации. Метод сжатия Шеннона-Фано, Хаффмена и арифметический Fantazerishka Помощь студентам 0 15.02.2011 16:25
Алгоритм Фано(Pascal) makc101 Помощь студентам 0 11.12.2010 12:19
шифрование Шеннона ZET78 Общие вопросы C/C++ 3 08.09.2010 23:24
Архивация методом Шеннона-Фано Ketu Паскаль, Turbo Pascal, PascalABC.NET 2 13.10.2008 19:42