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

Массив. Удалить из исходного массива уникальные (не повторяющиеся) элементы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В одномерном массиве посчитать сумму элементов http://www.cyberforum.ru/cpp-beginners/thread1218944.html
В одномерном массиве посчитать сумму элементов , значения которых, соответствуют диапазону, введенного с клавиатуры. Помогите пожалуста
C++ Зашифровать текст и дешифровать, заменив каждую букву порядковым номером в алфавите Пацаны помогите решить эту программу пожалуйста. Зашифровать текст и дешифровать, заменив каждую букву порядковым номером в алфавите http://www.cyberforum.ru/cpp-beginners/thread1218942.html
C++ В одномерном массиве посчитать сумму эллементов после минимального
Помогите срочно решить задачу на экзамене сижу!!! В одномерном массиве посчитать сумму эллементов после минимального
C++ Утечка памяти
Здравствуйте. Есть программа (разбитая на функции) постоянно работающая в цикле и выводящая информацию на консоль. И получается что она жрёт память. за сутки в диспетчере занимаемый объём памяти становится около 30MB. есть 3 варианта утечки: - Не очищаю консоль/буфер консоли. - Динамическая память. Но вроде освобождаю правильно. - streambuf/stringstream в подпрограммах. Стараюсь использовать...
C++ Текст в файле, проверить длину строки http://www.cyberforum.ru/cpp-beginners/thread1218926.html
Помогите пожалуйста решить. Текст в файле: имя пользователя. Проверить ,чтобы длина строки ббыла не меньше двух символов.
C++ Вывести номера столбцов матрицы, содержащих только отрицательные элементы (Pascal -> C++) Дана вещественная матрица размерности (n x m). Вывести номера столбцов, содержащих только отрицательные элементы. написано в раскале, а с переводом в с++ возникла трудность Uses crt; const Nmax = 10; //максим. размер матрицы type Matrix = array of real; //объявление типа var Mas: Matrix; //объявление массива i, j, n, m, index, count: integer;//объявление целых переменных begin подробнее

Показать сообщение отдельно
IrineK
Заблокирован
29.06.2014, 05:27     Массив. Удалить из исходного массива уникальные (не повторяющиеся) элементы
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
//Удалить из исходного массива уникальные (не повторяющиеся) элементы
#include <iostream>
#include <iomanip>
 
//----------------------------------ручной ввод num в пределах lower < num < upper
template <typename T>
void SafeInput (T &num, T lower, T upper)
{
    while (!(std::cin >> num) || !(std::cin.peek() == '\n' || std::cin.peek() == '\t' || std::cin.peek() == ' ') 
                    && num > lower && num < upper)
    {
        std::cin.clear();
        while (std::cin.get() != '\n');
        std::cout << "Ошибка. Попробуйте снова\n";
    }
}
 
//----------------------------------ручной ввод num
template <typename T>
void SafeInput (T &num)
{
    while (!(std::cin >> num) || !(std::cin.peek() == '\n' || std::cin.peek() == '\t' || std::cin.peek() == ' '))
    {
        std::cin.clear();
        while (std::cin.get() != '\n');
        std::cout << "Ошибка. Попробуйте снова\n";
    }
}
 
//----------------------------------создаем массив с ручным вводом
double *CreateArray (int N)
{
    double *arr = new double [N];
    for (int i = 0; i<N; i++)
        SafeInput<double>(arr[i]);
 
    return arr;
}
 
//---------------------------------обертка для очистки памяти
void DeleteArray( double *arr)
{
    delete [] arr;
}
 
//----------------------------------смотрим на массив
void PrintArray (double *arr, int N)
{
    for (int i = 0; i<N; i++)
        std::cout << std::fixed << std::setw(7) << std::setprecision (3) << *(arr+i) << "\n";
}
 
//---------------------------------является ли уникальным элемент на позиции pos
bool IsUnique (double *arr, int N, int pos)
{
    if (pos < 0 || pos > N-1)
        return false;
 
    for (int i = 0; i<N; i++)
        if ( i != pos && *(arr+i) == *(arr+pos))
            return false;
 
    return true;
}
 
//---------------------------------удаляем элемент на позиции pos
bool Erase (double *arr, int &N, int pos)
{
    if (pos < 0 || pos > N-1)
        return false;
    
    if (N == 1)
    {
        DeleteArray (arr);
        arr = NULL;
        N = 0;
        return true;
    }
 
    double *temp = new double [N-1];
    int i = 0;
    for ( ; i<pos; i++)
        *(temp+i) = *(arr+i);
    for ( ; i<N-1; i++)
        *(temp+i) = *(arr+i+1);
 
    DeleteArray (arr);
    arr = NULL;
    arr = new double [N-1];
    for (i = 0 ; i<N-1; i++)
        *(arr+i) = *(temp+i);
    N--;
    DeleteArray (temp);
 
    return true;
}
 
//--------------------------------собственно, задача
void Task (double *arr, int &N)
{
    for (int i = 0; i<N; i++)
        if (IsUnique(arr, N, i))
        {   
            Erase (arr, N, i);
            i--;
        }
}
 
//----------------------------------------------------------------------------
int main()
{   
    setlocale (LC_CTYPE, "Russian");
 
    int N;
    std::cout << "Размерность массива N = ";
    SafeInput<int> (N, 0, 21); // 0 < N < 21
 
    std::cout << "Введите массив:\n";
    double *arr = CreateArray (N);
    std::cout << "Массив:\n";
    PrintArray (arr, N);
 
    Task(arr,N);
    std::cout << "\nПосле удаления уникальных элементов:\n";
    PrintArray (arr, N);
 
    if (N)
        DeleteArray(arr);
    
    std::cin.sync();    
    std::cin.get();
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru