Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
1

Перенести положительные элементы в конец массива

07.03.2017, 07:11. Показов 1391. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Описать набор функций.
Функцию,которая будет переносить все положительные элементы вправо, при этом положительные элементы НЕ сортируются.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2017, 07:11
Ответы с готовыми решениями:

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

Перенести положительные элементы A[n] массива на B[m]
перенести положительные элементы A массива на B,a отрицательные элементы на C

Перенести отрицательные элементы в конец массива
Всем доброго времени суток, помогите с заданием: В целочисленный массив размерности N ввести...

Положительные элементы массива перенести в начало
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 3. Преобразовать массив...

12
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
07.03.2017, 07:49  [ТС] 2
Доброе время суток

Подскажите как лучше сделать? Показывал преподавателю, сказал, что не правильно!

Описать набор функций.
Функцию,которая будет переносить все положительные элементы вправо.
Положительные НЕ СОРТИРУЮТСЯ.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void arr(int arr[], int size)
{
    int tmp;
    for (size_t i = 0; i < size; i++)
    {
        for (size_t j = 0; j < size; j++)
        {
            if (arr[i] < 0)
            {
                tmp = arr[i];
                arr[i] = arr[i - 1];
                arr[i - 1] = tmp;
            }
        }
    }
}
Вызов функции -
C++
1
arr(arr, size);
0
Helper C/C++
286 / 163 / 122
Регистрация: 22.09.2016
Сообщений: 518
07.03.2017, 07:57 3
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
 
#define N 11
 
void swap(int& n1, int& n2)
{
    int t = n1; n1 = n2; n2 = t;
}
 
int main(int argc, char** argv)
{
    //int A[N] = { 2, 3, 1, 7, 5, 4, -6, -4, -2, -7, -1 };
    int A[N] = { -2, 3, 1, -7, -5, -4, 6, -4, 2, 7, -1 };
 
    for (int z = 0; z < N; z++)
        printf("%d ", A[z]);
 
    printf("\n");
 
    for (int i = 0; i < N; i++)
    {
        if (A[i] > 0)
        {
            for (int j = i + 1; j < N; j++)
                if (A[j] < 0) swap(A[j], A[i]);
        }
    }
 
    for (int z = 0; z < N; z++)
        printf("%d ", A[z]);
 
    printf("\n");
    
    _getch();
 
    return 0;
}
Добавлено через 4 минуты
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
#include <iostream>
#include <vector>
 
static const int N = 11;
 
using namespace std;
 
int main(int argc, char** argv)
{
    //int A[N] = { 2, 3, 1, 7, 5, 4, -6, -4, -2, -7, -1 };
    std::vector<int> A = { -2, 3, 1, -7, -5, -4, 6, -4, 2, 7, -1 };
 
    for (auto it = A.begin(); it != A.end(); it++)
        std::cout << *it << " ";
 
    std::cout << endl;
 
    for (auto it = A.begin(); it != A.end(); it++)
        for (auto it_fwd = A.begin(); it_fwd != A.end() && *it < 0; it_fwd++)
            if (*it_fwd > 0) std::swap(*it, *it_fwd);
 
    for (auto it = A.begin(); it != A.end(); it++)
        std::cout << *it << " ";
 
    std::cout << endl;
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
07.03.2017, 08:22 4
Sportsm, ты имеешь ввиду сортировка пузырьком? Ну вот так нужно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void arr(int arr[], int size)
{
    bool fl = true;
    while( fl )
    {
        fl = false;
        for (auto i = 0; i < size - 1; i++)
        {
            if (arr[i] < 0)
            {
                auto tmp = arr[i];
                arr[i] = arr[i - 1];
                arr[i - 1] = tmp;
                fl = true;
            }
        }
    }
}
1
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,718
07.03.2017, 09:00 5
Bretbas, при
Цитата Сообщение от Bretbas Посмотреть сообщение
i = 0
чему равно
Цитата Сообщение от Bretbas Посмотреть сообщение
arr[i - 1]
?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void arr(int arr[], int size)
{
    int* tmp=new int[size];
    int k=0;
    for (int j = 0; j < size; j++)
       if (arr[j] <= 0)
           tmp[k++] = arr[j];
    for (int j = 0; j < size; j++)
       if (arr[j] > 0)
           tmp[k++] = arr[i];
    for (int j = 0; j < size; j++)
      arr[j] =  tmp[j];
    delete[] tmp;
}
2
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
07.03.2017, 09:10 6
Мне кажется не очень хорошо называть функцию и массив одним именем arr. Я правильно мыслю?

Добавлено через 5 минут
Вот сортировка пузырьком:
Алгоритмы сортировок.
Цитата Сообщение от Sportsm Посмотреть сообщение
C++
1
2
3
4
5
    for (size_t i = 0; i < size; i++)
    {
        for (size_t j = 0; j < size; j++)
        {
            if (arr[i] < 0)
- вот косячный код, там нужно не size, а size-1 в обоих циклах.
не нужно сравнивать элемент с 0, т.е. больше 0 он или меньше, в сортировке пузырьком элементы сравниваются между собой(см. сортировку).
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,718
07.03.2017, 09:30 7
Цитата Сообщение от DemolitionMan Посмотреть сообщение
не очень хорошо называть функцию и массив одним именем arr
Если хочется, то можно.

Насколько я понял ТС, сортировать массив не нужно.
Нужно не изменяя порядка все положительные элементы переместить в конец массива.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
07.03.2017, 09:33 8
А, так ему просто положительные элементы в конец массива надо перенести. Вызываешь:
C++
1
2
#include <algorithm>
sort(arr, arr+n);
и все!
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,718
07.03.2017, 09:38 9
DemolitionMan, sort изменит порядок следования элементов.
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
07.03.2017, 09:40 10
Цитата Сообщение от DemolitionMan Посмотреть сообщение
и все
не всё:
C++
1
2
3
4
5
6
7
8
9
10
11
12
// other headers may goes here
#include <algorithm>
 
int main()
{
    // your array declaration and initialization goes here
 
    std::sort(arr, arr+n); // if you don't use using declaration or using
                           // directive you have to use std identifier
 
    // some code may be here too (for example, console output)
}
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
07.03.2017, 10:17 11
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Вызываешь
Сказано же:
Цитата Сообщение от Sportsm Посмотреть сообщение
при этом положительные элементы НЕ сортируются.


C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
 
int main()
{
    int arr[] = {10, -4, 0, 6, 7, -4, -1, 9, -7, 0, -1, 2};
    std::stable_partition(arr, arr + sizeof(arr)/sizeof(*arr), [](int x) { return x <= 0; });
    for(int e: arr) {
        std::cout << e << " ";
    }
}
http://rextester.com/LOY50365
3
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
07.03.2017, 18:05 12
zss, for (auto i = 1; i < size - 1; i++) конечно же. Ошибся
0
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
08.03.2017, 11:17  [ТС] 13
Доброе время суток

Тема была - функции и массивы (пузырьки)

Описать набор функций.
Функцию,которая будет переносить все положительные элементы вправо.
Положительные НЕ СОРТИРУЮТСЯ.

я сделал так....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
 
void arr(int arr[], int size)
{
    int tmp;
    for (size_t i = 0; i < size; i++)
    {
        for (size_t j = 0; j < size; j++)
        {
            if (arr[i] < 0)
            {
                tmp = arr[i];
                arr[i] = arr[i - 1];
                arr[i - 1] = tmp;
            }
        }
    }
}
C++
1
Вызов функции  -  arr(arr, size);
Мне предлагаете, много вариантов решения
Большое спасибо, но скажите, ВСЕ ТАКИ какой вариант подойдет к этому коду?
я так понимаю, что во первых, необходимо
C++
1
к  size, во внешнем и внутреннем цикле добавить -1, то есть будет выглядеть size - 1
,

что еще под корректировать???
0
08.03.2017, 11:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2017, 11:17
Помогаю со студенческими работами здесь

Положительные элементы массива перенести в начало
Прошу помощи, не могу понять. Задачи должны иметь два варианта решения. Первый вариант решения -...

Положительные элементы перенести в начало массива
Дан линейный массив из n элементов. Получить новый массив, разместив сначала все положительные...

Положительные элементы массива перенести в начало
Только начали изучать, не очень секу 1. В одномерном массиве, состоящем из n вещественных...

Положительные элементы массива перенести в начало
Задан линейный массив, состоящий из n элементов. Расставить в нём в том же порядке сначала...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru