Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.79/24: Рейтинг темы: голосов - 24, средняя оценка - 4.79
илья1995
3 / 3 / 3
Регистрация: 17.10.2011
Сообщений: 169
1

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 22:05
Ответы с готовыми решениями:

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

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

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

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

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

36
David Sylva
1294 / 956 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 22:25 2
С 0 можно делать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> 
 
int main() 
{ 
    const int size = 10; 
    int array[size] = { 1, 2, 3, 0, 4, 0, 5, 6, 7, 8 }; 
    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) 
            std::cout << array[i] << " "; 
        std::cout << std::endl;
}
1
илья1995
3 / 3 / 3
Регистрация: 17.10.2011
Сообщений: 169
11.01.2013, 22:33  [ТС] 3
спасибо ваш алгоритм работает вставил в свою программу
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;               
}
Добавлено через 2 минуты
не могли бы вы пояснить как работает ваш цикл по поиск 0 и установки его в конец массива
0
David Sylva
1294 / 956 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 22:36 4
Мог бы всё просто. Проходим циклом по массиву, если встречаем 0, начинаем второй цикл с этого элемента и каждому элементу массива, начинаем с того где был, 0 присваиваем впереди стоящий, а последнему элементу присваиваем 0.

Добавлено через 36 секунд
Сейчас внесу поправку относительно, того если нулевые элементы стоят рядом.
1
илья1995
3 / 3 / 3
Регистрация: 17.10.2011
Сообщений: 169
11.01.2013, 22:40  [ТС] 5
Цитата Сообщение от David Sylva Посмотреть сообщение
Мог бы всё просто. Проходим циклом по массиву, если встречаем 0, начинаем второй цикл с этого элемента и каждому элементу массива, начинаем с того где был, 0 присваиваем впереди стоящий, а последнему элементу присваиваем 0.

Добавлено через 36 секунд
Сейчас внесу поправку относительно, того если нулевые элементы стоят рядом.
ясно спасибо
0
lopata
5 / 5 / 3
Регистрация: 09.12.2009
Сообщений: 42
11.01.2013, 22:42 6
C++
1
2
3
4
5
6
7
8
int index;
    for (int i=0; i<n; i++)
        if (arr[i]==0)
        {
            for(index =i; index < n-1; index++)
                arr[index]= arr[index+1];
            arr[n-1]= 0;
        }
0
илья1995
3 / 3 / 3
Регистрация: 17.10.2011
Сообщений: 169
11.01.2013, 22:48  [ТС] 7
Цитата Сообщение от lopata Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
int index;
    for (int i=0; i<n; i++)
        if (arr[i]==0)
        {
            for(index =i; index < n-1; index++)
                arr[index]= arr[index+1];
            arr[n-1]= 0;
        }
цикл помойму точно такой же как и у David Sylva
0
tlittle
347 / 118 / 1
Регистрация: 08.01.2013
Сообщений: 727
Завершенные тесты: 1
11.01.2013, 22:59 8
Цитата Сообщение от David Sylva Посмотреть сообщение
С 0 можно делать так
Не против, если я вмешаюсь?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    const int size = 10; 
 
    int array[size] = { 1, 2, 3, 0, 4, 0, 5, 6, 7, 8 }; 
    int i; 
 
    int zerocount=0;
 
    for ( i = 0; i < size-zerocount; ++i) 
    {
        if(array[i] != 0) 
        { 
            array[i-zerocount]=array[i];
        } else {
            zerocount++;
        }
    }
    for ( i = size-zerocount; i < size; ++i) array[i]=0;
Единственный вопрос, первый цикл нормально отработает в такой конструкцией в цикле?
0
David Sylva
1294 / 956 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:13 9
С повторяющимися 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
#include <iostream> 
 
int main() 
{ 
    const int size = 10; 
    int array[size] = { 0, 0, 0, 0, 0, 3, 4, 6, 7, 8 }; 
    int i, j; 
    int s = size;
 
    
    for ( i = 0; i < s; ++i) 
        if(array[i] == 0) 
        { 
            for ( j = i; j < size - 1; ++j)  
                array[j] = array[j+1];   
            array[size-1] = 0;  
            i--; 
            s--;
        }
            
        
        std::cout << std::endl;
        for ( i = 0; i < size; ++i) 
            std::cout << array[i] << " "; 
        std::cout << std::endl;
}
Добавлено через 3 минуты
tlittle с нулями стоящими рядом отработает неправильно.

Добавлено через 1 минуту
tlittle вы слишком усложнили эту задачу.
1
tlittle
347 / 118 / 1
Регистрация: 08.01.2013
Сообщений: 727
Завершенные тесты: 1
11.01.2013, 23:17 10
Цитата Сообщение от David Sylva Посмотреть сообщение
Добавлено через 3 минуты
tlittle с нулями стоящими рядом отработает неправильно.
С фига ли?

Добавлено через 1 минуту
tlittle вы слишком усложнили эту задачу.
1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0

Сколько итераций цикла сделает Ваш алгоритм? Сколько мой? А теперь представим, что в этом массиве 1000 значений?
0
David Sylva
1294 / 956 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:23 11
tlittle
Вот так попробуй
C++
1
int array[size] = { 0, 0, 0, 0, 0, 0, 5, 6, 7, 8 };
нормально отработает?
0
илья1995
3 / 3 / 3
Регистрация: 17.10.2011
Сообщений: 169
11.01.2013, 23:24  [ТС] 12
а как оформить мою задачу каждый пункт в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров Использование глобальных переменных в функциях не допускается.
0
David Sylva
11.01.2013, 23:25
  #13

Не по теме:

Цитата Сообщение от David Sylva Посмотреть сообщение
tlittle
Если вставляешь код, вставляй полностью вместе с заголовками, неудобно проверять.

0
ZubSam
13 / 13 / 1
Регистрация: 24.03.2012
Сообщений: 238
11.01.2013, 23:28 14
Цитата Сообщение от David Sylva Посмотреть сообщение
а последнему элементу присваиваем 0.
а что происходит в этот момент с этим последним элементом , он ведь хранит в себе значение "8" ?
0
tlittle
347 / 118 / 1
Регистрация: 08.01.2013
Сообщений: 727
Завершенные тесты: 1
11.01.2013, 23:31 15
Цитата Сообщение от David Sylva Посмотреть сообщение
tlittle
Вот так попробуй
C++
1
int array[size] = { 0, 0, 0, 0, 0, 0, 5, 6, 7, 8 };
нормально отработает?
Нет, не отработает. Надо убрать из "for ( i = 0; i < size-zerocount; ++i)" конструкцию -zerocount" (попробовать не могу, не программирую в c++ ) Тогда:

первая проход цикла - счетчик нулей равен 1
второй проход цикла - счетчик нулей равен 2
...
шестой проход цикла - счетчик нулей равен 6
седьмой проход цикла - сместили пятерку на 6 позиций влево (т.е., на позицию 0)
...
десятый проход цикла - сместили восьмерку на 6 позиций влево (т.е., на позицию 4)

Дальше остаток массива заполняется нулями.

Добавлено через 1 минуту
Цитата Сообщение от ZubSam Посмотреть сообщение
а что происходит в этот момент с этим последним элементом , он ведь хранит в себе значение "8" ?
Он уже не хранит (не должен хранить) в себе значение 8, значение 8 хранит в себе элемент [-1]
0
David Sylva
1294 / 956 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:33 16
ZubSam мы его передвинули на позицию вперёд.

Добавлено через 48 секунд
илья1995 не много подождите, сейчас мы закончим с tlittle обсуждение.

Добавлено через 26 секунд
tlittle сейчас проверю по скорости, как работают алгоритмы.
0
ZubSam
13 / 13 / 1
Регистрация: 24.03.2012
Сообщений: 238
11.01.2013, 23:33 17
Цитата Сообщение от David Sylva Посмотреть сообщение
мы его передвинули на позицию вперёд.
то есть он автоматический сдвигается на одну позицию вперед?
0
David Sylva
1294 / 956 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:35 18
Цитата Сообщение от ZubSam Посмотреть сообщение
то есть он автоматический сдвигается на одну позицию вперед?
Мы его подвинули в цикле.
0
tlittle
347 / 118 / 1
Регистрация: 08.01.2013
Сообщений: 727
Завершенные тесты: 1
11.01.2013, 23:36 19
Цитата Сообщение от David Sylva Посмотреть сообщение
ZubSam мы его передвинули на позицию вперёд.

Добавлено через 48 секунд
илья1995 не много подождите, сейчас мы закончим с tlittle обсуждение.

Добавлено через 26 секунд
tlittle сейчас проверю по скорости, как работают алгоритмы.
Да а что тут проверять. Создай массив на 1000 элементов. Нечетные элементы = 0. Четные равны 1. Твой алгоритм выполнит 500000 присвоений. Мой 1500

ЗЫ. А не. Мой 1000. Сколько твой чо-то боюсь ошибиться, но порядок такой.
1
David Sylva
1294 / 956 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:41 20
Цитата Сообщение от tlittle Посмотреть сообщение
Да а что тут проверять. Создай массив на 1000 элементов. Нечетные элементы = 0. Четные равны 1. Твой алгоритм выполнит 500000 присвоений. Мой 1500
ЗЫ. А не. Мой 1000. Сколько твой чо-то боюсь ошибиться, но порядок такой.

Не по теме:

Да ты прав, я просто твой код, толком не посмотрел.
Был не прав, извиняюсь.

0
11.01.2013, 23:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2013, 23:41

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru