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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.96
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
#1

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

11.01.2013, 22:05. Просмотров 3573. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
David Sylva
1286 / 948 / 51
Регистрация: 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 / 1
Регистрация: 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
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 22:36 #4
Мог бы всё просто. Проходим циклом по массиву, если встречаем 0, начинаем второй цикл с этого элемента и каждому элементу массива, начинаем с того где был, 0 присваиваем впереди стоящий, а последнему элементу присваиваем 0.

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

Добавлено через 36 секунд
Сейчас внесу поправку относительно, того если нулевые элементы стоят рядом.
ясно спасибо
0
lopata
5 / 5 / 0
Регистрация: 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 / 1
Регистрация: 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
1286 / 948 / 51
Регистрация: 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
1286 / 948 / 51
Регистрация: 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 / 1
Регистрация: 17.10.2011
Сообщений: 169
11.01.2013, 23:24  [ТС] #12
а как оформить мою задачу каждый пункт в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров Использование глобальных переменных в функциях не допускается.
0
David Sylva
11.01.2013, 23:25
  #13

Не по теме:

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

0
ZubSam
12 / 12 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2013, 23:31
Привет! Вот еще темы с ответами:

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

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

Преобразовать массив таким образом, чтобы сначала располагались четные, а потом нечетные элементы - C++
Ребята , помогите : нужно составить алгоритм и программу преобразования массива A, таким образом , чтобы сначала распологались четные , а...

Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 - C++
В одномерном массиве, состоящей из n вещественных элементов, вычислить: 1) номер минимального элемента массива; 2) сумму элементов...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.01.2013, 23:31
Ответ Создать тему
Опции темы

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