4 / 4 / 3
Регистрация: 17.10.2011
Сообщений: 169
1

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

11.01.2013, 22:05. Показов 13268. Ответов 36
Метки нет (Все метки)

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
#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 вещественных элементов, вычислить максималь-ный по модулю элемент массива. Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2013, 22:05
Ответы с готовыми решениями:

Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных
Напишите пожалуста программку, метод сортировки ваще не понимаю. Преобразовать массив таким...

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

Преобразовать массив таким образом, чтобы элементы, равные нулю располагались после остальных.
Напишите, пожалуйста, программу. Преобразовать массив таким образом, чтобы элементы, равные нулю...

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

36
14 / 14 / 1
Регистрация: 24.03.2012
Сообщений: 238
11.01.2013, 23:42 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от 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
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:43 22
илья1995 Какой у тебя код в итоге получился покажи?
0
349 / 120 / 1
Регистрация: 08.01.2013
Сообщений: 728
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].
1
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:50 24
Цитата Сообщение от tlittle Посмотреть сообщение
Ну как же во второй строке приведенного тобой фрагмента. Последняя итерация цикла передвинет последний элемент массива на позицию назад [size-1]. Дальше строкой 3 ты обнуляешь позицию [size].
Передвинет на [size-1-1].Дальше обнуляешь, позицию [size-1], позиции size нету.
1
14 / 14 / 1
Регистрация: 24.03.2012
Сообщений: 238
11.01.2013, 23:53 25
Цитата Сообщение от tlittle Посмотреть сообщение
Ну как же во второй строке приведенного тобой фрагмента. Последняя итерация цикла передвинет последний элемент массива на позицию назад [size-1]. Дальше строкой 3 ты обнуляешь позицию [size].
все наконец то понял) и когда понял , то осознал что это как то очень очевидным было ))
0
349 / 120 / 1
Регистрация: 08.01.2013
Сообщений: 728
11.01.2013, 23:56 26
Цитата Сообщение от David Sylva Посмотреть сообщение
Передвинет на [size-1-1].Дальше обнуляешь, позицию [size-1], позиции size нету.
Да, прошу прощения, мне в последнее время частенько приходится использовать нумерацию массивов с 1
0
4 / 4 / 3
Регистрация: 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;               
}
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
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;               
}
1
4 / 4 / 3
Регистрация: 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?
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
12.01.2013, 00:17 30
Цитата Сообщение от илья1995 Посмотреть сообщение
это получается вы перед главной функцией добавили еще 3?
А как надо было? Программа начинается с функции int main, главная функция это точка входа в программу.
0
4 / 4 / 3
Регистрация: 17.10.2011
Сообщений: 169
12.01.2013, 00:22  [ТС] 31
Цитата Сообщение от David Sylva Посмотреть сообщение
А как надо было? Программа начинается с функции int main, главная функция это точка входа в программу.
не все правильно я просто уточнил так ли я понял т.к. в в виде функций программу не разу не оформлял в с++
0
349 / 120 / 1
Регистрация: 08.01.2013
Сообщений: 728
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++
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
12.01.2013, 00:29 33
Цитата Сообщение от tlittle Посмотреть сообщение
Прошу прощения, что опять вмешиваюсь, но я бы категорически не рекомендовал разбивать на функции именно так. Поясню, почему. Функция, которая ищет максимальный элемент не должна выводить его на экран. Должно быть примерно так:
Субъективно.
Я показал, пример ТС, как можно сделать, нюансы он реализует сам.
0
4 / 4 / 3
Регистрация: 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++
возможно вы правы но т.к. я сам не понимаю в функция то по другому сделать не могу
т.е и введенный массив функция не должна выводить и отредактированный тоже . все выводы на экран должны быть в главной функции?
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
12.01.2013, 00:34 35
Цитата Сообщение от илья1995 Посмотреть сообщение
возможно вы правы но т.к. я сам не понимаю в функция то по другому сделать не могу
В данной задаче, то что советует title не принципиально.
1
4 / 4 / 3
Регистрация: 17.10.2011
Сообщений: 169
12.01.2013, 00:37  [ТС] 36
ясно. спасибо.

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

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

ЗЗЫ. Да, я понимаю, ухожу. Илья, не слушай, сдавай задачу в таком виде и не забивай себе голову. Все равно тебе это больше никогда не пригодится
0
12.01.2013, 00:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2013, 00:58
Помогаю со студенческими работами здесь

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

Преобразовать массив таким образом чтобы сначала располагались все элементы равные нулю а потом остальные
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; using namespace std; int...

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

Преобразовать список таким образом, чтобы сначала располагались все элементы, равные нулю, а потом - все остальные
Подскажите/помогите, не знаю как реализовать в коде. Поидее, мне нужно найти нуль, затем...


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

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

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