Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Igorby
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 170
1

Разделить статический массив на три динамических массива. Не могу понять, что сделал не так

27.03.2018, 07:06. Просмотров 999. Ответов 8
Метки нет (Все метки)

Вроде все логично. Но результат не радует.

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
#include <iostream>
#include <ctime>
using namespace std;
 
int razdelitArray(int* const arr, const int size) {
    
    int arrOtrElem = 0, arrBolElem = 0, arrNulElem = 0;
    
    for (int i = 0; i < size; i++) {
        if (arr[i] < 0) arrOtrElem++;
        if (arr[i] > 0) arrBolElem++;
        else arrNulElem++;
    }
    
    int* arrOtr = new int[arrOtrElem];
    int* arrBol = new int[arrBolElem];
    int* arrNul = new int[arrNulElem];
    
    for (int i = 0; i < size; i++) {
        
        int arrOtrElem2 = 0, arrBolElem2 = 0, arrNulElem2 = 0;
        
        if (arr[i] < 0) {
            arrOtr[arrOtrElem2] = arr[i];
            arrOtrElem2++;
        }
        else if (arr[i] > 0) {
            arrBol[arrBolElem2] = arr[i];
            arrBolElem2++;
        }
        else {
            arrNul[arrNulElem2] = arr[i];
            arrNulElem2++;
        }
    }
    
    cout << endl;
    for (int i = 0; i < arrOtrElem; i++) {
        cout << arrOtr[i] << " ";
    }
    
    cout << endl;
    for (int i = 0; i < arrBolElem; i++) {
        cout << arrBol[i] << " ";
    }
    
    cout << endl;
    for (int i = 0; i < arrNulElem; i++) {
        cout << arrNul[i] << " ";
    }
    
}
 
int vyvodArray(const int* const arr, const int size) {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
}
 
int main()
{
    srand(time(NULL));
    int size = 18;
    
    int arr[size] {1, 2, 0, 3, -1, 4, 0, -12, 33, 7, 12, -11, 0, -4, 44, -16, 21, 0};
    vyvodArray(arr, size);
    razdelitArray (arr, size);
    return 0;
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2018, 07:06
Ответы с готовыми решениями:

Не могу понять что не так сделал
На первом фото указана область divа с фиксированной высотой, на втором h3 с указанным marginом,...

Не могу никак понять, что я сделал не так
Помогите! Не могу никак понять, что я сделал не так. См. прикрепленный файл.

Передача массива в функцию. Не могу понять что не так
Добрый вечер. Помогите, пожалуйста, решить проблему. Задание такое: Дана целочисленная...

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

8
LegionK
Че,пацаны,аниме?
219 / 163 / 146
Регистрация: 02.05.2017
Сообщений: 664
Завершенные тесты: 2
27.03.2018, 07:35 2
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
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
 
void func(int arr[],int size){
    int * arr1 = new int[size/3];
    int * arr2 = new int[size/3];
    int * arr3 = new int[size/3];
    int counter(0),count(0);
 
    for(int i = 0;i<3;++i){
        for(int j = (i*(size/3));j<((i*(size/3))+(size/3));++j){
            if(!counter){
                arr1[count++] = arr[j];
                cout << arr1[count-1] << " ";
            }
            if(counter == 1){
                arr2[count++] = arr[j];
                cout << arr2[count-1] << " ";
            }
            if(counter == 2){
                arr3[count++] = arr[j];
                cout << arr3[count-1] << " ";
            }
        }
        count = 0;
        ++counter;
        cout << "\n";
    }
}
 
int main(int argc, char *argv[])
{
    srand(time(0));
    int size = 0;
    cout << "Input arr size : ";
    cin >> size;
    int arr[size];
 
    for(int i = 0;i<size;++i){
        arr[i] = rand() % 16;
        cout << arr[i] << " ";
    }
    cout << "\n";
    func(arr,size);
 
    cout << endl;
    return 0;
}
Может так сойдет
1
Igorby
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 170
27.03.2018, 13:09  [ТС] 3
Цитата Сообщение от LegionK Посмотреть сообщение
Может так сойдет
Прошу прощение. Забыл указать условие. Один массив собирает отрицательные числа, второй положительные, третий нулевые.
0
LegionK
Че,пацаны,аниме?
219 / 163 / 146
Регистрация: 02.05.2017
Сообщений: 664
Завершенные тесты: 2
27.03.2018, 13:37 4
Igorby, так?
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
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
 
int main(int argc, char *argv[])
{
    srand(time(0));
    int size = 0;
    cout << "Input arr size : ";
    cin >> size;
    int arr[size];
 
    int count_plus(0),count_minus(0),count_null(0);
    for(int i = 0;i<size;++i){
        arr[i] = 16 - rand() % 48;
        cout << arr[i] << " ";
        if(arr[i] > 0)++count_plus;
        if(arr[i] == 0)++count_null;
        if(arr[i] < 0)++count_minus;
    }
    cout << "\n";
    int * arr1 = new int[count_plus];
    int * arr2 = new int[count_null];
    int * arr3 = new int[count_minus];
 
    int num(0),counter(0),count(0);
    for(int i = 0;i<size;++i){
        if(arr[i] > 0)arr1[num++] = arr[i];
        if(arr[i] == 0)arr2[counter++] = arr[i];
        if(arr[i] < 0)arr3[count++] = arr[i];
    }
    for(int i = 0;i<count_plus;++i){
        cout << arr1[i] << " ";
    }
    cout << "\n";
    for(int i = 0;i<count_null;++i){
        cout << arr2[i] << " ";
    }
    cout << "\n";
    for(int i = 0;i<count_minus;++i){
        cout << arr3[i] << " ";
    }
 
    cout << endl;
    return 0;
}
1
Igorby
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 170
27.03.2018, 17:09  [ТС] 5
Цитата Сообщение от LegionK Посмотреть сообщение
Igorby, так?
В общем то работает. Но задача стояла выполнить условие с помощью сторонней функции. И мне кажется проблема именно в этом. Видимо я как-то неправильно ссылаюсь
0
Yetty
3759 / 2578 / 1622
Регистрация: 18.12.2017
Сообщений: 8,100
27.03.2018, 17:18 6
Igorby, Вам массив int arr[size] {1, 2, 0, 3, -1, 4, 0, -12, 33, 7, 12, -11, 0, -4, 44, -16, 21, 0}; дан по условию
или это Вы его задали ? Можете сбросить оригинал условия задачи ?
1
Igorby
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 170
27.03.2018, 17:25  [ТС] 7
Цитата Сообщение от Yetty Посмотреть сообщение
Можете сбросить оригинал условия задачи ?
Пожалуйста: Написать функцию, которая получает указатель на статический массив и его размер. Функция распределяет положительные, отрицательные и нулевые элементы в отдельные динамические массивы.
0
Yetty
3759 / 2578 / 1622
Регистрация: 18.12.2017
Сообщений: 8,100
27.03.2018, 17:55 8
Лучший ответ Сообщение было отмечено Igorby как решение

Решение

как вариант:

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
#include <iostream>
#include <ctime>
using namespace std;
 
void F (double*a, int size)
{    
    int positive=0, negative=0, n=0, m=0;
    
    for (int i = 0; i < size; i++) 
    {
        if (a[i] > 0) positive++;
        else if (a[i] < 0) negative++;        
    }    
    
    double* Positive = new double[positive];
    double* Negative = new double[negative];
    double* Null = new double[size-positive-negative];    
    
    for (int i = 0; i < size; i++)
    {
        if (a[i] > 0) Positive[n++] = a[i];        
        else if (a[i] < 0) Negative[m++] = a[i];         
    }        
 
    for (int i = 0; i < positive; i++) 
        cout << Positive[i] << " ";    
    cout << endl;
    
    for (int i = 0; i < negative; i++) 
        cout << Negative[i] << " ";    
    cout << endl;
    
    for (int i = 0; i < size-positive-negative; i++)
    {
        Null[i]=0;
        cout <<Null[i]<< " ";
    }    
    cout << endl;
    delete[]Positive;
    delete[]Negative;
    delete[]Null;
}
    
void Random (double*a, int size)
{
    for (int i = 0; i < size; i++)
    { 
    a[i]=rand()%21 - 10;    
    cout <<a[i]<<" ";       
    }       
    cout << endl;
}
 
int main()
{
    srand((int)time(0));
    const int size = 18;
    double a[size];  
    
    Random(a, size);
    F(a, size);
    return 0;
}
1
Igorby
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 170
27.03.2018, 21:52  [ТС] 9
Цитата Сообщение от Yetty Посмотреть сообщение
double* Null = new double[size-positive-negative];
Супер! Понял, спасибо, разобрался. Также нашел у себя ошибку.
C++
1
int arrOtrElem2 = 0, arrBolElem2 = 0, arrNulElem2 = 0;
в моем случае стоят в начале цикла, хотя должны быть в не его.
0
27.03.2018, 21:52
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2018, 21:52

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

Нарисовать ромб через цикл,почти сделал,не могу понять что делать дальше
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; int main() { ...

Сделал тестовое задание, ответили что я джун плюс, объясните что я сделал не так
Недавно попросили сделать вот это тестовое задание...


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

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

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