Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/74: Рейтинг темы: голосов - 74, средняя оценка - 4.64
4 / 4 / 3
Регистрация: 17.10.2011
Сообщений: 169

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

11.01.2013, 22:05. Показов 14338. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2013, 22:05
Ответы с готовыми решениями:

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

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

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

36
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 22:25
С 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
4 / 4 / 3
Регистрация: 17.10.2011
Сообщений: 169
11.01.2013, 22:33  [ТС]
спасибо ваш алгоритм работает вставил в свою программу
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
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 22:36
Мог бы всё просто. Проходим циклом по массиву, если встречаем 0, начинаем второй цикл с этого элемента и каждому элементу массива, начинаем с того где был, 0 присваиваем впереди стоящий, а последнему элементу присваиваем 0.

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

Добавлено через 36 секунд
Сейчас внесу поправку относительно, того если нулевые элементы стоят рядом.
ясно спасибо
0
5 / 5 / 3
Регистрация: 09.12.2009
Сообщений: 42
11.01.2013, 22:42
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
4 / 4 / 3
Регистрация: 17.10.2011
Сообщений: 169
11.01.2013, 22:48  [ТС]
Цитата Сообщение от 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
349 / 120 / 1
Регистрация: 08.01.2013
Сообщений: 728
11.01.2013, 22:59
Цитата Сообщение от 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
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:13
С повторяющимися 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
349 / 120 / 1
Регистрация: 08.01.2013
Сообщений: 728
11.01.2013, 23:17
Цитата Сообщение от 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
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:23
tlittle
Вот так попробуй
C++
1
int array[size] = { 0, 0, 0, 0, 0, 0, 5, 6, 7, 8 };
нормально отработает?
0
4 / 4 / 3
Регистрация: 17.10.2011
Сообщений: 169
11.01.2013, 23:24  [ТС]
а как оформить мою задачу каждый пункт в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров Использование глобальных переменных в функциях не допускается.
0
11.01.2013, 23:25

Не по теме:

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

0
14 / 14 / 1
Регистрация: 24.03.2012
Сообщений: 238
11.01.2013, 23:28
Цитата Сообщение от David Sylva Посмотреть сообщение
а последнему элементу присваиваем 0.
а что происходит в этот момент с этим последним элементом , он ведь хранит в себе значение "8" ?
0
349 / 120 / 1
Регистрация: 08.01.2013
Сообщений: 728
11.01.2013, 23:31
Цитата Сообщение от 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
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:33
ZubSam мы его передвинули на позицию вперёд.

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

Добавлено через 26 секунд
tlittle сейчас проверю по скорости, как работают алгоритмы.
0
14 / 14 / 1
Регистрация: 24.03.2012
Сообщений: 238
11.01.2013, 23:33
Цитата Сообщение от David Sylva Посмотреть сообщение
мы его передвинули на позицию вперёд.
то есть он автоматический сдвигается на одну позицию вперед?
0
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 23:35
Цитата Сообщение от ZubSam Посмотреть сообщение
то есть он автоматический сдвигается на одну позицию вперед?
Мы его подвинули в цикле.
0
349 / 120 / 1
Регистрация: 08.01.2013
Сообщений: 728
11.01.2013, 23:36
Цитата Сообщение от David Sylva Посмотреть сообщение
ZubSam мы его передвинули на позицию вперёд.

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

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

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

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2013, 23:41
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru