Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

В одномерном массиве все отрицательные элементы заменить нулями и упорядочить элементы массива по убыванию - C++
В одновимірному масиві всі від’ємні елементи замінити нулями і впорядкувати елементи масиву за спаданням.

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

Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n). Подсчитать количес - C++
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n)....

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

9
zss
Модератор
Эксперт С++
6578 / 6140 / 2021
Регистрация: 18.12.2011
Сообщений: 15,994
Завершенные тесты: 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;
     }
}
}
2
-=ЮрА=-
Заблокирован
Автор FAQ
06.03.2012, 12:19 #3

Не по теме:

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



Добавлено через 1 минуту
Сейчас накидаю что-нибудь от себя...
1
zss
Модератор
Эксперт С++
6578 / 6140 / 2021
Регистрация: 18.12.2011
Сообщений: 15,994
Завершенные тесты: 1
06.03.2012, 12:31 #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ну зачем объявление в цикле
Если бы память под переменные выделялась динамически,
то время бы тратилось.
А так, по моему наглядней (объявляем переменную только тогда,
когда она нужна).
0
-=ЮрА=-
Заблокирован
Автор 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;
}
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)
0
zss
Модератор
Эксперт С++
6578 / 6140 / 2021
Регистрация: 18.12.2011
Сообщений: 15,994
Завершенные тесты: 1
06.03.2012, 12:47 #7
Несомненно это дело вкуса программиста.
На мой взгляд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
используем вновь объявленную но неинициализированную переменную.
совсем наоборот. Поскольку тут объявляется новая переменная,
то действительно предполагается, что она новая и нужна только тут.
Тем самым мы не испортим переменную более высокого уровня,
если она случайно имеет такое же имя.
0
-=ЮрА=-
Заблокирован
Автор 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, согласитесь множественная инициализация либо инициализация в цикле могут сыграть с начинающим злую шутку, запутывая алгоритм

1
diagon
Higher
1932 / 1198 / 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, " ") );
}
0
Vanson
0 / 0 / 0
Регистрация: 22.02.2014
Сообщений: 9
22.02.2014, 14:10 #10
А как выполнить то же самое, но используя динамический массив?
0
22.02.2014, 14:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2014, 14:10
Привет! Вот еще темы с ответами:

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

Все положительные элементы поместить в начало массива В(n), а отрицательные элементы — в начало массива С(n) - C++
Ребята. Помогите с задачей пожалуйста. Дан массив А(n). Все положительные его элементы поместить в начало массива В(n), а...

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

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


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

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

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