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

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

Войти
Регистрация
Восстановить пароль
 
 
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
#1

Все отрицательные в конец массива - C++

11.01.2012, 18:55. Просмотров 745. Ответов 18
Метки нет (Все метки)

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

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

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

Перенести все отрицательные элементы массива в конец - C++
#include <iostream> #include <ctime> using namespace std; #define n 10 int main(){ srand(time(NULL)); int a, i, pos=0, q,...

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

Все отрицательные цифры поместить в начало массива, а положительные в конец - C++
4. Дан массив положительных и отрицательных чисел. Переписать массив так, чтобы все отрицательные цифры были в начале массива, а...

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

18
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.01.2012, 19:09 #2
C
1
2
3
4
5
6
int compare (const void * a, const void * b)
{
  return ( *(int*)b - *(int*)a);
}
 
qsort (values, SIZE, sizeo f(int), compare);
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
11.01.2012, 19:22  [ТС] #3
можно целую задачу,нормально написанную
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.01.2012, 19:33 #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
 
int compare (const void * a, const void * b)
{
  return ( *(int*)b - *(int*)a);
}
 
int main (void)
{
   int arr[] = { -40, 10, -100, 90, 20, 25 };
   const int SIZE = sizeof (arr) / sizeof (arr[0]);
   int n;
   
   qsort (arr, SIZE, sizeof(int), compare);
 
   for (n=0; n<6; n++)
      printf ("%5d ", arr[n]);
   return 0;
}
http://liveworkspace.org/code/c3347e2ee2a0a4ca54c23c618b0d1079
0
R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
11.01.2012, 19:39 #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
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <algorithm>
 
void repl(int [], int, int);
 
int main()
{
    int mass[10];
 
    srand(time(NULL));
 
    for(int i = 0; i < 10; i++)
    {
        mass[i] = 1 + rand() % 15;
 
        if(i % 2 == 0)
            mass[i] *= -1;
 
        std::cout << std::setw(5) << mass[i];
    }
 
    std::cout << std::endl;
 
    std::sort(mass,mass + 10);
 
    repl(mass,0,9);
 
    for(int i = 0; i < 10; i++)
        std::cout << std::setw(5) << mass[i];
 
    std::cout << std::endl;
 
    return 0;
}
 
void repl(int mass[], int step, int end)
{
    if(mass[step] < 0 && step < end)
    {
        std::swap(mass[step],mass[end]);
        repl(mass,step+1,end-1);
    }
}
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
11.01.2012, 22:47  [ТС] #6
Сделайте чтобы вручную массив вводить
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.01.2012, 22:52 #7
C++
1
2
3
4
5
template <class T> void input (T *first, T *last)
{
    for ( ; first != last ; ++first )
        std::cin >> *first;
}
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
11.01.2012, 23:36  [ТС] #8
а можно в программу в простом виде без сложных функций
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
12.01.2012, 00:03 #9
hally, ну так соедините же всё в одно, вам уже и так готовое написали, с вас минимальные познания в программировании требуются чтобы совместить всё.
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 10:51 #10
Если важен изначальный порядок следования, то так (на счёт предиката не очень уверен, но все мои тесты вроде прошёл):
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
template<typename T>
bool lz_order(const T& left, const T& right)
{
    if (left < T())
        return false;
    else if (right < T())
        return true;
    else
        return false;
}
 
int main()
{
    std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    
    std::stable_sort(vec.begin(), vec.end(), lz_order<int>);
    
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "  "));
    
    return 0;
}
0
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
12.01.2012, 12:56 #11
Что бы не дублировать return можно немножко упростить
C++
1
2
3
4
5
template<typename T>
bool lz_order(const T& left, const T& right)
{
        return right < T() ? true : false;
}
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 13:00 #12
Dekio, не прокатит. Сначала всё равно надо проверить left.

Добавлено через 1 минуту
Т.е. так:
C++
1
2
3
4
5
template<typename T>
bool lz_order(const T& left, const T& right)
{
    return left < T() ? false : right < T() ? true : false;
}
0
Петррр
5970 / 3407 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
12.01.2012, 13:47 #13
partition не канает?
1
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 13:51 #14
Петррр, порядок не сохранится. Для такого варианта уже были предложены решения.
0
Shaykemelov
9 / 9 / 2
Регистрация: 14.11.2011
Сообщений: 27
12.01.2012, 16:08 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
int main()
{
    int n,a[100000],i;
    cin>>n;
    for (i=1; i<=n; i++)
    {
        cin>>a[i];
    }
    for (i=1; i<=n; i++)
    {
        if (a[i]>=0) cout<<a[i]<<" ";
    }
    for (i=1; i<=n; i++)
    {
        if (a[i]<0) cout<<a[i]<<" ";
    }
    system("pause");
    return 0;
}
0
12.01.2012, 16:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2012, 16:08
Привет! Вот еще темы с ответами:

Сортировка массива: перенести положительные числа в начало, а отрицательные - в конец массива - C++
Дан вещественный массив A(N). Отсортировать его таким образом, чтобы все положительные числа находились в начале, а отрицательные - в конце...

Отсортировать элементы массива: отрицательные – в начало массива, положительные – в конец - C++
написать две проги...Желательно в Microsoft Visual Studio. Исходный массив инициализировать случайным образом, предусмотрев возможность...

Отрицательные числа переместить в конец массива - C++
Всем доброго времени суток, помогите написать программу, пожалуйста. Само задание: В целочисленный массив размерности N ввести...

Отрицательные элементы массива переместить в конец - C++
Дан массив A(n). Переместить все его элементы таким образом, чтобы в конце массива были все его отрицательные числа, сохранив при этом...


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

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

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