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

Изменить визуально сам код, чтобы структура его осталась прежней - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача "Дипломы" http://www.cyberforum.ru/cpp-beginners/thread1578061.html
Дайте пинка, не знаю в какую сторону и думать, задача нажодится в разделе "Бинарный поиск", но тут как по мне нихрена не бинарный поиск. Текст задания Когда Петя учился в школе, он часто участвовал в олимпиадах по информатике, математике и физике. Так как он был достаточно способным мальчиком и усердно учился, то на многих из этих олимпиад он получал дипломы. К окончанию школы у него...
C++ Объясните принцип бинарного поиска Можно, пожалуйста, пример или принцип бинарного поиска. С++ для очень сильно начинающих. http://www.cyberforum.ru/cpp-beginners/thread1578052.html
C++ Вывести каждое слово в предложении в обратном порядке
программа рабочая: Она переставляет буквы в обратном порядке. Например: привет - тевирп. НО эта программа переставляет одно слово в обратном порядке, а мне нужно чтобы несколько слов. Например: привет - тевирп пока - акоп и т.д. Помогите пожалуйста... #include <stdio.h> #include <string.h> void main()
Box2D Свободное падение C++
Здравствуйте, начал изучать Box2D. Подскажите пожалуйста, можно ли как-нибудь показать (смоделировать) свободное падение в TestBed? Вот, для примера, создал динамическое тело bdef.position.Set(0, 15); bdef.type = b2_dynamicBody; body2 = m_world->CreateBody(&bdef); b2PolygonShape box; box.SetAsBox(1, 1); b2FixtureDef fdef;
C++ С некоторой даты по настоящий день прошло n дней, найти неизвестную дату http://www.cyberforum.ru/cpp-beginners/thread1578038.html
С некоторой даты по настоящий день прошло n дней, найти неизвестную дату.
C++ Строковый ввод-вывод 1)Создать текстовый файл F1 не менее, чем из 10 строк и записать в него информацию 2) Скопировать из файла F1 в файл F2 строки, начиная с 4. 3) Подсчитать количество символов в последнем слове F2. подробнее

Показать сообщение отдельно
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
11.11.2015, 20:17     Изменить визуально сам код, чтобы структура его осталась прежней
Leh4an, в процессе. Дело то не быстрое.

Добавлено через 1 час 6 минут
Leh4an, Вот что мне удалось примерно за 1.5 часа:

Кликните здесь для просмотра всего текста
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
enum class Option { kUnknown, kGenerate, kSort };
 
const size_t kDefaultArraysSize = 100;
 
static const std::string kGenerateOptionToken = "sl";
static const std::string kSortOptionToken = "kv";
 
std::string GetStringLineFromUser() {
  std::string ch;
  std::getline(cin, ch);
  return ch;
}
 
int GetValueFromUser() {
  int value = 0;
  cin >> value;
  return value;
}
 
void ShowNewLine(size_t number_of_times = 1) {
  for (size_t i = 0; i < number_of_times; ++i) {
    cout << endl;
  }
}
 
void ShowTextLine(const std::string &text) {
  cout << text;
  ShowNewLine();
}
 
void ShowSeparator(size_t separator_length = 90, char separator_symbol = '_') {
  ShowNewLine();
  for (size_t i = 0; i < separator_length; ++i) {
    cout << separator_symbol;
  }
}
 
void UnknownOption() {
  cout << "Ввод не удался!";
  ShowNewLine();
}
 
void ShowOptionsWithTokens() {
  ShowTextLine("Если вы хотите задать случайные числа, введите "sl"");
  ShowTextLine("Если вы хотите выполнить сортировку, введите "kv"");
}
 
void AskAdditivParameters() {
  ShowTextLine("Введите a, c, m, x[0] (a и c - взаимнопростые числа):");
}
 
void AskOlsParameters() {
  ShowTextLine("Введите значения a, c, x[0]( а и с - взаимно простые числа): ");
}
 
void ShowAdditivArrayNotification() {
  ShowTextLine("Массив случ.чисел (по линейному конгруэнтному методу)");
}
 
void ShowRandomGeneratedByAdditiveMethodArray() {
  ShowTextLine("Массив аддитивно случайных чисел: ");
}
 
void AskOlsSizeOfSequence() {
  ShowTextLine("Количество генерируемых случайных чисел:");
}
 
void AskArraySize() { ShowTextLine("Количество элементов в массиве: "); }
 
void ShowSourceArrayNotification() { ShowTextLine("Исходный массив:"); }
 
void ShowRandomGeneratedByOlsMethodArray() { ShowTextLine("Искомый массив: "); }
 
void ShowSortedArrayNotification() { ShowTextLine("Отсортированный массив:"); }
 
void ShowBeginOfArrayInputNotification() { ShowTextLine("Заполните массив"); }
 
void AskGenerationOption() {
  ShowTextLine(
      "Выберете способ генерации ряда случайных чисел: аддитивный(1) или "
      "серединных квадратов(2)");
}
 
void AskSortOption() {
  ShowTextLine(
      "Выберете способ сортировки: по алгоритму Шелла(1) или вставками(2)");
}
 
void additiv() {
  int x[kDefaultArraysSize];
  int b[kDefaultArraysSize];
  AskAdditivParameters();
  auto a = GetValueFromUser();
  auto c = GetValueFromUser();
  auto m = GetValueFromUser();
  x[0] = GetValueFromUser();
  ShowAdditivArrayNotification();
  ShowNewLine();
 
  for (size_t i = 0; i <= kDefaultArraysSize; ++i) {
    x[i + 1] = (a * x[i] + c) % m;
    ShowTextLine(std::to_string(x[i]) + " ");
  }
 
  ShowNewLine(2);
  ShowRandomGeneratedByAdditiveMethodArray();
  for (int i = kDefaultArraysSize; i >= 55; --i) {
    b[i] = (x[i - 55] + x[i - 24]) % m;
    ShowTextLine(std::to_string(b[i]) + " ");
  }
}
 
void OlsGeneration(int x[kDefaultArraysSize]) {
  const int kRest = 10000;
  AskOlsParameters();
  auto a = GetValueFromUser();
  auto c = GetValueFromUser();
  x[0] = GetValueFromUser();
  AskOlsSizeOfSequence();
  auto n = GetValueFromUser();
 
  long b[kDefaultArraysSize];
  b[0] = (a * x[0] + c) % kRest;
 
  ShowTextLine("Сгенерированное зерно : " + std::to_string(b[0]));
  for (int i = 1; i <= n; ++i) {
    auto t = b[i - 1] * b[i - 1];
    auto k = t;
    auto l = 0;
    while (k > 0) {
      k = k / 10;
      ++l;
    }
    if (l % 2 == 0) {
      x[i - 1] = t / 100 % 10000;
      b[i] = x[i - 1];
    } else {
      x[i - 1] = t / 10 % 1000;
      b[i] = x[i - 1];
    }
  }
 
  ShowRandomGeneratedByOlsMethodArray();
  for (int i = 0; i < n; ++i) {
    ShowTextLine(std::to_string(x[i]) + " ");
  }
}
 
void shell_sort(int x[kDefaultArraysSize]) {
  AskArraySize();
  int n = GetValueFromUser();
 
  ShowNewLine();
  ShowRandomGeneratedByOlsMethodArray();
 
  for (int i = 0; i < n; ++i) {
    ShowTextLine(std::to_string(i + 1) + " элемент: ");
    x[i] = GetValueFromUser();
  }
  ShowNewLine(2);
  ShowSortedArrayNotification();
  auto h = 5;
  while (h > 0) {
    for (int i = 0; i < n - h; ++i) {
      for (int d = i; d >= 0; --d) {
        if (x[d] > x[d + h]) {
          std::swap(x[d + h], x[d]);
        } else {
          continue;
        }
      }
    }
    ShowTextLine(std::to_string(h) + " шаг: ");
    for (int i = 0; i < n; ++i) {
      ShowTextLine(std::to_string(x[i]) + ' ');
    }
    ShowNewLine();
    --h;
  }
}
 
void insertion_sort(int x[kDefaultArraysSize]) {
  AskArraySize();
  auto n = GetValueFromUser();
 
  ShowBeginOfArrayInputNotification();
  for (int i = 1; i <= n; ++i) {
    ShowTextLine(std::to_string(i) + " элемент: ");
    x[i] = GetValueFromUser();
  }
  ShowNewLine();
  ShowSortedArrayNotification();
  for (int i = 1; i <= n; ++i) {
    for (int j = i; j >= 0; --j) {
      if (x[j - 1] > x[j]) {
        std::swap(x[j - 1], x[j]);
      }
    }
    ShowNewLine();
    ShowTextLine(std::to_string(i) + " шаг: ");
    for (int a = 1; a <= n; ++a) {
      ShowTextLine(std::to_string(x[a]) + " ");
    }
  }
}
 
Option GetUserOptionChoise() {
  auto user_option_choice = Option::kUnknown;
  auto user_choice = GetStringLineFromUser();
  if (user_choice == kGenerateOptionToken) {
    user_option_choice = Option::kGenerate;
  } else if (user_choice == kSortOptionToken) {
    user_option_choice = Option::kSort;
  }
  return user_option_choice;
}
 
Option AskUserToChooseOptionThrowToken() {
  ShowOptionsWithTokens();
  return GetUserOptionChoise();
}
 
void GenerateOption(int x[kDefaultArraysSize]) {
  AskGenerationOption();
  auto choosed_generation_option = GetValueFromUser();
 
  if (choosed_generation_option == 1) {
    additiv();
  } else if (choosed_generation_option == 2) {
    OlsGeneration(x);
  }
 
  ShowSeparator();
}
 
void SortOption(int x[kDefaultArraysSize]) {
  AskSortOption();
  auto choosed_sort_option = GetValueFromUser();
  if (choosed_sort_option == 1) {
    shell_sort(x);
  } else if (choosed_sort_option == 2) {
    insertion_sort(x);
  }
  ShowSeparator();
}
 
void SetupLocale() { setlocale(LC_ALL, "Russian"); }
 
void ExecuteOption(int x[kDefaultArraysSize], const Option o) {
  if (o == Option::kGenerate) {
    GenerateOption(x);
  } else if (o == Option::kSort) {
    SortOption(x);
  } else {
    UnknownOption();
  }
}
 
void RunForeverWhatUserWhants() {
  int x[kDefaultArraysSize];
  while (true) {
    auto choosed_option = AskUserToChooseOptionThrowToken();
    ExecuteOption(x, choosed_option);
  }
}
 
int main() {
  SetupLocale();
  RunForeverWhatUserWhants();
}



Изменения:
1) Форматирование
2) Активное использование функций
3) Английские названия функций
4) Большинство уведомлений вынесено в отдельные функции
5) Удалена часть дублирующего кода
6) Убран макрос
7) Изменен стиль подключения элементов стандартной библиотеки
8) Во всей программе только определения функций
9) Убрано магическое число 100
10) Постфиксный инкремент/декремент заменен на префиксную версию
11) Убран goto
12) Убраны директивы #include для не используемых заголовочных файлов
13) В некоторых местах перестановка двух значений заменена вызовом стандартной функции std::swap
14) В некоторых местах явное указание типа переменной заменено на auto
15) Множественные выводы "\n" заменены вызовом функции

Добавлено через 12 минут
По-моему форум мог поесть обратные слеши, из-за этого может не компилироваться, пруф работоспособности + возможно скопировать код тут:
http://ideone.com/Lkvfod
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru