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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить сумму элементов массива, расположенных до последнего положительного элемента http://www.cyberforum.ru/cpp-beginners/thread1217701.html
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) максимальный элемент массива; 2) сумму элементов массива, расположенных до последнего положительного элемента. Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом — все остальные. Первые 2 работают, не получается с преобразованием( Вот код #include...
C++ Все заглавные буквы строки нужно перевести в нижний регистр Нужно составить функцию, принимающую аргумент типа string и проводящую над ним некоторые действия: во-первых, все заглавные буквы нужно превратить в прописные, и удалить все знаки препинания. Как это всё можно сделать с использованием STL ? Помогите пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread1217690.html
Существуют ли какие-нибудь библиотеки C++ для работы с HTML C++
Подскажите пожалуйста, существуют ли какие-нибудь библиотеки С++ для работы с HTML (вывод формы из файла html, получение значений из полей, вообщем чтобы можно было написать форму на html, а работать из С++)? Само собой чтобы html выводился в графическое окно Добавлено через 26 минут Вроде нашел что можно как то подключить web-kit...
C++ Консольная игра не соответствует требованиям
Здравствуйте. Есть определенное описание текстовой консольной "игры", и вот такие требования: 1. Источником информации для нее служит текстовый файл определенной структуры (xml, json, что-то свое, что угодно еще), которую необходимо создать разработчику. 2. в каждой локации существует список действий, который представляет из себя заранее заданные варианты, показываемые игроку; 3. при выборе...
C++ Куча непонятных ошибок http://www.cyberforum.ru/cpp-beginners/thread1217651.html
Вот код: #include "stdafx.h" #include <iostream> #include <fstream> int main() { std::ifstream ifs("test.txt", std::ifstream::in); char c = ifs.get();
C++ Как определить тип данных потока istream создал класс, перегрузил оператор ввода istream & operator >>(istream& in, Stack& cl){ } дальше нужно передать данные в нужную функцию, вопрос, как определить введённый тип данных? подробнее

Показать сообщение отдельно
batyrbek_88
 Аватар для batyrbek_88
12 / 0 / 0
Регистрация: 22.04.2014
Сообщений: 12
26.06.2014, 17:21     Разбор кода программы
сделали контрольную и защитить не не могу.
помогите разобрать что значит код, пожалуйста.
реализация 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; 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru