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

Отсортировать элементы массива: отрицательные – в начало массива, положительные – в конец - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сложение векторов в структуре http://www.cyberforum.ru/cpp-beginners/thread244766.html
Надо сложить 2 вектора использую функции структуры. Пока дошел до этого варианта: #include "stdafx.h" #include <iostream> #include <math.h> #include <string> using namespace std; float x,y,z,xi,yi,zi,zj,xj,yj; struct vector { vector (float px=0, float py=0,float pz=0) {
C++ MVS 2010 Пишу на Microsoft visual studio 2010 на с++. Проблема такая: После сборки программы и сохранения компонентов беру ексешник в папочке "debug". Запускаю - все работает, но стоит мне этот екзешник запустить на другом компьютере - возникает ошибкак. В чем дело ? http://www.cyberforum.ru/cpp-beginners/thread244762.html
оператор enum найти все черные пятницы месяца C++
Используя перечисляемый тип, определить тип «дни недели» и выдать все «черные» пятницы этого года (т.е. число месяца равно13, а день недели – пятница). c enum не получается, только если так допустим #include <iostream> #include <string> using namespace std; int main()
Вычисление значения функции C++
вот вид на листе бумаги,задание 1
C++ Сделать описание программы на классы http://www.cyberforum.ru/cpp-beginners/thread244725.html
Нужно составить описание этой программы #ifndef complexH #define complexH #include <math.h> //--------------------------------------------------------------------------- //Mantis and the exponential (2) class complex_2{ protected: int mant,exp;
C++ просматривая поочередно элементы диагоналей двумерного массива Здравствуйте уважаемые посетители портала CyberForum.ru, хотелось бы обратится к вам с просьбой, написать небольшую программу на С++ Задание: Просматривая поочередно элементы диагоналей двумерного массива, выбрать все положительные числа в одномерный массив и произвести его сортировку методом прямого включения в порядке убывания Заранее буду благодарен, всем кто отзовется..Спасибо подробнее

Показать сообщение отдельно
innuska
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 17
26.02.2011, 00:01  [ТС]     Отсортировать элементы массива: отрицательные – в начало массива, положительные – в конец
Вот мой код, конечно более громоздкий. Не все функции работают правильно. Исправьте ошибки.
Ф-ция CreateArray создает нужный мне массив, но в конце дописывает нули, их не должно быть.
Ф-ция SortingArray должна сортировать исходный массиив без тех элементов, что были удалены, а сортирует исходный полностью.
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/* В массиве целых чисел среди чисел, стоящих на нечетных позициях, найти нечетные 
отрицательные элементы и записать их в новый массив, удалив из исходного массива.
Оставшийся массив отсортировать по убыванию разности количества единиц и нулей в 
двоичном представлении числа. */ 
 
#include<iostream>
#include<cstdlib>
#include<cmath>
 
using namespace std;
 
void EnterArray(int*, int);             // Ф-ция ввода массива (работает)
void DisplayArray(int*, int);           // Ф-ция вывода массива на экран (работает)
void CreateArray(int*, int*, int);      // Ф-ция создания массива, в который копируются нечетные отрицательные элементы, стоящие на нечетных позициях
void DeleteElements(int*, int);         // Ф-ция удаляет из исходного массива элементы, скопированные в новый массив (работает)
void SortingArray(int*, int);           // Ф-ция сортирует исходный измененный массив по убыванию разности кол-ва 1 и 0
int Diff_Between_Untils_And_Zeros(int); // Ф-ция вычитает кол-во нулей из кол-ва единиц (работает)
int NumberOfUntiles(int);               // Ф-ция считает кол-во единиц в двоичной записи числа (работает)
int NumberOfZeros(int);                 // Ф-ция считает кол-во нулей в двоичной записи числа (работает)
void Swap(int &, int &);                // Ф-ция меняет местами два элемента (работает) 
 
int main()
{
    setlocale(LC_ALL, "rus");
    const int N = 100;
    int A[N] = {0}, n, B[N] = {0};
    while(true)
    {
        cout << " Введите количество элементов массива <= " << N << ": ";
        cin >> n;
        if ( n > 0 && n <= N)
            break;
        system("cls");
    }
    cout << "Введите элементы массива: " << endl;
    EnterArray(A, n);
    system ("cls");
    cout << "Исходный массив: ";
    DisplayArray(A, n);
    cout << endl;
    CreateArray(A, B, n);
    cout << "Массив, состоящий из нечетных отрицательных элементов: ";
    DisplayArray(B, n);
    cout << endl;
    DeleteElements(A, n);
    cout << endl;
    SortingArray(A, n);
    cout << "Отсортированный измененный исходный массив: ";
    DisplayArray(A, n);
    cout << endl;
    system ("pause");
    return 0;
}
 
void EnterArray(int* p, int n)
{
    for (int* q = p, i = 0; q < p + n; q++, i++)
    {
        cout << "A[" << i << "] = ";
        cin >> *q;
    }
}
 
void DisplayArray(int* p, int n)
{
    for (int* q = p, i = 1; q < p + n; q++, i++)
        cout << *q << " ";
}
 
void CreateArray(int* pa, int* pb, int n)
{
    for(int i = 0, j = 0; i < n; i++)
    {
        if (i % 2 == 1 && pa[i] < 0 && (abs(pa[i])) % 2 == 1)
        {
            pb[j] = pa[i];
            j++;
        }
    }
}
 
void DeleteElements(int* pa, int n)
{
    int del = 0, m;
    cout << "Измененный исходный массив: ";
    for(int i = 0, j = 0; i < n; i++)
    {
        if (i % 2 == 1 && pa[i] < 0 && (abs(pa[i])) % 2 == 1)
            continue;
        else
            cout << pa[i] << ' ';
    }
}
 
void SortingArray(int* pa, int n)
{
    for (int i = 0; i < n; i++)
        for(int j = n - 1; j > i;  j--)
            if(Diff_Between_Untils_And_Zeros(pa[j]) > Diff_Between_Untils_And_Zeros(pa[j - 1]))
                Swap(pa[j], pa[j - 1]);
}
 
int Diff_Between_Untils_And_Zeros(int n)
{
    int diff;
    diff = NumberOfUntiles(n) - NumberOfZeros(n);   
    return diff;
}
 
int NumberOfUntiles(int n)
{
    int k = 0;
    while (n)
    {
        if (n % 2)
            k++;
        n /= 2;
    }
    return k;
}
 
int NumberOfZeros(int n)
{
    int k = 0;
    while (n)
    {
        if (!(n % 2))
            k++;
        n /= 2;
    }
    return k;
}
 
void Swap(int & a, int & b)
{
    int t = a;
    a = b;
    b = t;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru