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

Одномерный Массив - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Указатели в качестве массивов, переменных и указетелей. http://www.cyberforum.ru/cpp-beginners/thread354257.html
Здравствуйте. Указатели опять начали заводить меня в тупик. Сначали расскажу о том что я понял после прочтение некоторой литературы: 1) Указатели содержут адрес переменной. Переменная изменяется при помощи *. Адрес переменой &. В общем пока всё довольно-таки просто и понятно. 2) Имя массива - адрес первого элемента массива, то есть константный указатель со знаком * перед именем. ОК. Так, теперь...
C++ Visual Studio. Запрет компиляции при наличии варнингов Для пущей безопасности хотелось бы, чтобы компилер отказывался компилить код, если есть варнинги. Есть такое где-нибудь в опциях? Добавлено через 7 минут Нашел. Project -> Properties -> C/C++ -> Treat Warnings As Errors -> Yes. http://www.cyberforum.ru/cpp-beginners/thread354251.html
C++ 1>8-1.obj : error LNK2019: ссылка на неразрешенный внешний символ "double __cdecl max5<double>(double * const,int)" (??$max5@N@@YANQANH@Z) в функции _main
Попробовал разделить один файл на два. В заголовочный "proba.h" поместил шаблон и специализацию. В одном файле исходного кода оставил функцию main(), а во второй поместил определения шаблона и специализации. Заголовочный файл "proba.h": template <class T> T max5(T m, int x); template <> const char* max5(const char* m, int x); Первый файл: #include <iostream> using namespace std;
NetBeans IDE и компилятор MinWG(gcc) C++
Здравствуйте, я только начал писать на C++ в NetBeans IDE и использую компилятор MinGW. И как мне добавить каталог C:\MinGW\bin в PATH.
C++ Выделение памяти в объектах http://www.cyberforum.ru/cpp-beginners/thread354235.html
Здравствуйте! Когда начал использовать динамическое выделение памяти в объектах, возникла проблема. Но сначала о тестовой программе, которую я написал. Точнее о классе. Я создал класс Vector. Вот Vector.h:#pragma once class Vector { private: bool isVector; i4 cellLength; i4 cellsCount; i4 cellsLength; void *cells;
C++ Операции с комплексными числами и перегрузка операторов << и >> Здрасте! Пытаюсь решить задачу по написанию программы, которая производит действия с комплексными числами (если потребуется, объясню, что это за числа). В условии задачи просят произвести перегрузку операторов +, -, *, << и >>. Я в этом деле новичок, поэтому столкнулся с массой проблем. Вот мой программный код: Заголовочный файл с классом // файл attach.h class complex { private: double... подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
21.09.2011, 14:11     Одномерный Массив
Цитата Сообщение от Алён4uk Посмотреть сообщение
а) ввод массива;
б) вывод массива;
в) вставка в массив новых элементов:
-Вставить в массив элемент с заданным значением после каждого элемента с максимальным значением;
г) удаление элементов массива:
-Удалить в массиве последнюю группу из двух подряд идущих отрицательных чисел. Если удаление элементов невозможно, выдать об этом сообщение с указанием причины;
д) проверка состояния массива:
-Проверить, есть ли в массиве два подряд идущих одинаковых элемента.
- удаление двух последних одинаковых отрицательных элементов ещё хромает, но всё остальное работает, я убрал malloc и realloc и теперь всё на чистых плюсах!
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
#include <iostream.h>//i/o
#include <stdlib.h>  //malloc realloc
 
//Руссификация - перегружаю оператор вывода на экран
ostream& operator<<(ostream &stream,char* s){
        for(char* ps=s; *ps; ps++){
                if(*ps=='ё')
                        stream<<char(241);
                else if(*ps=='Ё')
                        stream<<char(240);
                else if(*ps>=-64 && *ps<=-17)                   
                        stream<<char(*ps+64+128);
                else if(*ps<0)
                        stream<<char(*ps+64+176);
                else
                        stream<<*ps;
        }
        return stream;
}
 
void Input (int n, int * vec);//Ввод вектора
void Output(int n, int * vec);//Вывод вектора
void Insert(int n, int * vec, int ins);//Вставка элемента в позицию ins
void Delete(int n, int * vec, int del);//Удаление элемента в позици del
void Resize(int &n,int   add, int * vec);//Изменение размеров вектора
void Reverse(int n, int * vec);//Реверс вектора
int GetMax(int n, int * vec);//Поиск макс элемента
//Проверка наличия двух одинаковых смежных елементов c позиции beg
int GetSame(int n, int * vec, int beg);
 
int main()
{
    bool bSame = false;
    bool bMenu = true;
    int iKey,i,j,m,n;
    int *vec, iMax;
    do
    {
        cout<<"\t***МЕНЮ***\r\n";
        cout<<"1 - Ввод массива\r\n";
        cout<<"2 - Вывод массива\r\n";
        cout<<"3 - Вставить элементы(вручную)\r\n";
        cout<<"4 - Вставить элементы(програмно)\r\n";
        cout<<"5 - Удалить элементы(вручную)\r\n";
        cout<<"6 - Удалить элементы(програмно)\r\n";
        cout<<"7 - Проверка наличия двух одинаковы смежных элементов\r\n";
        cout<<"Для выхода введите любой другой символ\r\n";
        cin>>iKey;
        switch(iKey)
        {
            case 1:
                cout<<"Введите число элементов\r\n";
                cin>>n;
                //Изменяем памяти под n элементов
                vec = new int[n];
                Input(n, vec);
                break;
            case 2:
                cout<<"\tМассив чисел\r\n";
                Output(n, vec);
                break;
            case 3:
                cout<<"Введите число элементов для вставки\r\n";
                cin>>m;
                        
                for(i = 0; i < m; i++)
                {
                    //Каждый раз увеличиваем память на 1 элемент
                    Resize(n, 1, vec);
                    cout<<"Введите индекс вствки "<< i + 1 <<" элемента\r\n";
                    cin>>j;
                    Insert(n, vec, j);
                }
                break;
            case 4:
                cout<<"\tМаксимальный элемент массива : ";
                cout<<(iMax = GetMax(n, vec))<<"\r\n";
                for(i = 0; i < n; i++)
                {
                    if(vec[i] == iMax)
                        Insert(n, vec, i = (i + 1));
                    //(i = i + 1) - Вставляем элемент после максимального +
                    //сдвигаем на 1-цу счётчик чтобы не обрабатывать вставляемый элемент
                    //это важно так как если вставляем iMax будет происходить зацикливание!
                }
                break;
            case 5:
                cout<<"Введите число элементов для удаления\r\n";
                cin>>m;    
                for(i = 0; i < m; i++)
                {
                    //Изменяем память под n + i элементов
                    cout<<"Введите индекс "<< i + 1 <<" - го удаляемого элемента\r\n";
                    cin>>j;
                    Delete(n, vec, j);
                    //Каждый раз уменьшаем память на 1 элемент
                    Resize(n, -1, vec);
                    
                }
                break;
            case 6 :
                bSame = false;
                for(i = n - 2;0 <= i && !bSame; i--)
                {
                    if(vec[i] < 0)
                    if(-1 < (j = GetSame(n, vec, i)))
                    if(i == j)
                        bSame = true;
                }
                if(!bSame)
                    cout<<"Массив не содержит двух одинаковых смежных отрицательных элементов\r\n";
                else
                {
                    cout<<"Найдены два одинаковых смежных отрицательных элемента\r\n";
                    cout<<"индекс первого из них "<<i<<"\r\n";
                    for(j = i; j <= i + 1; j++)
                    {
                        Delete(n, vec, j);
                        //Каждый раз уменьшаем память на 1 элемент
                        Resize(n, -1, vec);
                    }
                }
                break;
            case 7 :
                if(-1 < (i = GetSame(n, vec, 0)))
                {
                    cout<<"Найдены два одинаковых смежных элемента\r\n";
                    cout<<"индекс первого из них "<<i<<"\r\n";
                }
                else
                    cout<<"Два одинаковых смежных элемента не найдены\r\n";
                break;
            default:
                bMenu = false;
                    break;
        }
    }
    while(bMenu);
    return 0;
}
 
void Input(int n, int * vec)
{
    for(int i = 0; i < n; i++)
    {
        cout<<"vec["<<i + 1<<"] = ";
        cin>>vec[i];
    }
}
 
void Output(int n, int * vec)
{
    for(int i = 0; i < n; i++)
        cout<<vec[i]<<" ";
    cout<<"\r\n";
}
 
void Insert(int n, int * vec, int ins)
{
    for(int i = n - 1; ins < i; i--)
        vec[i] = vec[i - 1];
    cout<<"Введите вставляемый элемент\r\n";
    cin>>vec[ins];          
}
 
void Delete(int n, int * vec, int del)
{
    for(int i = del; i < n; i++)
        vec[i] = vec[i + 1];
}
 
void Resize(int &n, int add, int * vec)
{
    int val = vec[n - 1];
    //Расширяем память под vec 
    //путём пристыковки новой области размером add
    if(0 < add)//если add положительное
    {
        vec[n - 1] = (new int[1 + add])[0];
        vec[n - 1] = val;
    }
//  if(add < 0)//Чистим память от лишних элементов
//      delete [] (void *)&vec[n - 1 + add];
    n += add;
}
 
void Reverse(int n, int * vec)
{
    for(int buf, i = 0; i < n/2; i++)
    {
        buf = vec[i];
        vec[i] = vec[n - 1 - i];
        vec[n - 1 - i] = buf;
    }
}
 
int GetMax(int n, int * vec)
{
    int ret = vec[0];
    for(int i = 1; i < n; i++)
        if(ret < vec[i])
            ret = vec[i];
    return ret;
}
 
int GetSame(int n, int * vec, int beg)
{
    bool IsSame = false;
    int i,j;
    for(i = beg;   i < n && !IsSame; i++)
    for(j = i + 1; j < n && !IsSame; j++)
    {
        if(vec[i] == vec[j])
            IsSame = true;
    }
    if(!IsSame)
        i = -1;
    return i;
}
Добавлено через 16 секунд
Цитата Сообщение от Алён4uk Посмотреть сообщение
а) ввод массива;
б) вывод массива;
в) вставка в массив новых элементов:
-Вставить в массив элемент с заданным значением после каждого элемента с максимальным значением;
г) удаление элементов массива:
-Удалить в массиве последнюю группу из двух подряд идущих отрицательных чисел. Если удаление элементов невозможно, выдать об этом сообщение с указанием причины;
д) проверка состояния массива:
-Проверить, есть ли в массиве два подряд идущих одинаковых элемента.
- удаление двух последних одинаковых отрицательных элементов ещё хромает, но всё остальное работает, я убрал malloc и realloc и теперь всё на чистых плюсах!
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
#include <iostream.h>//i/o
#include <stdlib.h>  //malloc realloc
 
//Руссификация - перегружаю оператор вывода на экран
ostream& operator<<(ostream &stream,char* s){
        for(char* ps=s; *ps; ps++){
                if(*ps=='ё')
                        stream<<char(241);
                else if(*ps=='Ё')
                        stream<<char(240);
                else if(*ps>=-64 && *ps<=-17)                   
                        stream<<char(*ps+64+128);
                else if(*ps<0)
                        stream<<char(*ps+64+176);
                else
                        stream<<*ps;
        }
        return stream;
}
 
void Input (int n, int * vec);//Ввод вектора
void Output(int n, int * vec);//Вывод вектора
void Insert(int n, int * vec, int ins);//Вставка элемента в позицию ins
void Delete(int n, int * vec, int del);//Удаление элемента в позици del
void Resize(int &n,int   add, int * vec);//Изменение размеров вектора
void Reverse(int n, int * vec);//Реверс вектора
int GetMax(int n, int * vec);//Поиск макс элемента
//Проверка наличия двух одинаковых смежных елементов c позиции beg
int GetSame(int n, int * vec, int beg);
 
int main()
{
    bool bSame = false;
    bool bMenu = true;
    int iKey,i,j,m,n;
    int *vec, iMax;
    do
    {
        cout<<"\t***МЕНЮ***\r\n";
        cout<<"1 - Ввод массива\r\n";
        cout<<"2 - Вывод массива\r\n";
        cout<<"3 - Вставить элементы(вручную)\r\n";
        cout<<"4 - Вставить элементы(програмно)\r\n";
        cout<<"5 - Удалить элементы(вручную)\r\n";
        cout<<"6 - Удалить элементы(програмно)\r\n";
        cout<<"7 - Проверка наличия двух одинаковы смежных элементов\r\n";
        cout<<"Для выхода введите любой другой символ\r\n";
        cin>>iKey;
        switch(iKey)
        {
            case 1:
                cout<<"Введите число элементов\r\n";
                cin>>n;
                //Изменяем памяти под n элементов
                vec = new int[n];
                Input(n, vec);
                break;
            case 2:
                cout<<"\tМассив чисел\r\n";
                Output(n, vec);
                break;
            case 3:
                cout<<"Введите число элементов для вставки\r\n";
                cin>>m;
                        
                for(i = 0; i < m; i++)
                {
                    //Каждый раз увеличиваем память на 1 элемент
                    Resize(n, 1, vec);
                    cout<<"Введите индекс вствки "<< i + 1 <<" элемента\r\n";
                    cin>>j;
                    Insert(n, vec, j);
                }
                break;
            case 4:
                cout<<"\tМаксимальный элемент массива : ";
                cout<<(iMax = GetMax(n, vec))<<"\r\n";
                for(i = 0; i < n; i++)
                {
                    if(vec[i] == iMax)
                        Insert(n, vec, i = (i + 1));
                    //(i = i + 1) - Вставляем элемент после максимального +
                    //сдвигаем на 1-цу счётчик чтобы не обрабатывать вставляемый элемент
                    //это важно так как если вставляем iMax будет происходить зацикливание!
                }
                break;
            case 5:
                cout<<"Введите число элементов для удаления\r\n";
                cin>>m;    
                for(i = 0; i < m; i++)
                {
                    //Изменяем память под n + i элементов
                    cout<<"Введите индекс "<< i + 1 <<" - го удаляемого элемента\r\n";
                    cin>>j;
                    Delete(n, vec, j);
                    //Каждый раз уменьшаем память на 1 элемент
                    Resize(n, -1, vec);
                    
                }
                break;
            case 6 :
                bSame = false;
                for(i = n - 2;0 <= i && !bSame; i--)
                {
                    if(vec[i] < 0)
                    if(-1 < (j = GetSame(n, vec, i)))
                    if(i == j)
                        bSame = true;
                }
                if(!bSame)
                    cout<<"Массив не содержит двух одинаковых смежных отрицательных элементов\r\n";
                else
                {
                    cout<<"Найдены два одинаковых смежных отрицательных элемента\r\n";
                    cout<<"индекс первого из них "<<i<<"\r\n";
                    for(j = i; j <= i + 1; j++)
                    {
                        Delete(n, vec, j);
                        //Каждый раз уменьшаем память на 1 элемент
                        Resize(n, -1, vec);
                    }
                }
                break;
            case 7 :
                if(-1 < (i = GetSame(n, vec, 0)))
                {
                    cout<<"Найдены два одинаковых смежных элемента\r\n";
                    cout<<"индекс первого из них "<<i<<"\r\n";
                }
                else
                    cout<<"Два одинаковых смежных элемента не найдены\r\n";
                break;
            default:
                bMenu = false;
                    break;
        }
    }
    while(bMenu);
    return 0;
}
 
void Input(int n, int * vec)
{
    for(int i = 0; i < n; i++)
    {
        cout<<"vec["<<i + 1<<"] = ";
        cin>>vec[i];
    }
}
 
void Output(int n, int * vec)
{
    for(int i = 0; i < n; i++)
        cout<<vec[i]<<" ";
    cout<<"\r\n";
}
 
void Insert(int n, int * vec, int ins)
{
    for(int i = n - 1; ins < i; i--)
        vec[i] = vec[i - 1];
    cout<<"Введите вставляемый элемент\r\n";
    cin>>vec[ins];          
}
 
void Delete(int n, int * vec, int del)
{
    for(int i = del; i < n; i++)
        vec[i] = vec[i + 1];
}
 
void Resize(int &n, int add, int * vec)
{
    int val = vec[n - 1];
    //Расширяем память под vec 
    //путём пристыковки новой области размером add
    if(0 < add)//если add положительное
    {
        vec[n - 1] = (new int[1 + add])[0];
        vec[n - 1] = val;
    }
//  if(add < 0)//Чистим память от лишних элементов
//      delete [] (void *)&vec[n - 1 + add];
    n += add;
}
 
void Reverse(int n, int * vec)
{
    for(int buf, i = 0; i < n/2; i++)
    {
        buf = vec[i];
        vec[i] = vec[n - 1 - i];
        vec[n - 1 - i] = buf;
    }
}
 
int GetMax(int n, int * vec)
{
    int ret = vec[0];
    for(int i = 1; i < n; i++)
        if(ret < vec[i])
            ret = vec[i];
    return ret;
}
 
int GetSame(int n, int * vec, int beg)
{
    bool IsSame = false;
    int i,j;
    for(i = beg;   i < n && !IsSame; i++)
    for(j = i + 1; j < n && !IsSame; j++)
    {
        if(vec[i] == vec[j])
            IsSame = true;
    }
    if(!IsSame)
        i = -1;
    return i;
}
 
Текущее время: 01:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru