Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
dioris
-19 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 82
#1

В одномерном массиве все отрицательные элементы переместить в начало массива - C++

06.03.2012, 11:13. Просмотров 2102. Ответов 9
Метки нет (Все метки)

в одномерном массиве все отрицательные элементы переместить в начало массива, а остальные - в конец с сохранением порядка следования не использовать доп. Массив
C++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2012, 11:13     В одномерном массиве все отрицательные элементы переместить в начало массива
Посмотрите здесь:

2. В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец с сохра - C++
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец с сохранением порядка следования. Не...

В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец с сохранением порядка следования - C++
Здравствуйте форумчане! Подскажите, как решить данные задания. Отстаю от группы, а так и не разобрался в этой теме. Используя...

Переставить в массиве все отрицательные элементы в начало массива, сохраняя относительный порядок - C++
Проштудировал весь форум.Решений много взял по примеру написал код, ошибок нет но ответа нужного нет помогите найти где не разобрался. С...

Преобразование массивов А[10] и В[18] так, чтобы для каждого все отрицательные элементы переместить в начало - C++
Составить программу, которая преобразует массивы А и В следующим образом: для каждого из них все отрицательные элементы одномерного массива...

Переместить все положительные элементы в начало массива - C++
Заполнить массив случайными числами в интервале и переставить элементы так, чтобы все положительные элементы стояли в начала массива, а...

Переместить все отрицательные элементы в «хвост» массива - C++
Задание: составить программу заданной обработки массива целых чисел. В процессе обработки использовать перестановки элементов внутри...

Все отрицательные элементы массива перенести в начало, а все остальные - в конец - C++
помогите пожалуйста))) преобразовать массив по следующему правилу (воспользовавшись массивом у как вспомогательным):все отрицательные...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
06.03.2012, 11:50     В одномерном массиве все отрицательные элементы переместить в начало массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const int N=10;
int mass[N];
int posplus=0;
for(int i=0;i<N;i++)
{
    if(mass[i]<0 && posplus==i) posplus++;
    else
    {
          int t=mass[i];
          for(int j=i;i>posplus;j--)
                   mass[j]=mass[j-1];
          mass[posplus]=t;
          posplus=i+1;
     }
}
}
-=ЮрА=-
Заблокирован
Автор FAQ
06.03.2012, 12:19     В одномерном массиве все отрицательные элементы переместить в начало массива #3

Не по теме:

Цитата Сообщение от zss2 Посмотреть сообщение
int t=mass[i];
zss2, ну зачем объявление в цикле (на это же по моему тоже процессорное время идёт). Оно то не заметно на простом а когда сложное что-то то сидим и думаем ; А куда же распыляется наш процессор???
Я вообще не признаю новых стандартов где можно использовать рядышком циклы с объявлением одной и той же переменной и стараюсь избегать множественных объявлений...



Добавлено через 1 минуту
Сейчас накидаю что-нибудь от себя...
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
06.03.2012, 12:31     В одномерном массиве все отрицательные элементы переместить в начало массива #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ну зачем объявление в цикле
Если бы память под переменные выделялась динамически,
то время бы тратилось.
А так, по моему наглядней (объявляем переменную только тогда,
когда она нужна).
-=ЮрА=-
Заблокирован
Автор FAQ
06.03.2012, 12:34     В одномерном массиве все отрицательные элементы переместить в начало массива #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Сейчас накидаю что-нибудь от себя...
- Вот что получилось
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
#include <iostream>
#include <cstdlib> //ÂïðèГ*öèïå ìîæГ*Г® áûëî Г*ГҐ ïîäêëþ÷Г*ГІГј
#include <ctime>
using namespace std;
 
int main()
{
    int i, j, k;
    time_t t;
    srand(time(&t));
    int array[30];//ГЏГіГ±ГІГј áóäåò Г¬Г*Г±Г±ГЁГў ГЁГ§ 30 ýëåìåГ*òîâ
    for(i = 0; i < 32; i++)
        //Г‡Г*ïîëГ*ГїГҐГ¬ Г¬Г*Г±Г±ГЁГў ñëó÷ Г·ГЁГ±Г«Г*ìè Гў äèГ*ГЇГ*çîГ*ГҐ -5 5
        cout<<(array[i] = rand()%10 - 5)<<" ";
    for(k = (i = 0); i < 30; i++)
    {
        if(0 < array[(j = i)])
        {
            while(0 < array[j] && j < 30)
                j++;
            if(j < 30)
            {
                array[j] += array[k];
                array[k] = array[j] - array[k];
                array[j] = array[j] - array[k];
                k++;
            }
        }
    }   
    cout<<endl;
    cout<<"sorted array\n";
    for(i = 0; i < 30; i++)
        cout<<array[i]<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
Миниатюры
В одномерном массиве все отрицательные элементы переместить в начало массива  
-=ЮрА=-
Заблокирован
Автор FAQ
06.03.2012, 12:43     В одномерном массиве все отрицательные элементы переместить в начало массива #6
Цитата Сообщение от zss2 Посмотреть сообщение
Если бы память под переменные выделялась динамически,
то время бы тратилось.
- попробую несогласиться так как объявление переменной тоже самое что резервирование свободной ячейки памяти, при этом не факт что кадый раз здесь
Цитата Сообщение от zss2 Посмотреть сообщение
int t=mass[i];
при объявлении будет резервироваться таже самая ячейка. По-моёму лучше объявить все до вызвающего модуля в любом случае проигыша в скорости не будет + в последствии это позволяет избежать коварных подводных камней когда используем вновь объявленную но неинициализированную переменную...Впринципе ТС-у должно быть видней что ему более подходит на данном этапе. Я просто высказал своё мнение

Добавлено через 1 минуту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(0 < array[(j = i)])
* * * * * * * * {
* * * * * * * * * * * * while(0 < array[j]
- подумав пришёл к выводу что данные условия должны быть переписанны следующим образом
if(0 <= array[(j = i)])
{
while(0 <= array[j] && j < 30)
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
06.03.2012, 12:47     В одномерном массиве все отрицательные элементы переместить в начало массива #7
Несомненно это дело вкуса программиста.
На мой взгляд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
используем вновь объявленную но неинициализированную переменную.
совсем наоборот. Поскольку тут объявляется новая переменная,
то действительно предполагается, что она новая и нужна только тут.
Тем самым мы не испортим переменную более высокого уровня,
если она случайно имеет такое же имя.
-=ЮрА=-
Заблокирован
Автор FAQ
06.03.2012, 12:56     В одномерном массиве все отрицательные элементы переместить в начало массива #8
zss2, своим постом также хотел уберечь начинающих програмистов ещё и от оишбок следующего плана (ниже гипотетический пример). А ведь чаще всего они на таких моментах и ошибаются
C++
1
2
3
4
5
6
7
8
9
10
for(int i = 0 ; i < n; i++)
{
      if(arr[i] < 0)
          break;
}
 
for(int i, j = 0; j < n; j++)
{
      arr[j] -= arr[i];
}
Объявив i и j ещё до начала первого цикла можно было бы полностью себя обезопасить от передачи неинициализированной переменной i.

Добавлено через 4 минуты

Не по теме:

zss2, согласитесь множественная инициализация либо инициализация в цикле могут сыграть с начинающим злую шутку, запутывая алгоритм

diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.03.2012, 15:35     В одномерном массиве все отрицательные элементы переместить в начало массива #9
Цитата Сообщение от dioris Посмотреть сообщение
C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>
 
int main()
{
    std::vector< int > arr = { 1, -2, 3, -4, 5 };
    std::stable_partition( arr.begin(), arr.end(), std::bind2nd(std::less< int >(), 0) );
    std::copy( arr.begin(), arr.end(), std::ostream_iterator< int > (std::cout, " ") );
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2014, 14:10     В одномерном массиве все отрицательные элементы переместить в начало массива
Еще ссылки по теме:

Переставить все отрицательные элементы в начало массива - C++
Здравствуйте, помогите пожалуйста решить такую задачку! Пусть A - одномерный массив N вещественных чисел (для нечетных вариантов) и N...

Все положительные элементы массива поставить в начало, а отрицательные - в конец - C++
Помогите решить такую задачу пжл: дан одномерный массив &quot;а&quot; (состоящий из вещественных чисел). Необходимо пройдя по массиву один раз все...

Отрицательные значения массива переместить в начало - C++
Все отрицательные значения линейного вещественного массива переместить в его начало, сохраняя взаимное расположение элементов.

Отрицательные значения массива переместить в начало - C++
Все отрицательные значения линейного вещественного массива переместить в его начало, сохраняя взаимное расположение элементов.

Переместить нулевые элементы в начало массива - C++
#include &lt;iostream&gt; #include&lt;time.h&gt; #include&lt;random&gt; using namespace std; int main() { int min, array,sum=0,f,s,q=0; ...


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

Или воспользуйтесь поиском по форуму:
Vanson
0 / 0 / 0
Регистрация: 22.02.2014
Сообщений: 9
22.02.2014, 14:10     В одномерном массиве все отрицательные элементы переместить в начало массива #10
А как выполнить то же самое, но используя динамический массив?
Yandex
Объявления
22.02.2014, 14:10     В одномерном массиве все отрицательные элементы переместить в начало массива
Ответ Создать тему
Опции темы

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