Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Bask1
0 / 0 / 2
Регистрация: 28.12.2014
Сообщений: 12
1

Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом все отрицательные

27.01.2015, 23:33. Просмотров 904. Ответов 4
Метки нет (Все метки)

Помогите исправить ошибку, пожалуйста. Тут 3 задания в одном, ошибка в третьем. Задача 3: Из общего задания: "Примечание 1: если в задании сказано, что нужно массив преобразовать (!) (а не упорядочить), то при перемещении элементов в какую-то одну другую часть массива они должны сохранять исходный порядок по отношению друг к другу. Т.е., если массив, например, был такой: {-5.2, 3, -1.5, 10, 2} и, если сказано, что нужно преобразовать его таким образом, чтобы сначала располагались все положительные, а потом все отрицательные элементы, то это не (!) значит, что массив нужно отсортировать по убыванию. Массив в итоге должен выглядеть так: {3, 10, 2, -5.2, -1.5}.". В Вашем случае, если массив был, например, {1.5, -4.3, -4.7, 3.1, -3.6, 1.7, -1.1}, то в результате массив должен стать таким: {-4.3, -4.7, -3.6, -1.1, 1.5, 3.1, 1.7}
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
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
 
void main()
{
    int n, i = 1, k = 0;
    char g_auto;
 
    cout << "Enter size of array: ";
    cin >> n; //razmer massiva
    while (i)
    {
        if (n < 1)
        {
            cout << "Array can't be negative, try again: ";
            cin >> n;
        }
        else
        {
            i = 0;
        }
    }
    cout << "Generate array automaticaly? Y/n: ";
    cin >> g_auto;
 
    float *arr = new float[n];
 
    if (g_auto == 'y' || g_auto == 'Y')
    {
 
        /*автогенаратор*/
        float a, b;
        cout << "Start number: ";
        cin >> a;
        cout << "Last number: ";
        cin >> b;
        a -= 0.1;
        b += 0.1;
        //int sing[2] = { -1, 1 }; //для соблюдения промежутка
        srand(time(NULL));
        while (i < n)
        {
            arr[i] = static_cast<float>(rand()) / RAND_MAX*(b - a) + a; //генератор с заданным промежутком [a,b]
            arr[i] = static_cast<int>(arr[i] * 10) / 10.0;// + 0.1* sing[rand() % 2]; // отбрасые знаки после запятой.
            i++;
        }
        for (i = 0; i < n; i++)
            cout << arr[i] << ' ';
        cout << endl;
        /*автогенаратор*/
    }
    else
    {
        /*руки*/
        cout << "Enter array numbers: \n";
        while (i < n)
        {
            cout << "array[" << i << "] - " << i + 1 << "number; ";
            cin >> arr[i];
            i++;
        }
        for (i = 0; i < n; i++)
            cout << arr[i] << ' ';
        cout << endl;
        /*руки*/
    }
    //1----------------------------------------------      
    double c, counter = 0;
    cout << "Enter c: ";
    cin >> c;
    for (i = 0; i < n; i++)
    if (arr[i] > c)
        counter++;
    cout << "Elements > c: " << counter;
    //2----------------------------------------------  
    double max = abs(arr[0]);
    counter = 0;
    for (i = 0; i < n; i++)
    if (abs(arr[i]) > max)
    {
        counter = i;
        max = abs(arr[i]);
    }
    double mult = 1;
    if (counter == n - 1)
        mult = 0;
    for (i = counter + 1; i < n; i++)
        mult *= arr[i];
    cout << "\nMultiplication of elements after max |element|: " << mult;
 
    //3---------------------------------------------      
    double tmp;
    for (int i = 0; i <= n; i++)
    {
        for (int j = 0; j < n - 1; j++)
        {
            if (arr[j+1] < 0)
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
 
    cout << "\nReorganised:\n";
    for (i = 0; i < n; i++)
        cout << arr[i] << ' ';
    cout << endl;
    delete[]arr;
    system("pause");
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2015, 23:33
Ответы с готовыми решениями:

Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом – все отрицательные
Здравствуйте. Помогите, пожалуйста, разобраться с указанным заданием. Первые...

Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом все отрицательные
Добрый день, в поиске ничего подходящего не нашлось. Нет времени уже самому...

Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом — все отрицательные
Здравствуйте, мне срочно нужна помощь:В одномерном массиве, состоящем из n...

Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом все отрицательные
В одномерном массиве, состоящем из n вещественных элементов, вычислить:...

Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом – все отрицательные
В одномерном массиве, состоящем из n целочисленных элементов, вычислить:...

4
Prorok2323
169 / 127 / 74
Регистрация: 04.12.2013
Сообщений: 550
28.01.2015, 00:01 2
Лучший ответ Сообщение было отмечено Bask1 как решение

Решение

Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом все отрицательные
Советую выбрать мое решение. Там легко поменяете порядок (сначала отрицательные, потом положительные и наоборот).
1
Bask1
0 / 0 / 2
Регистрация: 28.12.2014
Сообщений: 12
28.01.2015, 00:28  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
double tmp;
    for (int i = 0; i < n / 2; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            if (arr[j] < 0 && arr[j + 1] < 0)
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
 
    cout << "\nReorganised:\n";
    for (i = 0; i < n; i++)
        cout << arr[i] << ' ';
Что теперь не так? Не пойму как вперёд отрицательные поставить/
0
Prorok2323
169 / 127 / 74
Регистрация: 04.12.2013
Сообщений: 550
28.01.2015, 00:42 4
Bask1, нужно просто в этой строчке
C++
1
if (array[j] < 0 && array[j+1] > 0) {
поменять знаки
C++
1
if (array[j] > 0 && array[j+1] < 0) {
1
Bask1
0 / 0 / 2
Регистрация: 28.12.2014
Сообщений: 12
28.01.2015, 01:00  [ТС] 5
Большое спасибо!)
0
28.01.2015, 01:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2015, 01:00

Преобразовать массив так, чтобы сначала располагались все положительные элементы, а потом отрицательные
Помогите пжлст решить задачу:cry: В одномерном массиве, состоящем из n целых...

Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом - все остальные
Помогите, пожалуйста. как составить код в с++. Дан целочисленный массив...

Преобразовать массив таким образом, чтобы сначала располагались все по- ложительные элементы, а потом все остальные
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;cmath&gt; ...


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

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

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