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

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

Восстановить пароль Регистрация
 
Leh4an
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 31
11.11.2015, 16:40     Изменить визуально сам код, чтобы структура его осталась прежней #1
Помогите изменить визуально сам код,чтобы структура его осталась прежней. Т.е. выполнялось всё тоже,но чтобы код выглядел отличающимся.
Дан код программы генерации случайных чисел двумя методами (аддитивный и метод средних квадратов) и для двух методов сортировки(алгоритм Шелла и сортировка вставками).

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
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
#include <stdio.h>
#define SIZE 100
 
void additiv();
void seredsqrt(int x[100]);
void method_Shella(int x[100]);
void vstavkami(int x[100]);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int k, l;
    charch;
    int x[100];
 
    hp:
 
        cout<<"Если хотите задать случайные числа,  нажмите 'sl'\n";
        cout<<"Если вы хотите выполнить сортировку, нажмите 'kv'\n";
                    cin>>ch;
 
    if (ch == 'sl')
    {
        cout<<"Выберете способ генерации ряда случайных чисел: аддитивный(1) или серединных квадратов(2) \n";
        cin>> k;
 
        switch (k)
        {
            case 1: {additiv(); break; }
            case 2: {seredsqrt(x); break; }
        }
        cout<<"\n_______________________________________________________________________________________\n";
    }
    elseif (ch == 'kv')
    {
        cout<<"Выберете способ сортировки: по алгоритму Шелла(1) или вставками(2) \n";
        cin>> l;
 
        switch (l)
        {
        case 1: {method_Shella(x); break;   }
        case 2: {vstavkami(x); break; }
        }
        cout<<"\n______________________________________________________________________________\n";
    }
    else {
        cout<<"Ввод не удался!\n";
        goto hp;
    }
 
 
    _getch();
    return 0;
}
 
void additiv()
{
    int x[100], b[100];
    int a, c, m, n = 55, d = 55;
 
    cout<<"Введите a, c, m, x[0] (a и c - взаимнопростые числа):\n";
    cin>> a >> c >> m >> x[0];
    
    cout<<"Массив случ.чисел (по линейному конгруэнтному методу)\n"<<endl;
    for (inti = 0; i<= SIZE; i++)
    {
        x[i + 1] = (a*x[i] + c) % m;
        cout<< x[i] <<' ';
    }
    
    cout<<"\n\n Массив аддитивно случайных чисел: \n";
    for (int i = SIZE; i>= 55; i--)
    {
        b[i] = (x[i - 55] + x[i - 24]) % m;
        cout<< b[i] <<' ';
    }
 
}
 
void seredsqrt(intx[100])
{
    int a, c, m = 10000, x0;
    long b[100], t;
    int n, k, l;
 
    cout<<"Введите значения a, c, x[0]( а и с - взаимно простые числа): \n";
    cin>> a >> c >>x[0];
    cout<<"Количество генерируемых случайных чисел : ";
    cin>> n;
 
 
    b[0] = (a * x[0] + c) % m;
 
    cout<<"Сгенерированное зерно : "<< b[0] <<endl;
    for (int i = 1; i<= n; i++)
    {
        t = b[i - 1] * b[i - 1];
        k = t;
        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];
        }
    }
 
    cout<<"Искомый массив : "<<endl;
    for (inti = 0; i< n; i++)
        cout<<x[i] <<" ";
    
}
 
voidmethod_Shella(intx[100])
{
    int n, d, h = 5;                        
 
    cout<<"Количество элементов в массиве: ";
    cin>> n;
 
    cout<<"\n Исходный массив:\n";
    for (inti = 0; i< n; i++)
    {
        cout<< i+1 <<" элемент: ";
        cin>>x[i];
        
    }
 
    
    cout<<"\n\n Отсортированный массив:\n";
    while (h > 0)                                       
    {
        for (int i = 0; i < n-h; i++)                   
        {   
            for (int d = i; d >= 0; d--)
            {
                if (x[d] >x[d + h])             
 
                {
                    inttmp = x[d+h];
                    x[d+h] = x[d];
                    x[d] = tmp;
                }
                elsecontinue;
            }
        }
        cout<< h <<" шаг: ";
        for (inti = 0; i< n; i++)
            cout<<x[i] <<" ";
        cout<<endl;
        h--;
    }
}
 
void vstavkami(intx[100])
{
    int n, tmp;
 
    cout<<"Размерность массива: \n";
    cin>> n;
 
    cout<<"Заполните массив \n";
    for (inti = 1; i<= n; i++)
    {
        cout<< i <<" элемент: ";
        cin>>x[i];
        
    }
    
    cout<<"\n Отсортированный массив: \n";
    for (inti = 1; i<= n; i++)
    {
        for (int j = i; j >= 0; j--)
        {
            if (x[j - 1] >x[j])
            {
                tmp = x[j - 1];
                x[j - 1] = x[j];
                x[j] = tmp;
            }
        }
        cout<<"\n"<<i<<" шаг: ";
        for (int a = 1; a <= n; a++)
            cout<<x[a] <<" ";
    }
 
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2015, 16:40     Изменить визуально сам код, чтобы структура его осталась прежней
Посмотрите здесь:

C++ Вырезать из матрицы всё лишнее, чтобы осталась только закрашенная часть
Структура абитуриент, осталась одна ошибка C++
Вставка элементов одной последовательности в другую так, чтобы вторая последовательность осталась невозрастающей C++
Изменить программу чтобы программный код выполнялся в отдельных функциях C++
C++ надо изменить его так чтобы он находил сумму любых введёных чисел и при вводе числа 0 программа завершалась
Изменить for на while, но так, чтобы программа оставалась прежней, то есть выполняла ту же работу C++
Как изменить код программы чтобы все условия выполнялись должным образом? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mesteriis
 Аватар для Mesteriis
371 / 154 / 40
Регистрация: 08.08.2015
Сообщений: 1,059
Завершенные тесты: 1
11.11.2015, 18:40     Изменить визуально сам код, чтобы структура его осталась прежней #2
Leh4an, ну поменяйте имена переменных, вынесите функции в отдельный файл, там вывод на английском напишите, + с табуляцией поиграйте!
Leh4an
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 31
11.11.2015, 18:57  [ТС]     Изменить визуально сам код, чтобы структура его осталась прежней #3
Может кто-то запилить уже "видоизменённый" код? Буду искренне благодарен!
Melg
537 / 158 / 64
Регистрация: 23.09.2013
Сообщений: 310
11.11.2015, 20:17     Изменить визуально сам код, чтобы структура его осталась прежней #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
Leh4an
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 31
11.11.2015, 20:20  [ТС]     Изменить визуально сам код, чтобы структура его осталась прежней #5
Melg, so hard
gru74ik
Модератор
 Аватар для gru74ik
3497 / 1506 / 181
Регистрация: 20.02.2013
Сообщений: 4,352
Записей в блоге: 21
11.11.2015, 20:35     Изменить визуально сам код, чтобы структура его осталась прежней #6
Просьба о помощи:
Цитата Сообщение от Leh4an Посмотреть сообщение
Может кто-то запилить уже "видоизменённый" код? Буду искренне благодарен!
После того, как помогли:
Цитата Сообщение от Leh4an Посмотреть сообщение
Melg, so hard
Как-то вместе не вяжется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2015, 15:44     Изменить визуально сам код, чтобы структура его осталась прежней
Еще ссылки по теме:

Как переделать код, чтобы изменить интерфейс до неузнаваемости? C++
Найти наименьшее число элементов, которые надо удалить, чтобы осталась возрастающая последовательность C++
C++ Написать код так, чтобы его мог легко прочитать пользователь, незнакомый с программированием
C++ Сколькими способами можно изменить заданную последовательность, чтобы она осталась возрастающей?
C++ Стек. Что добавить в код, или как изменить его, чтобы в нём были структуры ?

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

Или воспользуйтесь поиском по форуму:
Leh4an
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 31
15.11.2015, 15:44  [ТС]     Изменить визуально сам код, чтобы структура его осталась прежней #7
спасибо!

Добавлено через 21 секунду
Melg,
Yandex
Объявления
15.11.2015, 15:44     Изменить визуально сам код, чтобы структура его осталась прежней
Ответ Создать тему
Опции темы

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