Форум программистов, компьютерный форум CyberForum.ru

Поменять местами отрицательные элементы массива - C++

Восстановить пароль Регистрация
 
plast
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 5
28.04.2010, 20:08     Поменять местами отрицательные элементы массива #1
Привет. Была дана лаб работа с массивами. Задание было такое что вводится массив, а на выводе должно быть так, что положительные элементы остаются на месте, а отрицательные меняются местами как показано на скрине ниже)) Код как бы есть, но там использует дополнительный массив для работы, а вот как сделать так чтоб без дополнительного массива это работало у меня вопрос =(( помогите пожалуйста =))

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
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    double *a;
    int i,n;
    cout<<" input n ";cin>>n;
    cout<<" n= "<<n<<endl;
    a=new double[n];
    cout<<"input a ";
    for(i=0;i<n;i++)
        cin>>a[i];
    revpol(a,n);
   cout<<"Rezult"<<endl;
    for(i=0;i<n;i++)
       cout<<"a["<<i<<"] "<<a[i]<<endl;
    delete[]a;
    
    return 0;
}
 
void zamena(double *a,int n)
{
    int i,j,kk;
    double *b;
    b=new double[n];
    for (i=0,kk=0;i<n; i++)
{ 
if(a[i]<0)
 {kk++;}
}
for (i=0,j=0;j<kk;i++)
{if(a[i]<0)
     {
            b[j++]=a[i];
     }
}
            
        for (i=0,j=kk-1;i<n;i++)
{if(a[i]<0)
     {
            a[i]=b[j--];
        
     }
 
 
}   
}
Миниатюры
Поменять местами отрицательные элементы массива  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2010, 20:08     Поменять местами отрицательные элементы массива
Посмотрите здесь:

Поменять местами 1 и последний, 2 и предпоследний элементы одномерного массива C++
C++ Дана матрица размера MxN. Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы.
C++ Поменять элементы массива местами
C++ Поменять местами элементы массива
C++ Поменять местами элементы массива
C++ Поменять местами третьи отрицательные элементы массива
Поменять местами отрицательные элементы массива C++
C++ Поменять элементы массива местами

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
plast
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 5
14.05.2010, 21:08  [ТС]     Поменять местами отрицательные элементы массива #2
неужели никто незнает? ((
hinsifer
Сообщений: n/a
14.05.2010, 22:10     Поменять местами отрицательные элементы массива #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
слабо понял по какому правилу меняем местами элементы массива..
при изменении массива, не забудь поменять N

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
#include <stdlib.h>
#include <iostream>
#include <time.h>
#include <stdio.h>
 
using namespace std;
 
const int N = 8;   // Размерность массива.
 
// Заполняем массив.
void vvod(int m[])
{
    srand(time(NULL));
 
    for(int i=0;i<N;++i)
    {
        m[i] = rand() % 10 - 5;
    }
}
 
void vivod(int m[])
{
    for(int i=0;i<=N;++i)
    {
        cout << m[i] << " ";
    }
}
 
void zamena(int m[])
{
    int buf = 0;    // Буферная переменная.
 
    // Особый случай.
    if ( ( m[1] < 0) &&
        (m[N] <0 ) )
    {
        buf = m[N];
        m[N] = m[1];
        m[1] = buf;
    }
 
    // Сама замена.
    for (int i=2;i <= N/2;++i)
    {
        if ( (m[i] < 0) &&
            (m[N-i] < 0) )
        {
            buf = m[N-i];
            m[N-i] = m[i];
            m[i] = buf;
        }
    }
}
 
int main(int argc, char** argv)
{
   //int* m = new int[N];    // Создаем массив из кучи.
   // vvod(m);                // Заполняем массив случайными величинами.
    int m[] = {-1,-2,-3,4,5,-6,-7,8,-9};
    vivod(m);               // 
    zamena(m);
    cout << endl;
    vivod(m);
    return (EXIT_SUCCESS);
}
plast
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 5
14.05.2010, 23:21  [ТС]     Поменять местами отрицательные элементы массива #4
хм сейчас посмотрим ))

слабо понял по какому правилу меняем местами элементы массива..
при изменении массива, не забудь поменять N
ну например ищет с начала массава отриц число назовем его Х, как найдет то начинает искать отриц число с конца массива назовем его Y и меняет их местами и так далее
plast
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 5
19.05.2010, 16:18  [ТС]     Поменять местами отрицательные элементы массива #5
кому понадобится ) только сама процедура

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void zamena (double *a, int n)
{
double d;
int i,j;
i = 0;
j = n-1;
while (i<j)
{
if (a[i] < 0)
{
while (a[j] > 0 && j > i) j--;
if (j == i) break;
else {d=a[i]; a[i] = a[j]; a[j]=d;}
}
i++;
j--;
}
}
Yandex
Объявления
19.05.2010, 16:18     Поменять местами отрицательные элементы массива
Ответ Создать тему
Опции темы

Текущее время: 11:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru