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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pascal_Noob
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 71
#1

Упростить программу - C++

04.04.2016, 05:55. Просмотров 143. Ответов 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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int *a;
int *b1, *b2;
char *rus;
int chet_count;
int max_b1;
int max_b2;
void set_max(int *b, int &max, int sz);
char *printrus(char *text, char *rus)
{
    try
    {
        rus = new char[255];
    }
    catch(bad_alloc xa)
    {
        exit(1);
    }
    CharToOem(text, rus);
    return rus;
}
 
void init_a(int *&a, int sz)
{
    try
    {
        a = new int[sz];
    }
    catch(bad_alloc xa)
    {
        cout << printrus("Ошибка", rus);
        system("pause");
        exit(1);
    }
    //return *a;
}
 
void create_b(int sz)
{
    int b1_size = chet_count;
    int b2_size = sz - chet_count;
    init_a(b1, b1_size);
    init_a(b2, b2_size);
    int j1 =  0, j2 = 0;
    for(int i = 0; i < sz; i++)
    {
        if(i%2 == 0)
        {
            b1[j1++] = a[i];
        }
        else
        {
            b2[j2++] = a[i];
        }
    }
    cout << "b1------------------------------------\n";
    for(int i = 0; i < b1_size; i++)
    {
        cout << b1[i]
             << "\t";
    }
    cout << "\nb2------------------------------------\n";
    for(int i = 0; i < b2_size; i++)
    {
        cout << b2[i]
             << "\t";
    }
    cout << "\n";
    set_max(b1, max_b1, b1_size);
    set_max(b2, max_b2, b2_size);
    int razn = max_b1 - max_b2;
    cout << printrus("Разница между максимальными элементами созданных массивов: ", rus)
         << max_b1
         << " - "
         << max_b2
         << " = "
         << razn
         << "\n";
}
 
void set_max(int *b, int &max, int sz)
{
    max = b[0];
    for(int i = 0; i < sz; i++)
    {
        if(max < b[i]) max = b[i];
    }
}
 
int remove_zero(int sz, int zero_count)
{
    if(zero_count == 0) return 0;
    int tmp_size = sz - zero_count;
    int tmp[tmp_size];
    int j = 0;
    for(int i = 0; i < sz; i++)
    {
        if(a[i] == 0) continue;
        if(a[i] != 0)
        {
            tmp[j++] = a[i];
        }
    }
    init_a(a, tmp_size);
    for(int i = 0; i < tmp_size; i++)
    {
        a[i] = tmp[i];
        if(i%2 == 0) chet_count++;
    }
    return tmp_size;
}
 
int main()
{
    cout << printrus("Массив", rus)
         << endl;
    chet_count = 0;
    max_b1 = 0;
    max_b2 = 0;
    cout << printrus("Введите размер массива: ", rus);
    int sz;
    cin >> sz;
    init_a(a, sz);
    int zero_count = 0;
    for(int i = 0; i < sz; i++)
    {
        cout << printrus("Введите ", rus)
             << i
             << printrus(" элемент массива: ", rus);
        cin >> a[i];
        if(a[i] == 0) zero_count++;
    }
    sz = remove_zero(sz, zero_count);
    for(int i = 0; i < sz; i++)
    {
        cout << a[i]
             << "\t";
    }
    cout << endl;
    create_b(sz);
    delete [] a;
    delete [] b1;
    delete [] b2;
    delete [] rus;
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2016, 05:55     Упростить программу
Посмотрите здесь:

Упростить программу - C++
Программа находит повторяющиеся слова и выводит их. Слов не больше 30 и слова не более 8 символов. Помогите упростить программу использовав...

Упростить программу - C++
дана программа: #include &quot;iostream.h&quot;//подключаем заголовочный файл iostream.h #include &quot;conio.h&quot;//подключаем заголовочный файл...

как упростить программу ? - C++
С использованием операторов &quot;printf&quot; и &quot;scanf&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; ...

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

Как упростить программу на С++ - C++
Собственно тред: Задание: Создать массив записей размером N с информацией о студенте: ФИО (string), Пол (char), год рождения (Integer),...

Как упростить программу? - C++
Создайте двумерный массив 5*5. Заполните его случайными числами, выведите ваш массив на экран, подсчитайте сумму элементов в строках. ...

упростить программу нахождения ряда - C++
имеется задача: неиспользуя стандартные функции,за исключением abs вычислить сумму n первых членов, n вводится с клавиатуры. я решил ее...

Палиндром. Можно ли упростить программу - C++
#include &lt;iostream&gt; using namespace std; int main() { int a, d, m, n, f = 0; cin &gt;&gt; d;

Как можно упростить программу?(или подкорректировать) - C++
(ссылка на задание) Вот мое решение : Код: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include...

Упростить программу, находящую количество нулей в числе - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;rus&quot;); int num; int...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
marat_miaki
99 / 88 / 31
Регистрация: 08.04.2013
Сообщений: 316
04.04.2016, 07:36     Упростить программу #2
Как то так, только не разобрался почему вылетает когда 0 нет
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
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int *a;
int *b1, *b2;
int chet_count;
int max_b1;
int max_b2;
void set_max(int *b, int &max, int sz);
int remove_zero(int sz, int zero_count);
 
void init_a(int *&a, int sz)
{
    try
    {
        a = new int[sz];
    }
    catch(bad_alloc xa)
    {
        cout << "Ошибка";
        system("pause");
        exit(1);
    }
    //return *a;
}
 
void create_b(int sz)
{
    int b1_size = chet_count;
    int b2_size = sz - chet_count;
    init_a(b1, b1_size);
    init_a(b2, b2_size);
    int j1 =  0, j2 = 0;
    for(int i = 0; i < sz; i++)
    {
        if(i%2 == 0)
        {
            b1[j1++] = a[i];
        }
        else
        {
            b2[j2++] = a[i];
        }
    }
    cout << "b1------------------------------------\n";
    for(int i = 0; i < b1_size; i++)
    {
        cout << b1[i]
             << "\t";
    }
    cout << "\nb2------------------------------------\n";
    for(int i = 0; i < b2_size; i++)
    {
        cout << b2[i]
             << "\t";
    }
    cout << "\n";
 
    set_max(b1, max_b1, b1_size);
    set_max(b2, max_b2, b2_size);
cout << "Разница между максимальными элементами созданных массивов: ";
    if (max_b1 > max_b2){
    
    cout << max_b1
         << " - "
         << max_b2
         << " = "
         << max_b1-max_b2
         << "\n";
    }
    else  {   cout << max_b2
         << " - "
         << max_b1
         << " = "
         << max_b2-max_b1
         << "\n";
    }
}
 
void set_max(int *b, int &max, int sz)
{
    max = b[0];
    for(int i = 0; i < sz; i++)
    {
        if(max < b[i]) max = b[i];
    }
}
 
int main()
{
 
//setlocale(LC_ALL, "rus");
    cout << "Массив"  << endl;
    chet_count = 0;
    max_b1 = 0;
    max_b2 = 0;
    cout << "Введите размер массива: ";
    int sz;
    cin >> sz;
    init_a(a, sz);
    int zero_count = 0;
    for(int i = 0; i < sz; i++)
    {
        cout << "Введите " << i <<" элемент массива: ";
        cin >> a[i];
        if(a[i] == 0) zero_count++;
    }
    if (zero_count)
    sz = remove_zero(sz, zero_count);
    for(int i = 0; i < sz; i++)
    {
        cout << a[i]
             << "\t";
    }
    cout << endl;
    create_b(sz);
    delete [] a;
    delete [] b1;
    delete [] b2;
    system("pause");
    return 0;
}
 
int remove_zero(int sz, int zero_count)
{
   int tmp_size = sz - zero_count;
   int *tmp = new int[tmp_size];
    int j = 0;
    for(int i = 0; i < sz; i++)
    {
        if(a[i] != 0)
        {
            tmp[j++] = a[i];
        }
    }
    init_a(a, tmp_size);
    for(int i = 0; i < tmp_size; i++)
    {
        a[i] = tmp[i];
        if(i%2 == 0) chet_count++;
    }
    delete [] tmp;
    return tmp_size;
}
Добавлено через 7 минут
110 тогда лишнее
Yandex
Объявления
04.04.2016, 07:36     Упростить программу
Ответ Создать тему
Опции темы

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