0 / 0 / 0
Регистрация: 17.10.2018
Сообщений: 51
1

Разместить сначала все положительные элементы массива, а затем все отрицательные и нули, сохраняя порядок их следования

05.12.2018, 01:21. Показов 5621. Ответов 10
Метки нет (Все метки)

Дан массив вещественных чисел, содержащий 20 элементов. Записать в этот же массив сначала все положительные числа, а затем все отрицательные числа и нули, сохраняя порядок их следования.

В ряде случаев в итоге меняет значения некоторых элементов в отсортированном массиве, стабильно оставляет на месте последний элемент, вне зависимости от его значения

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
47
48
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand(time(nullptr));
    int n=20;
    int *mas = new int [n];
    int tmp = 0;
    cout<<"IN: ";
    for(int i = 0; i < n; i++)
    {
        mas[i] = rand()%9-5;
        cout<<mas[i]<<" ";
    }
    for(int i = 0 ; i < n; i++)
    {
        if(mas[i]>0)
        {
            mas[tmp] = mas[i];
            tmp++;
        }
    }
    for(int i = 0 ; i < n; i++)
    {
        if(mas[i]<0)
        {
            mas[tmp] = mas[i];
            tmp++;
        }
    }
        for(int i = 0 ; i < n; i++)
    {
        if(mas[i]==0)
        {
            mas[tmp] = mas[i];
            tmp++;
        }
    }
    cout<<endl<<"OUT: ";
    for(int i = 0 ; i < n; i++)
        cout<<mas[i]<<" ";
    cout << endl;
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2018, 01:21
Ответы с готовыми решениями:

Записать в данный массив сначала все отрицательные числа и нули, затем все положительные, сохраняя порядок их следования
Здравствуйте! Прошу вас о помощи! Помогите пожалуйста написать код программы! &quot;Дан массив чисел,...

Расположить сначала все отрицательные элементы, затем положительные и нули, сохраняя первоначальный порядок их
Если организовать такой цикл и такую &quot;сортировку&quot;, то все отрицательные встают &quot;перед&quot; остальными,...

Записать сначала все отрицательные элементы, затем нули и положительные элементы, сохраняя порядок следования во второй массив.
Помогите решить 2 задачи 1) Дан массив чисел, содержащий 20 элементов. Записать сначала все...

Записать в массив сначала все положительные, затем все отрицательные и нули, сохраняя порядок следования
Приветы. задание: дан массив веществ. чисел, содержащий 25 элем. записать в этот массив сначала...

10
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
05.12.2018, 01:34 2
Небольшие замечания :
1. У Вас не вещественные числа.
2. Зачем тут нужен дин. массив ?
3. Где delete ?
0
7424 / 5019 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
05.12.2018, 01:37 3
VoronReki, нужны сначала положительные, а потом все остальные, правильно Вас понял ?
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
#include <iostream>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int k=0;
    const int n = 20;
    double a[n];
    
    for (int i = 0; i < n; i++)
    { 
    a[i]=rand()%19 - 9; 
    cout <<a[i]<<" ";       
    }       
    cout << endl;     
      
    for (int i = 0; i < n; i++)
        if (a[i]>0)
        {
            for (int j = i; j > k; j--)
            swap(a[j],a[j-1]);
            k++;
        }
        
    for (int i = 0; i < n; i++)
      cout <<a[i]<<" ";
      cout <<endl; 
     
system("pause");
return 0;
}
1
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
05.12.2018, 01:37 4
Для простоты, создайте ещё один массив, в который будете укладывать выходные значения. Тяжелее будет запутаться.
0
0 / 0 / 0
Регистрация: 17.10.2018
Сообщений: 51
05.12.2018, 01:53  [ТС] 5
1. отлажу алгоритм здесь, поменять на double не сложно.
2. чтобы не набирать каждый раз
3. добавить его несложно, в конце, когда код заработает.

Добавлено через 1 минуту
есть второй массив.
В консоли выводятся две строки: первая созданный несортированный, вторая - отсортированный

Добавлено через 2 минуты
Спасибо за ответ, но не могли бы вы пояснить где были ошибки в моем коде, мне сложно самому понять, а понимание надо, чтобы избежать на будущее, чтобы было понимание, а не зубрежка.
0
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
05.12.2018, 01:53 6
Цитата Сообщение от VoronReki Посмотреть сообщение
есть второй массив.
Не нахожу его в Вашем коде.
0
Мозгоправ
1739 / 1033 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
05.12.2018, 01:55 7
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
47
48
49
50
51
52
53
// Дан массив вещественных чисел, содержащий 20 элементов.Записать в этот же массив сначала все 
// положительные числа, а затем все отрицательные числа и нули, сохраняя порядок их следования.
 
#include <iostream>
#include <iomanip>
#include <ctime>
 
using namespace std;
 
const size_t SIZE = 20;
 
double arr[SIZE];
 
int main() {
 
    srand((unsigned int)time(NULL));
 
    // инициализация
    for (size_t i = 0; i < SIZE; ++i)
        arr[i] = rand() % 201 - 100;
 
    // вывод на консоль
    for (size_t i = 0; i < SIZE; ++i)
        cout << setw(4) << arr[i];
    cout << endl;
 
    // сортировка
    size_t index_after_positives = 0;
    for (size_t i = 0; i < SIZE; ++i) {
        if (arr[i] > 0) {
            if (index_after_positives == i) {
                ++index_after_positives;
            }
            else {
                // сохранить очередной положительный элемент
                double tmp = arr[i];
                // сдвинуть значения между index_after_positives и i вправо на одну позицию
                for (size_t k = i; k > index_after_positives; --k)
                    arr[k] = arr[k - 1];
                // на "освободившееся" место вставить сохранённый положительный элемент
                // и увеличить индекс, отмечающий позицию для следующего положительного элемента
                arr[index_after_positives++] = tmp;
            }
        }
    }
 
    // вывод на консоль
    for (size_t i = 0; i < SIZE; ++i)
        cout << setw(4) << arr[i];
    cout << endl;
 
    return 0;
}
0
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
05.12.2018, 01:56 8
Цитата Сообщение от VoronReki Посмотреть сообщение
где были ошибки в моем коде
Ваша ошибка в том, что Вы не меняете местами элементы массива, а просто присваиваете, портя оригинальные значения.
0
Yetty
05.12.2018, 02:07
  #9

Не по теме:

Цитата Сообщение от VoronReki Посмотреть сообщение
чтобы было понимание, а не зубрежка.
VoronReki, варианты Вам сбрасывают не для зубрёжки, а чтобы Вы их разобрали и посмотрели как что работает, и в дальнейшем использовали эти принципы для других своих программ ( по сути не важно, сдвинуть положительные или чётные или нули или например модули меньше единицы или ещё что-либо)
сравните количество циклов и строк и решите нужно ли искать ошибки в заведомо не оптимальной программе ?
если по коду есть вопросы - пишите, но если Вы просто разберётесь как он работает, вопросов не будет.

на рекомендации использовать доп.массив не обращайте внимание - для этой задачи он не нужен

0
Мозгоправ
1739 / 1033 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
05.12.2018, 02:32 10
Yetty, мой вариант чуть посложнее, но количество копирований элементов в среднем вдвое меньше. На 20 элементах типа double, конечно, ерунда, но тем не менее ))
0
0 / 0 / 0
Регистрация: 17.10.2018
Сообщений: 51
05.12.2018, 23:42  [ТС] 11
Цитата Сообщение от alkl Посмотреть сообщение
не меняете местами элементы массива
а переставлять с помощью указателей, правильно понимаю?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2018, 23:42
Помогаю со студенческими работами здесь

Расположить все элементы массива заданным образом: сначала все положительные, затем нули, затем отрицательные
Пожалуйста помогите, нужно решить 3 задачи 1. Дан массив А (25). Расположить все элементы в...

Записать в исходный массив сначала положительные числа и отрицательные, а затем нули, сохраняя порядок
Дан массив из 25 вещественных чисел. Записать в этот же массив сначала все положительные числа и...

Массив: переставить элементы таким образом, чтобы сначала были записаны все положительные, затем все отрицательные, а потом все нули.
Здравствуйте! помогите пожалуйста с задачей по информатике. Буду очень благодарна) В массиве из...

В матрице элементы строк разместить в следующем порядке: сначала все отрицательные, затем все положительные
В матрице элементы строк разместить в следующем порядке: сначала все отрицательные,затем все...

Записать в массив сначала все положительные числа, затем все остальные, сохраняя порядок
Привет.Помогите решить данную задачу;( Дан массив из N целых чисел. Записать в этот же массив...

Сдвинуть все отрицательные элементы с в начало массива,сохраняя их порядок между собой, а все положительные элементы
Дан целочисленный список с количеством элементов 2n, не содержащий нулей. Сдвинуть все...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru