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

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

11.01.2013, 22:05. Показов 14279. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru