Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
18 / 2 / 0
Регистрация: 07.09.2016
Сообщений: 100
1

Оптимизация кода

07.03.2017, 17:47. Просмотров 305. Ответов 10
Метки нет (Все метки)

Пожалуйста форумчане как можно сократить этот код
Особенно от 27 до 90 строки
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
#include <iostream>
using namespace std;
int main()
{
    int NA, NB, NC;
 
    cout << "NA = "; cin >> NA;
    int* A = new int [NA];
    for (int i = 0; i < NA; i++)
        cin >> A[i];
 
    cout << "NB = "; cin >> NB;
    int* B = new int [NB];
    for (int i = 0; i < NB; i++)
        cin >> B[i];
 
    cout << "NC = "; cin >> NC;
    int* C = new int [NC];
    for (int i = 0; i < NC; i++)
        cin >> C[i];
 
    int ND = NA + NB + NC;
    int* D = new int [ND];
 
    for (int iD = 0, iA = 0, iB = 0, iC = 0; iD < ND; iD++)
    {
        if (iA == NA)
        {
            if ((iB == NB)||(A[iA]>B[iB]))
            {
                D[iD] = C[iC++];
            }
            else if (iC == NC)
            {
                D[iD] = B[iB++];
            }
            else if (B[iB] > C[iC])
            {
                D[iD] = B[iB++];
            }
 
        }
        else if (iB == NB)
        {
            if ((iA == NA)||(B[iB]>C[iC]))
            {
                D[iD] = C[iC++];
            }
            else if (iC == NC)
            {
                D[iD] = A[iA++];
            }
            else if (A[iA] > C[iC])
            {
                D[iD] = A[iA++];
            }
 
        }
        else if (iC == NC)
        {
            if (iA == NA)
            {
                D[iD] = B[iB++];
            }
            else if (iB == NB)
            {
                D[iD] = A[iA++];
            }
            else if (A[iA] > B[iB])
            {
                D[iD] = A[iA++];
            }
            else
            {
                D[iD] = B[iB++];
            }
        }
        else if ( (A[iA] > B[iB]) && (A[iA] > C[iC]) )
        {
            D[iD] = A[iA++];
        }
        else if (B[iB] > C[iC])
        {
            D[iD] = B[iB++];
        }
        else
        {
            D[iD] = C[iC++];
        }
    }
 
    for (int i = 0; i < ND; i++)
    {
        if (i % 8 == 0)
            cout << endl;
        cout << D[i] << "\t";
    }
 
    delete [] A;
    delete [] B;
    delete [] C;
    delete [] D;
    A = B = C = D = NULL;
    return 0;
}
Особенно от 27 до 90 строки
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2017, 17:47
Ответы с готовыми решениями:

Оптимизация кода
if (sum % 10 == 1 || sum % 10 == 2 || sum % 10 == 3 || sum % 10 == 4) Можно ли как-то...

Оптимизация кода
Здравствуйте! у меня есть такая функция, которая очень часто вызывается: int fun(int x_,int...

Оптимизация кода
Нужно както упростить програму /* Дан массив а если в нем встречается такой элемент что а &lt;a ...

Оптимизация кода
Доброго времени сутки господа у меня к вам вопрос как можно оптимызуваты данный код? #include...

10
Эксперт С++
1061 / 840 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
07.03.2017, 18:08 2
Сформулируйте, что надо было сделать. Без формулировки цели сложно понять, где и что надо оптимизировать.
А по коду разбираться долго.
0
Life Builder
523 / 490 / 373
Регистрация: 12.01.2011
Сообщений: 1,713
07.03.2017, 18:14 3
Задача у этого кода какая? Мне просто лень разбираться. Может смогу сделать лучше?.
0
18 / 2 / 0
Регистрация: 07.09.2016
Сообщений: 100
07.03.2017, 18:16  [ТС] 4
Надо сократить так чтоб от 27 до 90 строки не повторялись условие вот например
фрагмент кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (iA == NA)
        {
            if ((iB == NB)||(A[iA]>B[iB]))
            {
                D[iD] = C[iC++];///3 строка
            }
            else if (iC == NC)
            {
                D[iD] = B[iB++];
            }
            else if (B[iB] > C[iC])
            {
                D[iD] = B[iB++];//здесь повторяется код 3 строки 
            }
Нужно сделать такое условие чтоб они обе работали по 1 условию

если надо я дам условие задачи
0
Life Builder
523 / 490 / 373
Регистрация: 12.01.2011
Сообщений: 1,713
07.03.2017, 18:18 5
Цитата Сообщение от ilhom4ik Посмотреть сообщение
если надо я дам условие задачи
Конечно нужно, это бы облегчила чтение кода
0
18 / 2 / 0
Регистрация: 07.09.2016
Сообщений: 100
07.03.2017, 18:23  [ТС] 6
123
0
Life Builder
523 / 490 / 373
Регистрация: 12.01.2011
Сообщений: 1,713
07.03.2017, 18:24 7
Не легче ли, сначало объединить эти массивы, а потом отсортировать их по убыванию
0
18 / 2 / 0
Регистрация: 07.09.2016
Сообщений: 100
07.03.2017, 18:25  [ТС] 8
случайно
0
С чаем беда...
Эксперт CЭксперт С++
7920 / 3836 / 1054
Регистрация: 18.10.2014
Сообщений: 8,174
07.03.2017, 18:27 9
Цитата Сообщение от ilhom4ik Посмотреть сообщение
C++
1
2
3
if (iA == NA)
 {
 if ((iB == NB)||(A[iA]>B[iB]))
В коде полно бессмыслицы и/или багов, поэтому "оптимизировать" его рано.

Например выше под условием iA == NA вдруг оказался доступ к A[iA]. Но это явный выход за пределы массива A.
0
Life Builder
523 / 490 / 373
Регистрация: 12.01.2011
Сообщений: 1,713
07.03.2017, 19:07 10
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
void masCat(int *mas, const int *mas1, const int countMas1, int &index)
{
    int i;
    for (i = 0; i<countMas1; i++)
        mas[i+index] = mas1[i];
 
    index += i;
}
 
void inputMas(int *mas, const int N)
{
    for (int i = 0; i < N; i++)
        cin >> mas[i];
}
 
int main()
{
    int NA, NB, NC;
 
    cout << "NA = "; cin >> NA;
    int* A = new int[NA];
    inputMas(A, NA);
 
    cout << "NB = "; cin >> NB;
    int* B = new int[NB];
    inputMas(B, NB);
 
    cout << "NC = "; cin >> NC;
    int* C = new int[NC];
    inputMas(C, NC);
 
    int ND = NA + NB + NC;
    int* D = new int[ND];
 
    int index = 0, temp;
    masCat(D, A, NA, index);
    masCat(D, B, NB, index);
    masCat(D, C, NC, index);
 
    //сортировка по убыванию
    for (int i = 0; i < ND; i++)
        for (int j = 0; j < ND-1-i; j++)
            if (D[j] < D[j + 1])
            {
                temp = D[j];
                D[j] = D[j + 1];
                D[j + 1] = temp;
            }
 
 
    //Вывод массива
    for (int i = 0; i < ND; i++)
        cout << D[i] << " ";
 
    delete[] A;
    delete[] B;
    delete[] C;
    delete[] D;
    A = B = C = D = NULL;
}
0
18 / 2 / 0
Регистрация: 07.09.2016
Сообщений: 100
07.03.2017, 19:13  [ТС] 11
sk007 спасибо !
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2017, 19:13

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

Оптимизация кода
main: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &quot;keyBuffer.h&quot; #include &quot;pause.h&quot;...

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

Оптимизация кода
Помогите оптимизировать код. суть программы такая, принимает на вход колличество бегунов и в...

Оптимизация кода
Есть вот такой кусочек кода integer h (integer k,n) {return k–n*3 ;} . . . . . z = h (k1, n2) ;...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.