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

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

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

Преобразовать массив так, чтобы сначала располагались все положительные элементы, а потом отрицательные C++
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом все отрицательные C++
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом - все остальные C++
C++ Преобразовать массив таким образом, чтобы сначала располагались все по- ложительные элементы, а потом все остальные
C++ Преобразовать массив таким образом, чтобы сначала располагались все по- ложительные элементы, а потом все остальные.как доработать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
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
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
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 минут
Оу, кажется ответ есть тут:
Преобразовать массив так, чтобы сначала располагались все положительные элементы, а потом отрицательные

Спасибо!
Yandex
Объявления
01.07.2015, 13:12     Преобразовать массив, чтобы сначала располагались все положительные элементы, а потом — все отрицательные
Ответ Создать тему
Опции темы

Текущее время: 23:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru