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

Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.96
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
11.01.2013, 22:05     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    const int n = 10;
    double arr[n], max;
 
    cout << "Введите " << n << " чисел:" << endl;
    for (int i=0; i<n; i++)
        cin >> arr[i];
    
    max = arr[0];
    for (int i=1; i<n; i++)
        if (abs(arr[i]) > abs(max))
            max = arr[i];
 
 
    cout << "Максимальный по модулю равен " << max << endl;
 
    system("pause");
    return 0;               
}
программа ищит максимальный по модулю элемент. как в нее добавить еще чтоб она могла :Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных
в общем задача звучит так:В одномерном массиве, состоящем из n вещественных элементов, вычислить максималь-ный по модулю элемент массива. Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 22:05     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных
Посмотрите здесь:

Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных C++
C++ Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных
Преобразовать массив таким образом, чтобы элементы, равные нулю располагались после остальных. C++
C++ Преобразовать массив таким образом чтобы сначала располагались все элементы равные нулю а потом остальные
C++ Преобразовать массив таким образом, чтобы сначала располагались четные, а потом нечетные элементы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ZubSam
12 / 12 / 1
Регистрация: 24.03.2012
Сообщений: 238
11.01.2013, 23:42     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #21
Цитата Сообщение от David Sylva Посмотреть сообщение
Мы его подвинули в цикле.
думаю можно продолжать)
я дико извиняюсь, но просто не пойму, в каком именно месте мы его сдвигаем ?
C++
1
2
3
for ( j = i; j < size - 1; ++j) 
                array[j] = array[j+1]; //для элемента со значением 0 , присваиваем впереди стоящий 
            array[size - 1] = 0;// и к последнему элементу массива который хранит в себе 8 присваиваем 0
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
11.01.2013, 23:43     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #22
илья1995 Какой у тебя код в итоге получился покажи?
tlittle
347 / 118 / 1
Регистрация: 08.01.2013
Сообщений: 726
11.01.2013, 23:44     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #23
Цитата Сообщение от ZubSam Посмотреть сообщение
думаю можно продолжать)
я дико извиняюсь, но просто не пойму, в каком именно месте мы его сдвигаем ?
C++
1
2
3
for ( j = i; j < size - 1; ++j) 
                array[j] = array[j+1]; //для элемента со значением 0 , присваиваем впереди стоящий 
            array[size - 1] = 0;// и к последнему элементу массива который хранит в себе 8 присваиваем 0
Ну как же во второй строке приведенного тобой фрагмента. Последняя итерация цикла передвинет последний элемент массива на позицию назад [size-1]. Дальше строкой 3 ты обнуляешь позицию [size].
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
11.01.2013, 23:50     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #24
Цитата Сообщение от tlittle Посмотреть сообщение
Ну как же во второй строке приведенного тобой фрагмента. Последняя итерация цикла передвинет последний элемент массива на позицию назад [size-1]. Дальше строкой 3 ты обнуляешь позицию [size].
Передвинет на [size-1-1].Дальше обнуляешь, позицию [size-1], позиции size нету.
ZubSam
12 / 12 / 1
Регистрация: 24.03.2012
Сообщений: 238
11.01.2013, 23:53     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #25
Цитата Сообщение от tlittle Посмотреть сообщение
Ну как же во второй строке приведенного тобой фрагмента. Последняя итерация цикла передвинет последний элемент массива на позицию назад [size-1]. Дальше строкой 3 ты обнуляешь позицию [size].
все наконец то понял) и когда понял , то осознал что это как то очень очевидным было ))
tlittle
347 / 118 / 1
Регистрация: 08.01.2013
Сообщений: 726
11.01.2013, 23:56     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #26
Цитата Сообщение от David Sylva Посмотреть сообщение
Передвинет на [size-1-1].Дальше обнуляешь, позицию [size-1], позиции size нету.
Да, прошу прощения, мне в последнее время частенько приходится использовать нумерацию массивов с 1
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
12.01.2013, 00:02  [ТС]     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #27
Цитата Сообщение от David Sylva Посмотреть сообщение
илья1995 Какой у тебя код в итоге получился покажи?
вот такой
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    const int n = 10;
    double arr[n], max;
 
    cout << "Введите " << n << " чисел:" << endl;
    for (int i=0; i<n; i++)
        cin >> arr[i];
    
    max = arr[0];
    for (int i=1; i<n; i++)
        if (abs(arr[i]) > abs(max))
            max = arr[i];
 
 
    cout << "Максимальный по модулю равен " << max << endl;
    int i, j; 
 
    for ( i = 0; i < n; ++i) 
        if(arr[i] == 0) 
        { 
            for ( j = i; j < n - 1; ++j) 
                arr[j] = arr[j+1]; 
            arr[n - 1] = 0; 
        } 
 
        for ( i = 0; i < n; ++i) 
           cout << arr[i] << " "; 
        cout << endl;
    system("pause");
    return 0;               
}
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
12.01.2013, 00:11     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #28
Типа такого
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
#include <iostream>
#include <cmath>
using namespace std; 
 
void enter(double* array, int size) 
{ 
    cout << "Введите " << size << " чисел:" << endl;
    for (int i = 0; i < size; i++)
        cin >> array[i];
} 
 
void max_element(double* array, int size) 
{   
    double max; 
    int i;
    max = array[0];
    for ( i = 1; i < size; i++)
        if (abs(array[i]) > abs(max))
            max = array[i];
 cout << "Максимальный по модулю равен " << max << endl;
 } 
 
void func_zero(double* array, int size) 
{ 
 
    int i, j; 
 
    for ( i = 0; i < size; ++i) 
        if(array[i] == 0) 
        { 
            for ( j = i; j < size - 1; ++j) 
                array[j] = array[j+1]; 
            array[size - 1] = 0; 
        } 
 
        for ( i = 0; i < size; ++i) 
           cout << array[i] << " "; 
        cout << endl;
 
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    const int n = 10;
    double arr[n];
    enter(arr, n);  
    max_element(arr, n); 
    func_zero(arr, n);
 
    system("pause");
    return 0;               
}
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
12.01.2013, 00:15  [ТС]     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #29
Цитата Сообщение от David Sylva Посмотреть сообщение
Типа такого
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
#include <iostream>
#include <cmath>
using namespace std; 
 
void enter(double* array, int size) 
{ 
    cout << "Введите " << size << " чисел:" << endl;
    for (int i = 0; i < size; i++)
        cin >> array[i];
} 
 
void max_element(double* array, int size) 
{   
    double max; 
    int i;
    max = array[0];
    for ( i = 1; i < size; i++)
        if (abs(array[i]) > abs(max))
            max = array[i];
 cout << "Максимальный по модулю равен " << max << endl;
 } 
 
void func_zero(double* array, int size) 
{ 
 
    int i, j; 
 
    for ( i = 0; i < size; ++i) 
        if(array[i] == 0) 
        { 
            for ( j = i; j < size - 1; ++j) 
                array[j] = array[j+1]; 
            array[size - 1] = 0; 
        } 
 
        for ( i = 0; i < size; ++i) 
           cout << array[i] << " "; 
        cout << endl;
 
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    const int n = 10;
    double arr[n];
    enter(arr, n);  
    max_element(arr, n); 
    func_zero(arr, n);
 
    system("pause");
    return 0;               
}
это получается вы перед главной функцией добавили еще 3?
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
12.01.2013, 00:17     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #30
Цитата Сообщение от илья1995 Посмотреть сообщение
это получается вы перед главной функцией добавили еще 3?
А как надо было? Программа начинается с функции int main, главная функция это точка входа в программу.
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
12.01.2013, 00:22  [ТС]     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #31
Цитата Сообщение от David Sylva Посмотреть сообщение
А как надо было? Программа начинается с функции int main, главная функция это точка входа в программу.
не все правильно я просто уточнил так ли я понял т.к. в в виде функций программу не разу не оформлял в с++
tlittle
347 / 118 / 1
Регистрация: 08.01.2013
Сообщений: 726
12.01.2013, 00:23     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #32
Цитата Сообщение от David Sylva Посмотреть сообщение
Типа такого
Прошу прощения, что опять вмешиваюсь, но я бы категорически не рекомендовал разбивать на функции именно так. Поясню, почему. Функция, которая ищет максимальный элемент не должна выводить его на экран. Должно быть примерно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double max_element(double* array, int size) 
{   
    ...
 
    // cout << "Максимальный по модулю равен " << max << endl;
    return max;
}
 
int main()
{
    ...
 
    cout << "Максимальный по модулю равен " << max_element(arr, n);  << endl;
 
    ...
}
Это, во-первых, правильно, во-вторых... правильно

ЗЫ. Я бы разбил правильно, но я не знаю C++
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
12.01.2013, 00:29     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #33
Цитата Сообщение от tlittle Посмотреть сообщение
Прошу прощения, что опять вмешиваюсь, но я бы категорически не рекомендовал разбивать на функции именно так. Поясню, почему. Функция, которая ищет максимальный элемент не должна выводить его на экран. Должно быть примерно так:
Субъективно.
Я показал, пример ТС, как можно сделать, нюансы он реализует сам.
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
12.01.2013, 00:29  [ТС]     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #34
Цитата Сообщение от tlittle Посмотреть сообщение
Прошу прощения, что опять вмешиваюсь, но я бы категорически не рекомендовал разбивать на функции именно так. Поясню, почему. Функция, которая ищет максимальный элемент не должна выводить его на экран. Должно быть примерно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double max_element(double* array, int size) 
{   
    ...
 
    // cout << "Максимальный по модулю равен " << max << endl;
    return max;
}
 
int main()
{
    ...
 
    cout << "Максимальный по модулю равен " << max_element(arr, n);  << endl;
 
    ...
}
Это, во-первых, правильно, во-вторых... правильно

ЗЫ. Я бы разбил правильно, но я не знаю C++
возможно вы правы но т.к. я сам не понимаю в функция то по другому сделать не могу
т.е и введенный массив функция не должна выводить и отредактированный тоже . все выводы на экран должны быть в главной функции?
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
12.01.2013, 00:34     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #35
Цитата Сообщение от илья1995 Посмотреть сообщение
возможно вы правы но т.к. я сам не понимаю в функция то по другому сделать не могу
В данной задаче, то что советует title не принципиально.
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
12.01.2013, 00:37  [ТС]     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #36
ясно. спасибо.

 Комментарий модератора 
правила форума, п.3.6 Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 00:58     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных
Еще ссылки по теме:

C++ Превратить массив таким образом, чтобы все элементы, равные нулю и единице, располагались после всех остальных
C++ Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 C++

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

Или воспользуйтесь поиском по форуму:
tlittle
347 / 118 / 1
Регистрация: 08.01.2013
Сообщений: 726
12.01.2013, 00:58     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных #37
Цитата Сообщение от David Sylva Посмотреть сообщение
В данной задаче, то что советует title не принципиально.
Если бы проверял выполнение данного задания, я бы стопроцентно придрался и снизил балл за неверное понимание задания. Грубо говоря, есть задание:
В одномерном массиве, состоящем из n вещественных элементов, вычислить максимальный по модулю элемент массива. Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
Если говорят - "каждый пункт в виде функции", то должно быть две функции:
1. В одномерном массиве, состоящем из n вещественных элементов, вычислить максимальный по модулю элемент массива
2. Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
Ну и, должна быть программа, которая получит массив (тем или иным методом), натравит на него наши функции и выведет результат.
Само-собой, все зависит от преподавателя, но с точки зрения формальной логики должно быть именно так.

ЗЫ. Тем более важно это в обучающем процессе - такое разбиение по функциям вообще не отражает пользы от использования функций, их выделение абсолютно бессмысленно.

ЗЗЫ. Да, я понимаю, ухожу. Илья, не слушай, сдавай задачу в таком виде и не забивай себе голову. Все равно тебе это больше никогда не пригодится
Yandex
Объявления
12.01.2013, 00:58     Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных
Ответ Создать тему
Опции темы

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