СРОЧНО!!! Помогите с заданием, если нужно могу скинуть денег.

Начинающий
Статус
Оффлайн
Регистрация
7 Июл 2017
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Переставить все элементы массива так, чтобы сначала расположились все ее неотрицательные элементы, а затем все отрицательные. Порядок как среди неотрицательных элементов, так и среди отрицательных должен быть сохранен прежним .
ПОМОГИТЕ
 
B.O.M.J
Эксперт
Статус
Оффлайн
Регистрация
19 Май 2017
Сообщения
2,400
Реакции[?]
897
Поинты[?]
3K
Переставить все элементы массива так, чтобы сначала расположились все ее неотрицательные элементы, а затем все отрицательные. Порядок как среди неотрицательных элементов, так и среди отрицательных должен быть сохранен прежним .
ПОМОГИТЕ
какой массив? одиночный или двойной?
 
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2019
Сообщения
23
Реакции[?]
14
Поинты[?]
0
Возможно это не то что нужно (я бамблан)
Вроде как оно живое
C++:
#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
    int start[20], out[20], schetchik = 0;
    srand(time(NULL));
    for (int i = 0; i < 20; i++) {
        start[i] = rand() % 501 - 250;
        std::cout << start[i] << '\t';
    }
    std::cout << '\n';
    for (int i = 0; i < 20; i++) {
        if (start[i] >= 0) {                // не ебу что с 0 делать => будет положительным
            out[schetchik] = start[i];
            schetchik++;
        }
    }
    for (int i = 0; i < 20; i++) {
        if (start[i] < 0) {
            out[schetchik] = start[i];
            schetchik++;
        }
        std::cout << out[i] << '\t';
    }
    return 0;
}
 
Начинающий
Статус
Оффлайн
Регистрация
7 Июл 2017
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Последнее редактирование модератором:
Начинающий
Статус
Оффлайн
Регистрация
7 Июл 2017
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Возможно это не то что нужно (я бамблан)
Вроде как оно живое
C++:
#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
    int start[20], out[20], schetchik = 0;
    srand(time(NULL));
    for (int i = 0; i < 20; i++) {
        start[i] = rand() % 501 - 250;
        std::cout << start[i] << '\t';
    }
    std::cout << '\n';
    for (int i = 0; i < 20; i++) {
        if (start[i] >= 0) {                // не ебу что с 0 делать => будет положительным
            out[schetchik] = start[i];
            schetchik++;
        }
    }
    for (int i = 0; i < 20; i++) {
        if (start[i] < 0) {
            out[schetchik] = start[i];
            schetchik++;
        }
        std::cout << out[i] << '\t';
    }
    return 0;
}
Ты видимо не проверял, этот код к сожалению ничего не выдает,нужно сначало прописать то,благодаря чему можно будет писать массив самому,а потом условие для фунциии для неотрицательных и так далее,а какое вот я не знаю
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Если еще актуально.
C++:
#include <iostream>

using namespace std;

int main() {
    int n, p[10000], _p[10000], k1 = 0, k2 = 0;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        if (num < 0)
            p[k1++] = num;
        else
            _p[k2++] = num;
    }
    for (int i = 0; i < k1; i++)
        cout << p[i] << " ";
    for (int i = 0; i < k2; i++)
        cout << _p[i] << " ";
    return 0;
}
 
На ваш бан.
Эксперт
Статус
Оффлайн
Регистрация
7 Дек 2020
Сообщения
1,453
Реакции[?]
434
Поинты[?]
36K
Ты видимо не проверял, этот код к сожалению ничего не выдает,нужно сначало прописать то,благодаря чему можно будет писать массив самому,а потом условие для фунциии для неотрицательных и так далее,а какое вот я не знаю
я не шалю в с++ но думаю нужно сделать так:
1. объявить все элементы и форматировать массив
2. если элемент положительный-то записать его во второй массив и сдвинуть основной массив на 1 шаг влево в том месте где был положительный элемент, и так пройтись по всему массиву.
3. со второго массива переписать элементы в первый
4. всё

(я с++ не знаю, знаю только паскаль хавхахва)
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
я не шалю в с++ но думаю нужно сделать так:
1. объявить все элементы и форматировать массив
2. если элемент положительный-то записать его во второй массив и сдвинуть основной массив на 1 шаг влево в том месте где был положительный элемент, и так пройтись по всему массиву.
3. со второго массива переписать элементы в первый
4. всё

(я с++ не знаю, знаю только паскаль хавхахва)
Что за извращенные и неоптимизированные методы? Думай проще. Достаточно перебрать все элементы массива и записывать их либо в массив положительных чисел, либо отрицательных. Можно не создавать 3 массива, а обойтись двумя, но здесь нужен динамический массив. Думаю, это тс'у не нужно
 
На ваш бан.
Эксперт
Статус
Оффлайн
Регистрация
7 Дек 2020
Сообщения
1,453
Реакции[?]
434
Поинты[?]
36K
Что за извращенные и неоптимизированные методы? Думай проще. Достаточно перебрать все элементы массива и записывать их либо в массив положительных чисел, либо отрицательных. Можно не создавать 3 массива, а обойтись двумя, но здесь нужен динамический массив. Думаю, это тс'у не нужно
я использовал ток 2 массива, из первого записываем во второй положительные элементы и убираем их из первого, потом из второго переписываем элементы в первый, и так динамический массив не нужен вроде
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
На ваш бан.
Эксперт
Статус
Оффлайн
Регистрация
7 Дек 2020
Сообщения
1,453
Реакции[?]
434
Поинты[?]
36K
Удаление в массивах делается через delete, в статических придется делать сдвиг, который немного засоряет код
ну про это я не знаю, в паскале надо сдвиг делать)
 
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2019
Сообщения
23
Реакции[?]
14
Поинты[?]
0
Ты видимо не проверял, этот код к сожалению ничего не выдает,нужно сначало прописать то,благодаря чему можно будет писать массив самому,а потом условие для фунциии для неотрицательных и так далее,а какое вот я не знаю
Я конечно не программист.
Ты точно запускал эту программу?Безымянный.png
Нигде в условии не было прописано как получить начальные значения, я решил использовать случайные, мог бы просто изменить первый цикл под себя.
Не очень понятно как тебе необходимо действовать - делать перестановки в 1-м массиве, или можно сделать 2 массива и работать с ними, напиши условие полностью, когда за тебя додумывают, а тебе не нравится желание помогать отпадает.
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
Если еще актуально.
C++:
#include <iostream>

using namespace std;

int main() {
    int n, p[10000], _p[10000], k1 = 0, k2 = 0;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        if (num < 0)
            p[k1++] = num;
        else
            _p[k2++] = num;
    }
    for (int i = 0; i < k1; i++)
        cout << p[i] << " ";
    for (int i = 0; i < k2; i++)
        cout << _p[i] << " ";
    return 0;
}
Это же не сортировка по факту... Что, если надо будет поменять массив в ходе работы программы?

Что самое интересное, это пишется в одну строчку:

C++:
#include <algorithm>  // std::sort

int main() {
  int arr[1000];  // хотя вообще если стоит тэг C++, то стоит использовать std::vector<int>, потому что в случае с обычным сишным массивом придется поддерживать его размер array_size
  // Код, где ты инициализируешь массив
  std::sort(arr, arr + array_size, [](int lhs, int rhs) { return (lhs >= 0 && rhs < 0); });
  // если ты используешь не int arr[], a std::vector<int> arr, то надо поменять "arr, arr + array_size" на "arr.begin(), arr.end()"

  // Еще какой-нибудь код, там вывод массива или работа с ним
}
Пример работы:
1610899731573.png

P.S. Да, просили срочно, а прошел почти месяц... Ну и что?

P.P.S. Вообще метод Irval будет лучше по времени (у него О(N), у меня O(NlogN)), но он будет проигрывать по памяти. Почему-то мне вначале показалось, что у него O(N^2), так бы не отвечал ничего (проблема форума, что с меня взять)... Вот она, нехватка олимпиад в последнее время :(
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2020
Сообщения
30
Реакции[?]
4
Поинты[?]
0
Это же не сортировка по факту... Что, если надо будет поменять массив в ходе работы программы?

Что самое интересное, это пишется в одну строчку:

C++:
#include <algorithm>  // std::sort

int main() {
  int arr[1000];  // хотя вообще если стоит тэг C++, то стоит использовать std::vector<int>, потому что в случае с обычным сишным массивом придется поддерживать его размер array_size
  // Код, где ты инициализируешь массив
  std::sort(arr, arr + array_size, [](int lhs, int rhs) { return (lhs >= 0 && rhs < 0); });
  // если ты используешь не int arr[], a std::vector<int> arr, то надо поменять "arr, arr + array_size" на "arr.begin(), arr.end()"

  // Еще какой-нибудь код, там вывод массива или работа с ним
}
Пример работы:
Посмотреть вложение 125753

P.S. Да, просили срочно, а прошел почти месяц... Ну и что?

P.P.S. Вообще метод Irval будет лучше по времени (у него О(N), у меня O(NlogN)), но он будет проигрывать по памяти. Почему-то мне вначале показалось, что у него O(N^2), так бы не отвечал ничего (проблема форума, что с меня взять)... Вот она, нехватка олимпиад в последнее время :(
его уже выгнали с уч.заведения
 
Начинающий
Статус
Оффлайн
Регистрация
26 Мар 2019
Сообщения
8
Реакции[?]
0
Поинты[?]
0
#include <iostream>

using namespace std;

int main()
{

int n, a[100], b[100], k1 = 0, k2 = 0;
cout << "vvedite kol-vo elementov"<< endl;
cin >> n;
for (int i = 0; i < n; i++)
{
int num;
cout << "vvedite element" << endl;
cin >> num;
if (num < 0)
a[k1++] = num;
else
b[k2++] = num;
}
for (int i = 0; i < k1; i++)
cout << a << " ";
for (int i = 0; i < k2; i++)
cout << b << " ";
return 0;
}
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
#include <iostream>

using namespace std;

int main()
{

int n, a[100], b[100], k1 = 0, k2 = 0;
cout << "vvedite kol-vo elementov"<< endl;
cin >> n;
for (int i = 0; i < n; i++)
{
int num;
cout << "vvedite element" << endl;
cin >> num;
if (num < 0)
a[k1++] = num;
else
b[k2++] = num;
}
for (int i = 0; i < k1; i++)
cout << a << " ";
for (int i = 0; i < k2; i++)
cout << b << " ";
return 0;
}
C++:
#include <iostream>

using namespace std;

int main()
{
    int n, a[100], b[100], k1 = 0, k2 = 0;
    cout << "vvedite kol-vo elementov"<< endl;
    cin >> n;
    cout << "vvedite elementy" << endl;
    for (int i = 0; i < n; i++)
    {
        int num;
        cin >> num;
        if (num < 0)
            a[k1++] = num;
        else
            b[k2++] = num;
    }
    for (int i = 0; i < k1; i++)
        cout << a[i] << " ";
    for (int i = 0; i < k2; i++)
        cout << b[i] << " ";
    return 0;
}
Уж лучше так, твой код попросту неправильно работает
 
Сверху Снизу