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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
batyrbek_88
12 / 0 / 0
Регистрация: 22.04.2014
Сообщений: 12
#1

Разбор кода программы - C++

26.06.2014, 17:21. Просмотров 467. Ответов 2
Метки нет (Все метки)

сделали контрольную и защитить не не могу.
помогите разобрать что значит код, пожалуйста.
реализация LZ метода сжатия
кто может объяснить основной блок?
собственно вопрос в том что за 4 состояния у кейс

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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// LZ_1.cpp: главный файл проекта.
 
#include "stdafx.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <locale.h>
using namespace std;
 
#using <mscorlib.dll> 
 
#define MAX 65535 
#define MAXLENGTH 1000000 
 
using namespace System; 
 
 FILE* f;
struct leave //Структура данных "Бор" 
{ 
 leave* parent; 
 leave* son[256]; 
 unsigned int num; 
}; 
 
unsigned int gnum = 0; 
int i = 0, n = 0; //вспомогательные переменные 
int length = 0; //Длина текста 
char ch = 0; //Буфер для чтения символа 
unsigned char s[MAXLENGTH]; //Строка с текстом 
int state = 0; //Номер состояния 
leave* p = 0; //указатель на текущий элемент Бора 
leave* root; //указатель на корень Бора 
 
void z0(void) 
{ 
 p = root; 
} 
void z1(void) 
{ 
 p = p->son[s[i]]; 
 i++; 
} 
 
void z2(void) 
{ 
 fprintf(f, " %d %d%c\n", gnum + 1, p->num, s[i]); 
 printf(" %d %d%c\n", gnum + 1, p->num, s[i]); 
 if (gnum < MAX) 
 { 
 p->son[s[i]] = new leave; 
 p->son[s[i]]->parent = p; 
 for (int j = 0; j < 256; j++) p->son[s[i]]->son[j] = 0; 
 p = p->son[s[i]]; 
 gnum++; 
 p->num = gnum; 
 } 
 i++; 
} 
 
bool x0(void) 
{ 
 return (p->son[s[i]] != 0); 
}  
bool x1(void) 
{ 
 return (i > n); 
} 
 
int main() 
{ 
    setlocale(LC_ALL, "Russian");
 //Инициалиазация "Бора" 
 root = new leave; 
 root->parent = 0; 
 for (i = 0; i < 256; i++) 
 root->son[i] = 0; 
 root->num = 0; 
 
 //Чтение из файла ------------------ 
  f = fopen("in.txt", "rt"); 
 
 i = 0; 
 while (ch != '~') 
 { 
 fscanf(f,"%c", &ch); 
    // ch=fgetc(f);
 if ((ch != '~') && (ch != 13)) 
 { 
 if (ch == ' ') ch = '_'; 
 printf("%c", ch); 
 s[i] = ch; 
 i++; 
 length++; 
 } 
 
 
 } 
 s[i] = 0; 
 n = i; 
 printf("\n"); 
 fclose(f); 
 //---------------------------- 
 
 i = 0; 
 
 int state = 0; 
 leave* p = 0; 
 int prev = 0; 
 
 f = fopen("out.txt", "wt"); 
 
 fprintf(f, "DYNAMIC DICTIONARY \n"); 
 
 //Основной модуль 
 
 while (state != 4) 
 { 
 switch (state) 
 { 
 
 case 0: z0(); state = 1; break; 
 
 case 1: if (x0()) state = 2; 
 else state = 3; 
 
 break; 
 
 case 2:  z1(); 
 state = 1; 
 
 break; 
 
 case 3: { 
 z2(); 
 
 if ((x1())) state = 4; else state = 0; 
 } 
 break; 
 } 
 } 
 
 //Вывод коэффициента сжатия 
 fprintf(f, "COMPRESSION RATIO = %0.4f", 3 * (double) gnum / (double) 
length); 
 
 fclose(f); 
 getch(); 
 return 0; 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2014, 17:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разбор кода программы (C++):

Разбор кода программы - C++
Здравствуйте! Помогите пожалуйста написать программу (на Bison+Flex), которая будет сканировать текстовый документ и выводить информацию об...

Разбор кода простой программы новичка - C++
Народ, я вот тут только начал учиться, помогите понять ошибки. Вот код: #include &lt;iostream.h&gt; class Rabota { public: int...

Разбор кода - C++
Здравствуйте! Подскажите, пожалуйста, что обозначает вот это Utf8_16::utf8 Utf8_16::k_Boms зачем тут нужны двоеточия :) const...

Разбор кода - C++
Помогите, пожалуйста, разобрать данный код. Многое из этого мне еще не знакомо. Поэтому не могу уловить суть действий. Чем больше будет...

Разбор кода - C++
Нужно разобрать код. не могу понять что тут выполняется, кроме открытия файлов #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Разбор кода - C++
Есть такой код. #include&lt;vcl.h&gt; #pragma hdrstop #pragma argsused #include &lt;dos.h&gt; #include &lt;stdio.h&gt; #include &lt;windows.h&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
26.06.2014, 18:07 #2
Мб стоит сперва попросить
Цитата Сообщение от batyrbek_88 Посмотреть сообщение
разобрать что значит код,
у того, кто эту контрольную вам сделал?
0
batyrbek_88
12 / 0 / 0
Регистрация: 22.04.2014
Сообщений: 12
26.06.2014, 19:12  [ТС] #3
для особо одаренных. этот вариант уже отпал. тк исполнительно тупо слизал код с книги)) вопрос актуален
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2014, 19:12
Привет! Вот еще темы с ответами:

Доскональный разбор кода C++ - C++
Ребят, объясните пожалуйста следующие строчки кода. Что происходит в результате их выполнения? int a = {10, 20, 30, 40}; vector&lt;int&gt;...

Подробный разбор кода - C++
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; typedef int (*inc_method)(char *, char *, char *, char *); int...

Разбор кода CSharp - C++
К сожалению с сями не знаком!(( Что знаю по коду. То он из *.dat файла выдергивает нужные данные. Вот прошу помочь с разбором кода....

Комментарии и разбор кода - C++
#include &quot;stdafx.h&quot; #include &quot;tchar.h&quot; #include &quot;iostream&quot; #include &quot;string&quot; #include &quot;math.h&quot; #include &quot;conio.h&quot; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru