Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 5

Отрицательные элементы перенести в конец массива используя указатели

19.11.2019, 19:09. Показов 887. Ответов 8
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Всем Привет, столкнулся с проблемой и не могу правельно с ней ничего сделать. Вопщем, не могу никак парвелтно вести в этот код показатель. (Слово показатель я мог неправельно перевести, так как не из России).
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <cmath>
using namespace std;
 
int main() 
{
 const int n = 11;
  int a[n], p = 1, i, p1 = 0, sum = 0, b[n], j=0;
 setlocale(0, "russian");
 
 
 
        //p-це добуток; i-це щьотчик; p1-кількість множників
  for (i = 0; i < n; i++) {
    cout << "Введiть елемент массиву:";
    cin >>a[i];
   
    
  
 }
  for (i = 0; i < n; i++)
   {
    if (i % 2 == 0) {
      p *= a[i];
      
     // continue;
    }
  }
  cout << endl << "Добуток парних елементiв массиву: " << p << endl;
 
 
{     //sum-сумма елем. массиву розташованих між першим та останнім елементом;
                    // i-це щьотчик; 
       
  for (i = 0; i < n; i++) { 
  }
  for (i = 0; i < n; i++) {
    if (i>1&&i<(n-1)) {
      sum += a[i];
      
    }
  }
  cout << endl << " сумма елементiв массиву якi розташованi мiж першим та останнiм елементом:  " << sum << endl;
}
 
 
{         // i-це щьотчик;                 
  for (i = 0; i < n; i++) {    
  }
  for (i = 0; i < n; i++) {
    if (a[i] >= 0) {
      b[j] = a[i];
      j++;
    }
  }
  for (i = 0; i < n; i++) {
    if (a[i]<0) {
      b[j] = a[i];
      j++;
    }
  } 
  for (j = 0; j < n; j++) {
    cout << "b[" << j << "]=" << b[j] << " ";
  }
 
  
}
system("pause");
 return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2019, 19:09
Ответы с готовыми решениями:

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

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

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

8
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.11.2019, 04:35
Адавай, покажчик - указатель. с указателями чуть позже, сначала код нужно привести в порядок.
напишите условие задачи.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
20.11.2019, 07:51
C++
1
2
3
4
5
6
7
8
9
int* pb=b;
for (int* pa=a; pa < a+n; pa++) {
    if (*pa >= 0) 
       (*pb)++ = *pa;
}
for (int* pa=a; pa < a+n; pa++) {
    if (*pa < 0) 
       (*pb)++ = *pa;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.11.2019, 14:16
zss, можете подсказать как сделать через указатели без доп. массива на основе такого блока
C++
1
2
3
4
5
6
7
8
int k=0;
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++;
    }
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
20.11.2019, 15:19
Вроде, тут ничего мудреного нет:
C++
1
2
3
4
5
6
7
8
int k=0;
for (int* p1=a; p1<a+n; p1++)
    if (*p1>=0)
    {
        for (int* p2 = p1; p2 > a+k; p2--)  
           swap(*p1,*p2);
        k++;
    }
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.11.2019, 16:50
zss, если поставить Ваш блок в мой код (код в спойлере)
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, k=0;
    cout << "n="; cin >> n;
 
    int*a = new int[n];
 
    for (int i = 0; i < n; i++)
        {
        a[i]=rand()%19 - 9;
        cout << a[i] << " ";
        }
    cout << "\n";      
      
    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 << "\n"; 
 
     delete[]a;
system("pause");
return 0;
}

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, k=0;
    cout << "n="; cin >> n;
 
    int*a = new int[n];
 
    for (int i = 0; i < n; i++)
        {
        a[i]=rand()%19 - 9;
        cout << a[i] << " ";
        }
    cout << "\n";      
    
    for (int* p1=a; p1<a+n; p1++)
    if (*p1>=0)
    {
        for (int* p2 = p1; p2 > a+k; p2--)  
           swap(*p1,*p2);
        k++;
    }
        
    for (int i = 0; i < n; i++)
        cout <<a[i]<<" ";
    cout << "\n"; 
 
     delete[]a;
system("pause");
return 0;
}

код начинает выдавать неправильный результат (отрицательные не перемещаются в конец массива).
n=20
6 -6 2 -4 -6 0 -4 -1 7 -9 -2 8 3 -3 -6 -4 5 2 8 2
6 -6 2 -6 -4 -1 0 -2 -4 7 -6 -4 5 -9 2 8 8 3 2 -3
подскажите как исправить
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
20.11.2019, 17:14
Yetty,
Цитата Сообщение от Yetty Посмотреть сообщение
swap(*p1,*p2);
Тут надо
C++
1
    swap(*p2, *(p2-1) );
p.s. отладчик рулит!!!!
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.11.2019, 17:21
Цитата Сообщение от zss Посмотреть сообщение
Тут надо >=
заменил, ситуация не изменилась
n=30
9 1 3 -1 6 5 4 -3 0 -6 -8 -7 3 -6 -7 3 5 5 1 -1 -1 8 3 2 -4 -5 1 9 0 7
9 1 3 6 5 4 -3 -1 -8 3 -6 3 5 5 1 -1 8 3 2 0 -4 -5 1 -7 9 -1 0 -6 7 -7
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
20.11.2019, 17:48
Yetty, я поправился, ошибка была все же не там, а в swap
C++
1
swap(*p2, *(p2-1) );
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.11.2019, 17:48
Помогаю со студенческими работами здесь

Массив: Все отрицательные элементы массива перенести в начало, а все остальные – в конец.
Задан массив из k чисел. Преобразовать массив следующим образом: все отрицательные элементы массива перенести в начало, а все остальные – в...

Все отрицательные элементы заданного массива перенести в начало, а все остальные – в конец
Помогите пожайлуста написать код . задание такое. желательно как можно проще и с коментариями Задан массив из k чисел. Преобразовать...

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

Перенести положительные элементы в начало массива, а отрицательные - в конец
Как должен выглядеть код нового массива в VBA который переставляет отрицательные числа? Исходные данные 2 55 -3 -43 12 -34 ...

Перенести отрицательные элементы в начало массива а остальные - в конец
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; void change(int *arr, int len) { int i=0; int tmp; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru