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

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

Восстановить пароль Регистрация
 
batyrbek_88
 Аватар для batyrbek_88
12 / 0 / 0
Регистрация: 22.04.2014
Сообщений: 12
26.06.2014, 17:21     Разбор кода программы #1
сделали контрольную и защитить не не могу.
помогите разобрать что значит код, пожалуйста.
реализация 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++
Доскональный разбор кода C++ C++
Разбор кода C++
C++ Разбор кода
Разбор кода простой программы новичка C++
C++ Комментарии и разбор кода
C++ Разбор кода
Разбор кода C++

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

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

Текущее время: 14:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru