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

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

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

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

26.06.2014, 17:21. Просмотров 459. Ответов 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; 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2014, 17:21     Разбор кода программы
Посмотрите здесь:

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

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

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

Разбор кода - 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; ...

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

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

Комментарии и разбор кода - 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...

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

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

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


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

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

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