Форум программистов, компьютерный форум, киберфорум
Наши страницы

Архивация Хаффмана - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поиска в двумерном массиве http://www.cyberforum.ru/cpp-beginners/thread1197191.html
Разработать программу поиска в двумерном массиве максимального элемента у удаления строки и столбца, содержащего найденный элемент. Массив заполняется случайным образом. Размер массива задается...
C++ Размер массива из другой функции Не могу понять, почему не получается получить размер массива из другой функции. Если размер считать из той функции где создается массив, всё получается. int arraysize (int& a); // прототип... http://www.cyberforum.ru/cpp-beginners/thread1197181.html
C++ Проверить, есть ли у двух квадратных уравнений совпадающие корни
Помогите пожалуйста доделать задачу: Найти корни уравнений ax^3+bx^2+cx=0 и y^3-ay^2-b=0, используя процедуру. Есть ли у этих уравнений совпадающие корни? Вот что я сделал: #include <iostream>...
C++ Зацикленность в программе
Вот есть программа: #include <iostream> #include <math.h> #include <iomanip> using namespace std; typedef double(*type_function)(double); double function_1(double x)
C++ Ошибка в программе http://www.cyberforum.ru/cpp-beginners/thread1197168.html
Доброго времени суток! Не совсем уверена в условии вывода. В идеале она должна из файла выводить строки с n по m. #include "stdafx.h" #include <iostream> #include <fstream> #include...
C++ Ошибка в программе Доброго времени суток! Не могу понять в чем дело.. #include "stdafx.h" #include <iostream> #include <windows.h> using namespace std; int main() { setlocale( LC_ALL,"Russian" ); подробнее

Показать сообщение отдельно
gap
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 13

Архивация Хаффмана - C++

03.06.2014, 00:00. Просмотров 248. Ответов 0
Метки (Все метки)

Доброго времени суток!
Нашел в видео реализацию архивации по Хаффману, пробую, но компилятор ругается...Помогите разобраться

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>
#include <vector>
#include <map>
#include <list>
#include <fstream>
using namespace std;
 
class Node
{
    public:
     int a;
     char c;
     Node *left, *right;
     
     Node(){left=right=NULL;}
 
     Node(Node *L, Node *R) 
     {  left =  L;
        right = R;
        a = L->a + R->a;  }
};
 
 
struct MyCompare
{
    bool operator()(const Node* l, const Node* r) const { return l->a < r->a; }
};
 
 
vector<bool> code;                
map<char,vector<bool> > table;    
 
void BuildTable(Node *root)
{   
    if (root->left!=NULL) 
                      { code.push_back(0);
                      BuildTable(root->left);}
     
    if (root->right!=NULL)
                       { code.push_back(1);
                       BuildTable(root->right);}
   
    if (root->c) table[root->c]=code;     
    
    code.pop_back();
}
 
 
int main (int argc, char *argv[])
{
////// считаем частоты символов 
    
    ifstream f("1.txt");
    
    map<char,int> m;
 
    while (!f.eof())
    { char c = f.get(); 
       m[c]++;}
    
  
////// записываем начальные узлы в список list
                 
   list<Node*> t;
   for( map<char,int>::iterator itr=m.begin(); itr!=m.end(); ++itr)
   {  
      Node *p = new Node;
      p->c = itr->first;
      p->a = itr->second;  
      t.push_back(p);      }    
    
 
//////  создаем дерево      
 
  while (t.size()!=1)
  {  
     t.sort(MyCompare());
    
     Node *SonL = t.front();
     t.pop_front();
     Node *SonR = t.front(); 
     t.pop_front();
     
     Node *parent = new Node(SonL,SonR); 
     t.push_back(parent);
 
  }
    
    Node *root = t.front();   //root - указатель на вершину дерева
 
////// создаем пары 'символ-код':           
 
    BuildTable(root);   
        
////// Выводим коды в файл output.txt
 
    f.clear(); f.seekg(0); // перемещаем указатель снова в начало файла
    
    ofstream g("output.txt", ios::out | ios::binary);
        
    int count=0; char buf=0;
    while (!f.eof())
    { char c = f.get();
      vector<bool> x = table[c];
      for(int n=0; n<x.size(); n++)
       {buf = buf | x[n]<<(7-count);   
        count++;   
        if (count==8) { count=0;   g<<buf; buf=0; } 
       }
    }
 
    f.close();
    g.close(); 
    
///// считывание из файла output.txt и преобразование обратно
 
    ifstream F("output.txt", ios::in | ios::binary);
 
    setlocale(LC_ALL,"Russian"); // чтоб русские символы отображались в командной строке
    
    Node *p = root;
    count=0; char byte; 
    byte = F.get();
    while(!F.eof())
    {   bool b = byte & (1 << (7-count) ) ; 
        if (b) p=p->right; else p=p->left;
        if (p->left==NULL && p->right==NULL) {cout<<p->c; p=root;}
        count++;
        if (count==8) {count=0; byte = F.get();}
    }
    
    F.close();  
 
    return 0;
}

Пользуюсь MSVS2010
Ошибки:

1>------ Построение начато: проект: 1, Конфигурация: Debug Win32 ------
1> код.cpp
1>g:\documents and settings\gap\рабочий стол\код\новая папка\1\1\код.cpp(53): error C2079: "f" использует неопределенный class "std::basic_ifstream<_Elem,_Traits>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1>g:\documents and settings\gap\рабочий стол\код\новая папка\1\1\код.cpp(53): error C2440: инициализация: невозможно преобразовать "const char [6]" в "int"
1> Не существует контекста, в котором такое преобразование возможно
1>g:\documents and settings\amora\рабочий стол\код из часового видео\новая папка\1\1\код.cpp(57): error C2228: выражение слева от ".eof" должно представлять класс, структуру или объединение
1> тип: int
1>g:\documents and settings\gap\рабочий стол\код\новая папка\1\1\код.cpp(57): fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru