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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.95
hn_usf4685
Сообщений: n/a
#1

Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом — все отрицательные - C++

22.04.2010, 17:38. Просмотров 5727. Ответов 5
Метки нет (Все метки)

Здравствуйте, мне срочно нужна помощь:В одномерном массиве, состоящем из n целых элементов, вычислить:
1) произведение элементов массива с четными номерами;
2) сумму элементов массива, расположенных между первым и последним нулевыми
элементами.
Преобразовать массив таким образом, чтобы сначала располагались все положительные
элементы, а потом — все отрицательные (элементы, равные 0, считать положительными).
люди помогите пожалуйста, мне нужно завтра эту работу сдать.....За ранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2010, 17:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом — все отрицательные (C++):

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

Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом все отрицательные - C++
Помогите исправить ошибку, пожалуйста. Тут 3 задания в одном, ошибка в третьем. Задача 3: Из общего задания: "Примечание 1: если в задании...

Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом – все отрицательные - C++
Здравствуйте. Помогите, пожалуйста, разобраться с указанным заданием. Первые два пункта, вроде, получились, а вот последний (сортировка)...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
neske
1482 / 849 / 76
Регистрация: 26.03.2010
Сообщений: 2,917
22.04.2010, 19:22 #2
Решение совсем не красивое, но задание выполняет.
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
55
56
57
#include <iostream>
#include <iomanip>
#include <ctime>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int N;
    std::cout << "Введите кол-во элементов массива: ";
    std::cin >> N;
    int *MAS=new int [N];
    
    srand(time(NULL));
    std::cout << "Первоначальный массив:\n";
    for (int i=0; i<N; i++) // заполняем массив случайными числами.
    {
        MAS[i]=rand() % 11 - 5;
        std::cout << std::setw(3) << MAS[i];
    }
    std::cout << std::endl;
 
    int proizv=1; // тут будет хранится произведение.
    for (int i=1; i<=N/2; i++) // находим произведение элементов, с четным индексом.
        if (MAS[i*2-1]!=0)
            proizv*=MAS[i*2-1];
 
    int first_null=-1; // тут будет хранится индекс первого нулевого элемента.
    int last_null=-1; // тут будет хранится индекс последнего нулевого элемента.
    for (int i=0; i<N; i++)
        if (MAS[i]==0){
            first_null=i; // находим первый.
            break; }
    for (int j=N-1; j>=0; j--) 
        if (MAS[j]==0){
            last_null=j; // и последний элемент.
            break;}
 
    if ((first_null==-1) || (last_null==-1)) std::cout << "В массиве двух нулевых элементов нет.";
    else
    {
        int sum=0; // тут будет хранится сумма элементов.
        for (int i=first_null+1; i<last_null; i++)
        sum+=MAS[i];
    std::cout << std::endl << "Сумма элементов между первым и последним нулевым элементом: " << sum;
    }
 
    std::cout << "\nПроизведение элементов с четными номерами: " << proizv;
    std::cout << std::endl << "Отфильтрованный массив:\n";
    for (int i=0; i<N; i++) 
        if (MAS[i]>=0) std::cout << std::setw(3) << MAS[i];
    for (int j=0; j<N; j++)
        if (MAS[j]<0) std::cout << std::setw(3) << MAS[j]; 
    std::cout << std::endl;
    delete []MAS;
    system ("pause");
    return 0;
}
hn_usf4685
Сообщений: n/a
23.04.2010, 01:30 #3
Огромное спасибо=))

Добавлено через 4 минуты
а еще если кто нибудь заглянет: напишите прогу на простом си а не на с++.....
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,277
23.04.2010, 01:48 #4
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
55
56
57
58
59
60
#include <conio.h>
#include <cstdio>
#include <malloc.h>
#include <cstdlib>
#include <iomanip>
#include <ctime>
 
int main()
{
    setlocale(LC_ALL, "Russian");
        int N;
    printf("Введите кол-во элементов массива: ");
    scanf("%d", &N);
        int *MAS = (int*)malloc(N*sizeof(int));
        
    srand(time(NULL));
        printf("Первоначальный массив:\n");
    for (int i=0; i<N; i++) // заполняем массив случайными числами.
        {
                MAS[i]=rand() % 11 - 5;
        printf("%d ", MAS[i]);
        }
    printf("\n");
 
        int proizv=1; // тут будет хранится произведение.
        for (int i=1; i<=N/2; i++) // находим произведение элементов, с четным индексом.
                if (MAS[i*2-1]!=0)
                        proizv*=MAS[i*2-1];
 
        int first_null=-1; // тут будет хранится индекс первого нулевого элемента.
        int last_null=-1; // тут будет хранится индекс последнего нулевого элемента.
        for (int i=0; i<N; i++)
                if (MAS[i]==0){
                        first_null=i; // находим первый.
                        break; }
        for (int j=N-1; j>=0; j--) 
                if (MAS[j]==0){
                        last_null=j; // и последний элемент.
                        break;}
 
        if ((first_null==-1) || (last_null==-1)) printf("В массиве двух нулевых элементов нет.");
        else
        {
                int sum=0; // тут будет хранится сумма элементов.
                for (int i=first_null+1; i<last_null; i++)
                sum+=MAS[i];
        printf("\nСумма элементов между первым и последним нулевым элементом: %d", sum);
        }
 
        printf("\nПроизведение элементов с четными номерами: %d", proizv);
        printf("\nОтфильтрованный массив:\n");
        for (int i=0; i<N; i++) 
                if (MAS[i]>=0) printf("%d ", MAS[i]);
        for (int j=0; j<N; j++)
                if (MAS[j]<0) printf("%d ", MAS[j]);
        printf("\n");
        free(MAS);
        system ("pause");
        return 0;
}
Прокоп
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 44
14.04.2013, 22:15 #5
Vorona,Здрастуйте)
У меня такой вопрос
а как можно сделать что бы в массиве были не случайные числа,а можна было вводить их с клавиатуры для этой же програми?
помогите пожалуйста)

Добавлено через 42 минуты
Цитата Сообщение от Vorona Посмотреть сообщение
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
55
56
57
58
59
60
#include <conio.h>
#include <cstdio>
#include <malloc.h>
#include <cstdlib>
#include <iomanip>
#include <ctime>
 
int main()
{
    setlocale(LC_ALL, "Russian");
        int N;
    printf("Введите кол-во элементов массива: ");
    scanf("%d", &N);
        int *MAS = (int*)malloc(N*sizeof(int));
        
    srand(time(NULL));
        printf("Первоначальный массив:\n");
    for (int i=0; i<N; i++) // заполняем массив случайными числами.
        {
                MAS[i]=rand() % 11 - 5;
        printf("%d ", MAS[i]);
        }
    printf("\n");
 
        int proizv=1; // тут будет хранится произведение.
        for (int i=1; i<=N/2; i++) // находим произведение элементов, с четным индексом.
                if (MAS[i*2-1]!=0)
                        proizv*=MAS[i*2-1];
 
        int first_null=-1; // тут будет хранится индекс первого нулевого элемента.
        int last_null=-1; // тут будет хранится индекс последнего нулевого элемента.
        for (int i=0; i<N; i++)
                if (MAS[i]==0){
                        first_null=i; // находим первый.
                        break; }
        for (int j=N-1; j>=0; j--) 
                if (MAS[j]==0){
                        last_null=j; // и последний элемент.
                        break;}
 
        if ((first_null==-1) || (last_null==-1)) printf("В массиве двух нулевых элементов нет.");
        else
        {
                int sum=0; // тут будет хранится сумма элементов.
                for (int i=first_null+1; i<last_null; i++)
                sum+=MAS[i];
        printf("\nСумма элементов между первым и последним нулевым элементом: %d", sum);
        }
 
        printf("\nПроизведение элементов с четными номерами: %d", proizv);
        printf("\nОтфильтрованный массив:\n");
        for (int i=0; i<N; i++) 
                if (MAS[i]>=0) printf("%d ", MAS[i]);
        for (int j=0; j<N; j++)
                if (MAS[j]<0) printf("%d ", MAS[j]);
        printf("\n");
        free(MAS);
        system ("pause");
        return 0;
}
olichka86
2 / 2 / 1
Регистрация: 29.10.2013
Сообщений: 80
01.07.2015, 13:12 #6
А мне вот интересно, какую сортировку тут можно применить, чтобы безо всяких вспомогательных массивов отсортировать элементы по принципу положительные - отрицательные, при этом сохранив их порядок в исходном массиве.

Чтобы было: 6 7 0 -2 4 -6 7 2 -9
А стало: 6 7 0 4 7 2 -2 -6 -9

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

Никак не могу сообразить, кого с кем тут swap'ать нужно.

Добавлено через 6 минут
Оу, кажется ответ есть тут:
Преобразовать массив так, чтобы сначала располагались все положительные элементы, а потом отрицательные

Спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 13:12
Привет! Вот еще темы с ответами:

Преобразовать массив таким образом, чтобы сначала располагались все по- ложительные элементы, а потом все остальные - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;cmath&gt; using namespace std; void float1(double...

Преобразовать массив, расположив сначала все положительные элементы, а потом - все отрицательные - C++
Преобразовать массив таким образом, чтобы сначала располагаись все положительные элементы, а потом-все отрицательные (элементы, равные 0,...

Преобразовать массив таким образом, чтобы сначала располагались все по- ложительные элементы, а потом все остальные.как доработать? - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;cmath&gt; using namespace std; void float1(double...

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


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

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

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