Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377

Замечания/Улучшения для программы (Сборка сортировок)

19.01.2019, 21:22. Показов 1083. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! имеется данный код:
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
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <ctime>
#include <string>
 
using namespace std;
 
int num;
 
class SortChoice {
 
public:
    SortChoice() {}
    static SortChoice *choice(string, double *);
    double BubleSortIncrease(double) { return 0; }
    double BubleSortDecrease(double) { return 0; }
    double ShakerSortIncrease(double) { return 0; }
    double ShakerSortDecrease(double) { return 0; }
    double ShellSortIncrease(double) { return 0; }
    double ShellSortDecrease(double) { return 0; }
    ~SortChoice() {}
};
 
class BubleSort : public SortChoice {
 
public:
 
    double BubleSortIncrease(double *arr) {
 
        for (int i = 0; i < num; i++) {
 
            for (int j = 1; j < num - i; j++) {
 
                if (arr[j] < arr[j - 1]) {
 
                    double temp = arr[j];
 
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
        }
 
        return *arr;
    }
 
    double BubleSortDecrease(double *&arr) {
 
        for (int i = 0; i < num; i++) {
 
            for (int j = 1; j < num - i; j++) {
 
                if (arr[j] > arr[j - 1]) {
 
                    double temp = arr[j];
 
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
        }
 
        return *arr;
    }
};
 
class ShakerSort : public SortChoice {
 
public:
    double ShakerSortIncrease(double *arr) {
 
        for (int i = 0; i < num / 2; i++) {
 
            for (int j = 1; j < num - i; j++) {
 
                if (arr[j] < arr[j - 1]) {
 
                    double temp = arr[j];
 
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
 
            for (int j = num - i - 1; j > 1 + i; j--) {
 
                if (arr[j] < arr[j - 1]) {
 
                    double temp = arr[j];
 
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
        }
 
        return *arr;
    }
 
    double ShakerSortDecrease(double *arr) {
 
        for (int i = 0; i < num / 2; i++) {
 
            for (int j = 1; j < num - i - 1; j++) {
 
                if (arr[j] > arr[j - 1]) {
 
                    double temp = arr[j];
 
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
 
            for (int j = num - i - 1; j > 1 + i; j--) {
 
                if (arr[j] > arr[j - 1]) {
 
                    double temp = arr[j];
 
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
        }
 
        return *arr;
    }
};
 
class ShellSort : public SortChoice {
 
public:
    double ShellSortIncrease(double *arr) {
 
        int i, j, step;
        int tmp;
 
        for (step = num / 2; step > 0; step /= 2) {
 
            for (i = step; i < num; i++) {
                tmp = arr[i];
 
                for (j = i; j >= step; j -= step) {
 
                    if (tmp < arr[j - step])
                        arr[j] = arr[j - step];
 
                    else
                        break;
                }
 
                arr[j] = tmp;
            }
        }
 
        return *arr;
    }
 
    double ShellSortDecrease(double *arr) {
 
        int i, j, step;
        int tmp;
 
        for (step = num / 2; step > 0; step /= 2) {
 
            for (i = step; i < num; i++) {
                tmp = arr[i];
 
                for (j = i; j >= step; j -= step) {
 
                    if (tmp > arr[j - step])
                        arr[j] = arr[j - step];
 
                    else
                        break;
                }
 
                arr[j] = tmp;
            }
        }
 
        return *arr;
    }
};
 
SortChoice *SortChoice::choice(string symbol, double *Mass) {
 
    char IorD;
 
    if (symbol == "BS") {
 
        BubleSort *ptr = nullptr;
 
        printf("Icrease(I) or Decrease(D)? ");
        cin >> IorD;
 
        while (IorD != 'i' && IorD != 'D' && IorD != 'd' && IorD != 'I') {
 
            printf("Your entered data uncorrect, enter again, please: "); scanf("%c", &IorD);
            printf("\n");
        }
 
        switch (IorD) {
 
        case 'I': { ptr->BubleSortIncrease(Mass); break; }
        case 'i': { ptr->BubleSortIncrease(Mass); break; }
        case 'D': { ptr->BubleSortDecrease(Mass); break; }
        case 'd': { ptr->BubleSortDecrease(Mass); break; }
        }
    }
 
    else if (symbol == "SS") {
 
        ShakerSort *ptr = nullptr;
 
        printf("Icrease(I) or Decrease(D)? "); cin >> IorD;
 
        while (IorD != 'i' && IorD != 'D' && IorD != 'd' && IorD != 'I') {
 
            printf("Your entered data uncorrect, enter again, please: "); scanf("%c", &IorD);
            printf("\n");
        }
 
        switch (IorD) {
 
        case 'I': { ptr->ShakerSortIncrease(Mass); break; }
        case 'i': { ptr->ShakerSortIncrease(Mass); break; }
        case 'D': { ptr->ShakerSortDecrease(Mass); break; }
        case 'd': { ptr->ShakerSortDecrease(Mass); break; }
        }
    }
 
    else if (symbol == "ShS") {
 
        ShellSort *ptr = nullptr;
 
        printf("Icrease(I) or Decrease(D)? "); cin >> IorD;
 
        while (IorD != 'i' && IorD != 'D' && IorD != 'd' && IorD != 'I') {
 
            printf("Your entered data uncorrect, enter again, please: "); scanf("%c", &IorD);
            printf("\n");
        }
 
        switch (IorD) {
 
        case 'I': { ptr->ShellSortIncrease(Mass); break; }
        case 'i': { ptr->ShellSortIncrease(Mass); break; }
        case 'D': { ptr->ShellSortDecrease(Mass); break; }
        case 'd': { ptr->ShellSortDecrease(Mass); break; }
        }
    }
 
    SortChoice *ptr = nullptr;
 
    return ptr;
}
 
void main() {
 
    char symbol;
    string which_sort;
    SortChoice *to;
 
    printf("Can you write, how nums do u want?\n");
    printf("Massive will has "); scanf("%d", &num);
 
    double *Massive = new double[num];
 
    printf("What method of filling do u prefer? Hand(H) or Random(R)? "); scanf("%c", &symbol);
 
    while (symbol != 'H' && symbol != 'R' && symbol != 'r' && symbol != 'h') {
 
        printf("Your entered data uncorrect, enter again, please: "); scanf("%c", &symbol);
        printf("\n");
    }
 
    printf("Your massive: ");
 
    switch (symbol) {
 
    case 'H':
        for (int i = 0; i < num; i++)
            scanf("%lf", &Massive[i]);
        break;
 
    case 'h':
        for (int i = 0; i < num; i++)
            scanf("%lf", &Massive[i]);
        break;
 
    case 'R':
        srand(time(NULL));
 
        for (int i = 0; i < num; i++) {
 
            Massive[i] = rand() % num;
            printf("%8.2lf, ", Massive[i]);
        }
        break;
 
    case 'r':
        srand(time(NULL));
 
        for (int i = 0; i < num; i++) {
 
            Massive[i] = rand() % num;
            printf("%8.2lf, ", Massive[i]);
        }
        break;
    }
 
    printf("\nWhat sorting method do u want to use? BubleSort(BS), ShakerSort(SS), ShellSort(ShS): "); cin >> which_sort;
 
    to->choice(which_sort, Massive);
 
    printf("\nResult after sorting:\n");
 
    for (int i = 0; i < num; i++)
        printf("%8.1lf ", Massive[i]);
 
    printf("\n");
 
    delete[] Massive;
    system("pause");
}
Это не лаба, не диплом, просто для себя решил сделать =). Пожалуйста, если есть какие-нибудь советы по улучшению работы сортировки, или собсна кода, то всегда РАД и ГОТОВ выслушать! (=
Также есть несколько замечаний:
Я вот хотел в switch впихнуть string-переменную, но нет, поэтому решил if'ами пользоваться, но тут снова проблема, после того, как я напишу string-переменную в консоли, то в IorD почему автоматически впихивается \n, если юзать scanf, а если использовать cin >>, то всё нормально. Почему?
Всем спасибо, заранее!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.01.2019, 21:22
Ответы с готовыми решениями:

Конечная точка улучшения программы
Возьмем, что я написал программу. Я уверен, что есть методы, по которым та же задача будет решаться быстрее и эффективнее. Вопрос 1:...

Сборка программы для последующего запуска на другом ПК
Добрый день. Написал небольшую игру (змейку) с использованием SFML библиотеки. На моем ПК все отлично работает и запускается. Как мне...

Книги для улучшения навыков
Посоветуйте какие-нибудь хорошие книги для улучшения навыков. Основы я вроде как уже знаю, и хотелось бы улучшить навыки. Интересует...

30
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
19.01.2019, 21:56
Глупо создавать класс для каждой сортировки в этом случае, просто определите функции базового и все.

Цитата Сообщение от cinekst_207 Посмотреть сообщение
SortChoice *SortChoice::choice(string symbol, double *Mass)
Для экономии памяти, массивы лучше передавать так
C++
1
double &*Mass

Цитата Сообщение от cinekst_207 Посмотреть сообщение
BubleSort *ptr = nullptr;
А удалять эти указатели кто за вас будет?

Зачем что-то возвращать из choice, если можно сделать ее void? Ничего важного она и так вам не вернет.

Ну и по поводу main(). Не отклоняйтесь от стандарта, пусть она int возвращает, хотя это уже дело вкуса.

Вроде все, что увидел, сказал. Люди дальше напишут еще что-нибудь
1
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
19.01.2019, 23:18  [ТС]
А я её делал void, но мне ошибку выдавало, мол, посмотрите мануал, как надо описывать SortChoice::choice
0
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
19.01.2019, 23:37
cinekst_207, можно конкретную ошибку при компиляции с void?
1
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
20.01.2019, 00:35  [ТС]
Pashka Durov, ЭМ! Странно, но уже нет её... Хмм, возможно на этапе создания я там что-то не учёл, что позже дописал и теперь она работает.
0
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
20.01.2019, 00:36
cinekst_207, ну вот и славно)
1
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
20.01.2019, 01:49
Цитата Сообщение от cinekst_207 Посмотреть сообщение
есть какие-нибудь советы по улучшению работы сортировки, или собсна кода
Сделать функции сортировок шаблонными, в которые будет передаваться компаратор, как это сделано в sort, чтобы не плодить пузырек по убыванию, возрастанию и т.д.
1
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
21.01.2019, 12:50  [ТС]
ReDoX, а что такое компаратор? Сравнивает что-то
0
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
21.01.2019, 13:19
cinekst_207,
Ну, например, как выполняется сортировка?

C++
1
 sort(v.bein(),v.end());
При этом сортируемые элементы сравниваются просто с помощью оператора <. Вот он и есть компаратор по умолчанию. Но если вы хотите какую-то очень хитрую сортировку, то это делается так
C++
1
sort(v.bein(),v.end(), comp);
где comp и есть компаратор - т.е. функция, функциональный объект, лямбда-выражение - словом, которому можно передать два элемента для сравнения.

Например, по умолчанию сортировка строк будет сравнивать их содержимое. А сортировка
C++
1
2
3
4
sort(v.bein(),v.end(), 
    // Вот это лямбда-выражение и есть компаратор:
    [](const string& a, const string& b){ return a.length() < b.length(); }
    );
будет сортировать строки по длине.

То же самое можно записать и с обычной функцией:
C++
1
2
3
4
5
6
7
// Здесь компаратор - функция comp:
bool comp(const string& a, const string& b)
{ 
    return a.length() < b.length(); 
}
 
sort(v.bein(),v.end(), comp);
Источник: stack overflow
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
21.01.2019, 13:26
Цитата Сообщение от Pashka Durov Посмотреть сообщение
Для экономии памяти, массивы лучше передавать так
Где тут экономия и чем не устроил вариант double *Mass?

cinekst_207, если решили объединить несколько функций в один класс, то имеет смысл сделать эти функции статическими. Это позволит вызывать их без создания экземпляра класса.
0
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
21.01.2019, 13:33
valen10, по-моему при double *mass создается локальный в этой функции указатель, то есть для него выделяетсямпамять, а при double *&mass мы просто ссылаемся

Добавлено через 51 секунду
Кстати я в начале амперсанды местами перепутал, извиняюсь
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
21.01.2019, 13:41
Цитата Сообщение от Pashka Durov Посмотреть сообщение
создается локальный в этой функции указатель, то есть для него выделяетсямпамять
А, вы об этом. Уже испугался, что сейчас скажете: создается локальная копия массива.

Но давайте подумаем:
(1) Ссылку тоже надо передавать в функцию.
(2) Что ссылка, что указатель на машинном уровне являются адресами. Т.е. размер у них тоже одинаковый.
=> Получается, меняя указатель на ссылку мы не экономим память.

Это конечно уже придирки с моей стороны, не имеющие отношения к теме. Не хочется, чтобы вы городили эти закорючки *& без особой надобности.
1
21.01.2019, 13:46

Не по теме:

Цитата Сообщение от valen10 Посмотреть сообщение
Не хочется, чтобы вы городили эти закорючки *& без особой надобности.
Ну, пока ТС не решит удалять выделенную память под указатель, ничего страшного не произойдет :)

0
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
21.01.2019, 13:53
Azazel-San, valen10,
То есть, если я правильно понял, то *& позволяет вызвать delete для переданного массива, а с * такого не прокатит?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
21.01.2019, 13:56
Цитата Сообщение от Pashka Durov Посмотреть сообщение
не прокатит?
Прокатит но поведение не определено.

Добавлено через 48 секунд
Ну и скорее не delete, a delete[], если уж для массива.
1
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
21.01.2019, 14:21
Цитата Сообщение от Azazel-San Посмотреть сообщение
но поведение не определено
Ох уж эти тонкости языка. Кажется, последнее время ходят за мной, как тени
Не определено, потому что можно передать вычисленный адрес? Или я не в ту сторону думаю?
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
21.01.2019, 14:25
Цитата Сообщение от cinekst_207 Посмотреть сообщение
#define _CRT_SECURE_NO_WARNINGS
Наличие подобного макроса в коде - достаточная причина,
что бы признать исходный код ненадежным.

У вас должны быть железобетонные основания для того,
что бы явным образом ослабить защиту компилятора,
и писать некачественный код, вместо качественного.


Цитата Сообщение от cinekst_207 Посмотреть сообщение
#include <ctime>
Вы нигде не используете функционал данного заголовка.
Не имейте привычки пачкать исходный код ненужными ему деталями.

Цитата Сообщение от cinekst_207 Посмотреть сообщение
using namespace std;
Использование данной конструкции в коде - признак дилетанта.
И совершенно недопустимо промышленными стандартами стилей кода.

Помните об этом, когда будете писать тестовое задание при трудоустройстве.

Цитата Сообщение от cinekst_207 Посмотреть сообщение
int num;
Глобальная переменная, используемая в реализации функций-сортировщиков,
полностью аннулирует инвариант последних.

В простонародье говорят: "лютый говнокод" - такое только в мусорное ведро.
Цитата Сообщение от cinekst_207 Посмотреть сообщение
double BubleSortIncrease(double) { return 0; }
Зачем классу
Цитата Сообщение от cinekst_207 Посмотреть сообщение
class SortChoice {
Нужны ничего не делающие методы?

Цитата Сообщение от cinekst_207 Посмотреть сообщение
double BubleSortIncrease(double *arr) {
Наследник перекрывает аналогичный метод базового класса.
Причем в базовом классе метод принимает double

Такое впечатление, что программист был пьян сам не понимает, что и зачем он делает.

Код - в мусорку.

Программиста - читать сначала Маконнелла (Совершенный код),
затем Банду четырех (Шаблоны проектирования)

Цитата Сообщение от cinekst_207 Посмотреть сообщение
double BubleSortIncrease(double *arr) {
Функции сортировки не кидают эксепшенов.
Почему не указан noexcept ?

Цитата Сообщение от cinekst_207 Посмотреть сообщение
double BubleSortIncrease(double *arr) {
Функции сортировки не меняют состояние объекта.
Почему не указан const ?

Цитата Сообщение от cinekst_207 Посмотреть сообщение
double BubleSortIncrease(double *arr) {
Функции сортировки не используют состояние объекта.
Какой тогда вообще смысл в том, что бы делать их методами класса?

Ещё чуть чуть, и программист рискует заболеть ООП-головного мозга.

Цитата Сообщение от cinekst_207 Посмотреть сообщение
for (int i = 0; i < num; i++) {
Количественная величина (размер массива, количество элементов, etc)
должна быть беззнаковой (size_t)

Цитата Сообщение от cinekst_207 Посмотреть сообщение
double BubleSortDecrease(double *&arr) {
Зачем вы здесь использовали указатель по ссылке?


Цитата Сообщение от cinekst_207 Посмотреть сообщение
double ShakerSortIncrease(double *arr) {
Функция принимает указатель. Значит ей можно скормить nullptr
Если же по замыслу функция ожидает валидный указатель,
тогда должна быть проверка, контролирующая это условие.

Итого: нарушение инварианта пред-условия.
Отсутствует assert(arr);

Цитата Сообщение от cinekst_207 Посмотреть сообщение
SortChoice *SortChoice::choice(string symbol, double *Mass) {
Код - в мусорку.
Программисту - букварь в зубы. Изучать раздел: "что такое ссылки, и с чем их едят"

Цитата Сообщение от cinekst_207 Посмотреть сообщение
printf("Icrease(I) or Decrease(D)? "); cin >> IorD;
Суржик с/с++
Если вы пишите на языке с++, тогда используйте средства именно с++
Если же решили использовать сишные функции ввода/выводы,
то и используйте именно сишные варианты.

Смешивать оба стиля в одном проекте - дурной тон.
Провоцирует в исходном коде беспорядок.

Цитата Сообщение от cinekst_207 Посмотреть сообщение
printf("Your entered data uncorrect, enter again, please: "); scanf("%c", &IorD);
Новое предложение - с новой строки.
Лепить несколько предложений в одну длинную строчку - дурной тон.
Ухудшает читабельность.

Цитата Сообщение от cinekst_207 Посмотреть сообщение
SortChoice *ptr = nullptr;
return ptr;
В чем сакральный смысл всегда возвращать наружу nullptr ?




Цитата Сообщение от cinekst_207 Посмотреть сообщение
void main() {
Должно быть int main

Цитата Сообщение от cinekst_207 Посмотреть сообщение
for (int i = 0; i < num; i++)
Зачем вы используете постфиксный инкремент,
если при этом никак не используете возвращаемый им результат?

Должно быть: ++i


Итого:
Очень слабо. Даже для новичка.
1
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
21.01.2019, 15:21
Цитата Сообщение от valen10 Посмотреть сообщение
Не определено, потому что можно передать вычисленный адрес? Или я не в ту сторону думаю?
Там смотря что мы будем делать) Допустим мы захотим в этой функции удалить массив на который указываем и выделить новый, с новыми значениями, и как бы в этот момент при вызове new мы присвоим возвращаемый новый адрес локальной переменной функции, а не переменной, обозначающей исходный указатель. И последующие действия с исходным указателем после выполнения вышеперечисленного ведет к не тому поведению.

Добавлено через 5 минут
Цитата Сообщение от eva2326 Посмотреть сообщение
Функции сортировки не кидают эксепшенов.
Почему не указан noexcept ?
Ну, ну.. Ладно функции, а в деструкторе почему не указан noexcept + не виртуальный?)
1
21.01.2019, 15:21

Не по теме:

Azazel-San, valen10, я думаю надо отдельную тему создать, а то эту захламляем

0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
21.01.2019, 15:29
Цитата Сообщение от Azazel-San Посмотреть сообщение
Ну, ну.. Ладно функции, а в деструкторе почему не указан noexcept + не виртуальный?)
1.
Деструктор итак по дефолту noexcept

2.
Нет ни одной причины делать деструктор виртуальным,
Если класс не использует полиморфизм (отсутствуют вирт. функции)

3.
Не понятно, чего вы нукаете?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2019, 15:29
Помогаю со студенческими работами здесь

Улучшения для среды delhpi
Доброго дня всем друзья! Приятный вопрос. Существуют ли дополнительные надстройки для Delphi, делающие редактирование кода более удобным. В...

Моды и другие улучшения для Дальнобойщиков 2
1.Какие впечатления по игре 2.Где можно скачать НОРМАЛЬНЫЕ моды (тоесть новые машины, обновлённая графика и т.д. 3. Можно ли как-нибудь...

Опции компиляторов для улучшения производительности
Провел простой тест на сравнение производительности между Си и С++. Тест заключается в поиске позиции подстроки. Си при решении данной...

Апгрейд для улучшения баланса в комплектующих.
Всем привет от новенького! Есть у меня такой ПК, в принципе для моих потребностей и даже для игр мне хватает. Но вопрос вот в чем, что из...

Программа для улучшения производительности системы
На ХР пользовался Norton Utilities. Для 8 не могу найти NU на русском языке. Где скачать NU для 8 на русском? или подскажите пожалуйста...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru