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

Переставить нули и двойки в начало массива

11.12.2014, 15:39. Показов 878. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно решение у меня есть, но я не понимаю этого кода, можете пожалуйста объяснить, что делает каждая строчка или команда.
Собственно код следующий:
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
#include <iostream>
#include <iomanip>
using namespace std;
void swap(int *massiv, int index_one, int index_two)
{
    int temp = massiv[index_one];
    massiv[index_one] = massiv[index_two];
    massiv[index_two] = temp;
}
 
void func(int *a, const int size)
{
    int index = 0;
    for (int i = 0; i<size; i++)
    {
        if (a[i] == 0)
        {
            swap(a, i, index);
            ++index;
        }
    }
    for (int i = index; i<size; i++)
    {
        if (a[i] == 2)
        {
            swap(a, i, index);
            ++index;
        }
    }
}
 
int main()
{
    const int N = 12;
    int a[N] = { 1, 2, 1, 2, 0, 0, 0, 1, 2, 0, 1, 2 };
    func(a, N);
    for (int i = 0; i<N; i++)
        cout << setw(3) << a[i];
    cout << endl;
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2014, 15:39
Ответы с готовыми решениями:

Переставить элементы массива так, чтобы сначала располагались все нули, затем все двойки и, наконец, все единицы
Добрый день ! У меня к вам просьба. Помогите решить задачу по с++ начинающему чайнику. :wall:...

Переставить элементы массива так, чтобы располагались все нули, затем все единицы, и, наконец, все двойки
Помогите пожалуйста решить задачу: В массиве х(12) каждый элемент равен 0, 1 или 2. Переставить...

Переставить элементы массива так, чтобы сначала располагались все единицы, затем все двойки и, наконец, все нули
Ребят помогите пожалуйста В массив x(N) каждый элемент равен 0,1 или 2. Приставить элементы...

Переставить элементы массива так, чтобы сначала шли единицы, а затем двойки
Задача такова: В массиве с 10 элементами, состоящим из единиц и двоек, сделать так, чтобы сначала...

7
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
11.12.2014, 15:41 2
А можно полюбопытствовать, чем вызван интерес к сей программе?
Она переставляет данные массива так, чтобы сначала шли все нули, потом двойки,
а уж за ними - все остальное.
0
3 / 3 / 0
Регистрация: 08.12.2014
Сообщений: 30
11.12.2014, 15:50  [ТС] 3
Не, ну это я и так понял,вот просто есть одно НО.
Что значит
C++
1
2
3
4
5
6
void swap(int *massiv, int index_one, int index_two)
{
    int temp = massiv[index_one];
    massiv[index_one] = massiv[index_two];
    massiv[index_two] = temp;
}
Что делает это?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void func(int *a, const int size)
{
    int index = 0;
    for (int i = 0; i<size; i++)
    {
        if (a[i] == 0)
        {
            swap(a, i, index);
            ++index;
        }
    }
    for (int i = index; i<size; i++)
    {
        if (a[i] == 2)
        {
            swap(a, i, index);
            ++index;
        }
    }
}
В частности, чему равна size, ведь она константа, но чему она равна? Что выполняет void func? Да и наконец, что делает swap(a, i, index)?

Добавлено через 1 минуту
Как я понял, что в этом коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void func(int *a, const int size)
{
    int index = 0;
    for (int i = 0; i<size; i++)
    {
        if (a[i] == 0)
        {
            swap(a, i, index);
            ++index;
        }
    }
    for (int i = index; i<size; i++)
    {
        if (a[i] == 2)
        {
            swap(a, i, index);
            ++index;
        }
    }
}
Определяется приоритет для элементов, в частности сначала 0, потом 2
0
44 / 30 / 18
Регистрация: 15.11.2014
Сообщений: 169
11.12.2014, 15:55 4
Цитата Сообщение от justnomad Посмотреть сообщение
Определяется приоритет для элементов, в частности сначала 0, потом 2
тут не определяется приоритет, а просто эта функция которая ставит в начала 0, потом 2, потом остальные. Функция swap она меняет элеенты местами.
0
3 / 3 / 0
Регистрация: 08.12.2014
Сообщений: 30
11.12.2014, 16:09  [ТС] 5
Ладно, в целом все понял, осталось только узнать, что это делает?
C++
1
2
3
4
5
6
void swap(int *massiv, int index_one, int index_two)
{
    int temp = massiv[index_one];
    massiv[index_one] = massiv[index_two];
    massiv[index_two] = temp;
}
и все-таки,чему равна константа size?
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
11.12.2014, 16:21 6
Вариант без swap'a:
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
#include <iostream>
 
using namespace std;
 
int main() {
    const int size = 11;
    int array[] = {0, 1, 1, 1, 2, 0, 1, 2, 1, 0, 1};
    
    for ( int i = 0; i < size; i++ ) {
        if ( array[i] != 2 || array[i] != 0 ) {
            for ( int j = size-1; j > i; j-- ) {
                if ( array[j] == 0 || array[j] == 2 ) {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                    break;
                }
            }
        }
    }
    
    for ( int i = 0; i < size; i++ ) {
        cout << array[i] << " ";
    }
    
    return 0;
}
Только он не упорядочивает 0 и 2, а просто перемещает их влево.
0
3 / 3 / 0
Регистрация: 08.12.2014
Сообщений: 30
11.12.2014, 16:27  [ТС] 7
C++
1
2
3
4
5
6
void swap(int *massiv, int index_one, int index_two)
{
    int temp = massiv[index_one];
    massiv[index_one] = massiv[index_two];
    massiv[index_two] = temp;
}
просто объясните мне вот это =)
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
11.12.2014, 16:31 8
C++
1
2
3
4
5
6
void swap(int *massiv, int index_one, int index_two)
{
    int temp = massiv[index_one];   // запомнили, значение элемента массива  massiv[index_one]
    massiv[index_one] = massiv[index_two]; // записали вместо запомненного элемент  массива с индексом index_two
    massiv[index_two] = temp; // в освободившееся место записали запомненное значение
}
Т.о. при вызове функции
Цитата Сообщение от justnomad Посмотреть сообщение
swap(a, i, index);
a[i] меняется местами с a[index]
0
11.12.2014, 16:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2014, 16:31
Помогаю со студенческими работами здесь

Отрицательные элементы массива А(N) переставить в начало массива и расположить их в порядке возрастания
Привет. Хочу разобраться в использовании функциий. В функции я хочу найти все отррицательные...

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

Элементы массива, находящиеся в интервале [25, 75], переставить в начало массива
Помогите пожалуйста И.Массив Х(20) заполнить целыми случайными числами в диапазоне от 11 до 111....

Поместить все нули в начало массива целых чисел
Задан массив целых чисел. Поместить все нули в начало массива. Например дано {х,х,0,х,0,х}, в...


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

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