С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
valeryp
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 9
1

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

14.01.2015, 14:43. Просмотров 1659. Ответов 14
Метки нет (Все метки)

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

Задание:

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

Важно: при перемещении элементов в какую-то одну другую часть массива они должны сохранять исходный порядок по отношению друг к другу. Т.е., если массив, например, был такой: {-5.2, 3, -1.5, 10, 2} и, если сказано, что нужно преобразовать его таким образом, чтобы сначала располагались все положительные, а потом все отрицательные элементы, то это не (!) значит, что массив нужно отсортировать по убыванию. Массив в итоге должен выглядеть так: {3, 10, 2, -5.2, -1.5}. не разрешается использовать дополнительный массив. Все преобразования необходимо выполнять в исходном массиве.

Мой код:

n - количество элементов
n_mas - массив
C++
1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < n; i++) {
        if (n_mas[i] < 0) {
            t = n_mas[i];
            for (int j = i; j < n; ++j)
            {
                n_mas[j] = n_mas[j + 1];
            }
            n_mas[n] = t;
        }
    }
ввожу массив 1, -2, 3, -4, 5

а отсортированный получаю: 1, 3, 5, -2, -4.22017E+037


Идут последние часы здачи, решается вопрос допуска к экзамену, а я не знаю как решить проблему
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2015, 14:43
Ответы с готовыми решениями:

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

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

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

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

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

14
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
14.01.2015, 14:57 2
В цикле
C++
1
j < n - 1
C++
1
n_mas[n - 1] = t;
0
valeryp
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 9
14.01.2015, 15:00  [ТС] 3
теперь получается так: ввожу массив

1, -2, 3, -4, 5

получаю:

1, 3, 5, -4, -2

а должен 1, 3, 5, -2, -4 (сохраняя изначальный порядок)
0
R0man
Заблокирован
14.01.2015, 15:08 4
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
#include <iostream>
 
int main()
{
    using namespace std;
    double A[5];
    for (int i(0); i < 5; i++)
    {
        cout << "Enter " << i + 1 << " element: ";
        cin >> A[i];
    }
    system("cls");
    cout << "Your massiv: " << endl;
    for (int i(0); i < 5; i++)
        cout << A[i] << "\t";
    cout << "\nSort: " << endl;
    for (int i(0); i < 5; i++)
    {
        if (A[i] >= 0) 
            cout << A[i] << "\t";
    }
    for (int i(0); i < 5; i++)
    {
        if (A[i] < 0)
            cout << A[i] << "\t";
    }
    cout << endl;
    system("pause");
    return 0;
}
0
valeryp
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 9
14.01.2015, 15:25  [ТС] 5
Выводит в правильном порядке, но как такую запись поместить в изначальный архив n_arr ? без использования второго массива? Задача упорядочить массив
0
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
14.01.2015, 15:26 6
Лучший ответ Сообщение было отмечено valeryp как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int nn = n;
for (int i = 0; i < nn; i++) {
        if (n_mas[i] < 0) {
            t = n_mas[i];
            for (int j = i; j < n - 1; ++j)
            {
                n_mas[j] = n_mas[j + 1];
            }
            n_mas[n - 1] = t;
            --nn;
            --i;
        }
    }
1
Lokk0
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 2
14.01.2015, 15:29 7
В одномерном массиве, состоящем из n целых элементов, вычислить:
1. Минимальный по модулю элемент массива.
2. Сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
Преобразовать массив таким образом, чтобы в первой его половине расположились элементы, стоящие в чётных позициях, а во второй половине – элементы стоявшие в нечётных позициях.
0
Prorok2323
169 / 127 / 74
Регистрация: 04.12.2013
Сообщений: 550
14.01.2015, 15:33 8
стоять!!!

Добавлено через 1 минуту
Вот мое решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    int array[] = { 6, -1, -22, 8, -2, -76, 14, 100, -11, 30, -20, 10, -17, 90, 7 };
    int length = sizeof(array) / sizeof(*array); //вычисляем длину массива
    for (unsigned i = 0; i < length / 2; i++) {
        for (unsigned j = 0; j < length - i - 1; j++) {
            if (array[j] < 0 && array[j+1] > 0) {
                int tmp = array[j];
                array[j] = array[j+1];
                array[j+1] = tmp;
            }
        }
    }
    for (unsigned i = 0; i < length; i++) cout << array[i] << " ";
0
Lokk0
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 2
14.01.2015, 15:37 9
Мне тоже решите
0
Prorok2323
169 / 127 / 74
Регистрация: 04.12.2013
Сообщений: 550
14.01.2015, 15:38 10
Lokk0, новую тему создавай.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8106 / 4958 / 1436
Регистрация: 29.11.2010
Сообщений: 13,454
14.01.2015, 16:40 11
C++
1
2
3
4
5
6
7
8
9
10
#include <algorithm>
#include <iostream>
#include <iterator>
 
int main()
{
    int arr[] = {1, -2, 3, -4, 5, -6, 7, -8, 9};
    std::partition(std::begin(arr), std::end(arr), [](const int x) { return x > 0; });
    std::copy(std::begin(arr), std::end(arr), std::ostream_iterator<int>(std::cout, " "));
}
Или банально читерским способом
C++
1
2
3
4
5
6
7
8
9
10
11
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
 
int main()
{
    int arr[] = {1, -2, 3, -4, 5, -6, 7, -8, 9};
    std::sort(std::begin(arr), std::end(arr), std::greater<int>());
    std::copy(std::begin(arr), std::end(arr), std::ostream_iterator<int>(std::cout, " "));
}
Добавлено через 1 минуту
Цитата Сообщение от R0man Посмотреть сообщение
Your massiv
Это сильно конечно
0
zss
Модератор
Эксперт С++
7494 / 6857 / 4330
Регистрация: 18.12.2011
Сообщений: 18,149
Завершенные тесты: 1
14.01.2015, 17:19 12
MrGluck, для сохранения порядка элементов есть stable_partitition.
У меня лямбд нет, написал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <iostream>
#include <iterator>
bool gt(const int x) { return x > 0; }
int main()
{
    int arr[] = {1, -2, 3, -4, 5, -6, 7, -8, 9};
    std::stable_partition(arr, arr+9, gt);
    std::copy(arr, arr+9, std::ostream_iterator<int>(std::cout, " "));
    system("pause");
    return 0;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
8106 / 4958 / 1436
Регистрация: 29.11.2010
Сообщений: 13,454
14.01.2015, 17:20 13
Цитата Сообщение от zss Посмотреть сообщение
для сохранения порядка элементов есть stable_partitition.
По привычке дальше задания не читал. Да впрочем разница в коде лишь в дописывании приставки stable_ (он разумеется поддерживает лямбды как вид предиката).
0
R0man
Заблокирован
14.01.2015, 20:27 14
А чё не понравилось то "your massiv"?)
А, ну разве что слова massiv в английском нет, но это не важно
А так у меня perfect knowledge of English, так что не цепляйтесь)
0
MrGluck
14.01.2015, 20:45     Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом все отрицательные
  #15

Не по теме:

Let me speak from my heart in english

0
14.01.2015, 20:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2015, 20:45
Привет! Вот еще темы с ответами:

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

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

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


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

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

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