• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

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

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Июл 2017
Сообщения
4
Реакции
0
Переставить все элементы массива так, чтобы сначала расположились все ее неотрицательные элементы, а затем все отрицательные. Порядок как среди неотрицательных элементов, так и среди отрицательных должен быть сохранен прежним .
ПОМОГИТЕ
 
Переставить все элементы массива так, чтобы сначала расположились все ее неотрицательные элементы, а затем все отрицательные. Порядок как среди неотрицательных элементов, так и среди отрицательных должен быть сохранен прежним .
ПОМОГИТЕ
какой массив? одиночный или двойной?
 
Возможно это не то что нужно (я бамблан)
Вроде как оно живое
C++:
Expand Collapse Copy
#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;
}
 
Возможно это не то что нужно (я бамблан)
Вроде как оно живое
C++:
Expand Collapse Copy
#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;
}
Ты видимо не проверял, этот код к сожалению ничего не выдает,нужно сначало прописать то,благодаря чему можно будет писать массив самому,а потом условие для фунциии для неотрицательных и так далее,а какое вот я не знаю
 
Если еще актуально.
C++:
Expand Collapse Copy
#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;
}
 
Ты видимо не проверял, этот код к сожалению ничего не выдает,нужно сначало прописать то,благодаря чему можно будет писать массив самому,а потом условие для фунциии для неотрицательных и так далее,а какое вот я не знаю
я не шалю в с++ но думаю нужно сделать так:
1. объявить все элементы и форматировать массив
2. если элемент положительный-то записать его во второй массив и сдвинуть основной массив на 1 шаг влево в том месте где был положительный элемент, и так пройтись по всему массиву.
3. со второго массива переписать элементы в первый
4. всё

(я с++ не знаю, знаю только паскаль хавхахва)
 
я не шалю в с++ но думаю нужно сделать так:
1. объявить все элементы и форматировать массив
2. если элемент положительный-то записать его во второй массив и сдвинуть основной массив на 1 шаг влево в том месте где был положительный элемент, и так пройтись по всему массиву.
3. со второго массива переписать элементы в первый
4. всё

(я с++ не знаю, знаю только паскаль хавхахва)
Что за извращенные и неоптимизированные методы? Думай проще. Достаточно перебрать все элементы массива и записывать их либо в массив положительных чисел, либо отрицательных. Можно не создавать 3 массива, а обойтись двумя, но здесь нужен динамический массив. Думаю, это тс'у не нужно
 
Что за извращенные и неоптимизированные методы? Думай проще. Достаточно перебрать все элементы массива и записывать их либо в массив положительных чисел, либо отрицательных. Можно не создавать 3 массива, а обойтись двумя, но здесь нужен динамический массив. Думаю, это тс'у не нужно
я использовал ток 2 массива, из первого записываем во второй положительные элементы и убираем их из первого, потом из второго переписываем элементы в первый, и так динамический массив не нужен вроде
 
Удаление в массивах делается через delete, в статических придется делать сдвиг, который немного засоряет код
ну про это я не знаю, в паскале надо сдвиг делать)
 
Ты видимо не проверял, этот код к сожалению ничего не выдает,нужно сначало прописать то,благодаря чему можно будет писать массив самому,а потом условие для фунциии для неотрицательных и так далее,а какое вот я не знаю
Я конечно не программист.
Ты точно запускал эту программу?
Безымянный.png

Нигде в условии не было прописано как получить начальные значения, я решил использовать случайные, мог бы просто изменить первый цикл под себя.
Не очень понятно как тебе необходимо действовать - делать перестановки в 1-м массиве, или можно сделать 2 массива и работать с ними, напиши условие полностью, когда за тебя додумывают, а тебе не нравится желание помогать отпадает.
 
Если еще актуально.
C++:
Expand Collapse Copy
#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++:
Expand Collapse Copy
#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), так бы не отвечал ничего (проблема форума, что с меня взять)... Вот она, нехватка олимпиад в последнее время :(
 
Последнее редактирование:
Это же не сортировка по факту... Что, если надо будет поменять массив в ходе работы программы?

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

C++:
Expand Collapse Copy
#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), так бы не отвечал ничего (проблема форума, что с меня взять)... Вот она, нехватка олимпиад в последнее время :(
его уже выгнали с уч.заведения
 
#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;
}
 
#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++:
Expand Collapse Copy
#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;
}
Уж лучше так, твой код попросту неправильно работает
 
Назад
Сверху Снизу