0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 8
1

Массив целых чисел

11.01.2015, 16:45. Показов 989. Ответов 6
Метки нет (Все метки)

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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#include <ctime>
#include <cstdlib>
#include <iostream>
 
template <typename ArrayType>
class Array {
public:
    Array(); // конструктор по умолчанию 
    Array(const int size); // конструктор с параметром
    Array(const Array &); // конструктор копирования 
    virtual ~Array(); // виртуальный деструктор
     
    void insert(const int index, const ArrayType value); // вставить элемент по индексу 
    void append(const Array<ArrayType> &); // добавить другой массив
    void resize(const int size); // размер массива 
    void remove(const int index); // удалить элемент по индексу 
    void clear(); // очистить элемент массива 
    int getSize() const; // получить текущий размер массива 
     
    ArrayType &operator[] (const int index); // получить элемент по индексу для изменения значения 
    const ArrayType &operator[] (const int index) const; // получить только для чтения элемент по индексу 
 
    const Array<ArrayType> &operator = (const Array<ArrayType> &); // установить другой массив
     
protected:
    ArrayType *array; // элементами массива
    int totalSize; // объем выделенной памяти 
    int currentSize; // текущий размер массива 
     
    void shiftLeft(int from, int to); // сворачивает налево для операции удаления 
    void shiftRight(int from, int to); // переход права на операции удаления
};
 
template <typename ArrayType>
Array<ArrayType>::Array() {
    totalSize = 0;
    currentSize = 0;
}
 
template <typename ArrayType>
Array<ArrayType>::Array(const int size) {
    totalSize = 0;
    currentSize = 0;
    
    resize(size);
}
 
template <typename ArrayType>
Array<ArrayType>::Array(const Array &object) {
    totalSize = 0;
    currentSize = 0;
     
    *this = object;
}
 
template <typename ArrayType>
Array<ArrayType>::~Array() {
    if (totalSize) {
        free(array);
    }
}
 
template <typename ArrayType>
void Array<ArrayType>::append(const Array<ArrayType> &object) {
    int lastIndex = getSize();
    resize(lastIndex + object.getSize());
    for (int i = 0; i < object.getSize(); i++) {
        array[lastIndex] = object[i];
        lastIndex++;
    }
}
 
template <typename ArrayType>
void Array<ArrayType>::insert(const int index, const ArrayType value) {
    if (index < totalSize) {
        currentSize++;
        shiftRight(index, currentSize);
    } else {
        resize(index + 1);
    }
    array[index] = value;
}
 
template <typename ArrayType>
void Array<ArrayType>::resize(const int size) {
    if (size == currentSize)
        return;
     
    if (totalSize < size) {
        if (totalSize == 0)
            array = (ArrayType *) calloc(size, sizeof(ArrayType));
        else
            array = (ArrayType *) realloc(array, size * sizeof(ArrayType));
         
        totalSize = size;
    }
    currentSize = size;
}
 
template <typename ArrayType>
void Array<ArrayType>::remove(const int index) {
    if (index >= 0 && index < currentSize) {
        shiftLeft(index, currentSize);
        currentSize--;
    }
}
 
template <typename ArrayType>
void Array<ArrayType>::clear() {
    for (int i = 0; i < currentSize; i++)
        array[i] = ArrayType();
}
 
 
template <typename ArrayType>
void Array<ArrayType>::shiftLeft(int from, int to) {
    for (int i = from; i < to; i++) {
        array[i] = array[i + 1];
    }
}
 
template <typename ArrayType>
void Array<ArrayType>::shiftRight(int from, int to) {
    for (int i = to; i >= from; i--) {
        array[i] = array[i - 1];
    }
}
 
template <typename ArrayType>
int Array<ArrayType>::getSize() const {
    return currentSize;
}
 
template <typename ArrayType>
ArrayType &Array<ArrayType>::operator[](const int index) {
    return array[index];
}
 
template <typename ArrayType>
const ArrayType &Array<ArrayType>::operator[](const int index) const {
    return array[index];
}
 
template <typename ArrayType>
const Array<ArrayType> &Array<ArrayType>::operator = (const Array<ArrayType> &object) {
    resize(object.getSize());
    for (int i = 0; i < currentSize; i++) {
        array[i] = object[i];
    }
    return *this;
}
 
template <typename ArrayType>
std::ostream &operator << (std::ostream &stream, const Array<ArrayType> &array) {
    for (int i = 0; i < array.getSize(); i++) {
        std::cout << array[i] << " ";
    }
    return stream;
}
 
#include <ctime>
#include <cstdlib>
int getRand() {
    return rand() % 30;
}
 
 
int main() {
    srand(time(0));
     
    Array<int> first;
    int size;
    std::cout << "Enter amount of elements for first array" << std::endl; //Ввод первого массива 
    std::cin >> size;
    first.resize(size);
    std::cout << "Enter " << size << " elements" << std::endl;
    for (int i = 0; i < size; i++) {
        std::cin >> first[i];
    }
     
    std::cout << "First array before deleting item:" << std::endl; //первый массив перед удалением элемента 
    std::cout << first << std::endl;
     
    int index, value;
    std::cout << "Enter index and value of item for inserting" << std::endl;
    std::cin >> index >> value;
    first.insert(index, value);
    std::cout << "First array after inserting item:" << std::endl; //введите индекс и значения пункта для вставки 
    std::cout << first << std::endl;
 
     
    std::cout << "Enter index of item for deleting" << std::endl; //введите индекс пункта для удаления 
    std::cin >> index;
    first.remove(index);
    std::cout << "First array after deleting item:" << std::endl; //первый массив после удаления элемента 
    std::cout << first << std::endl;
     
     
    Array<int> second;
    std::cout << "Enter amount of elements for second array" << std::endl; //введите сумму элементов для второго массива
    std::cin >> size;
    second.resize(size);
    std::cout << "Enter " << size << " elements" << std::endl;
    for (int i = 0; i < size; i++) {
        std::cin >> second[i];
    }
    std::cout << "Second array:" << std::endl; //второй массив 
    std::cout << second << std::endl;
     
     
    first.append(second);
    std::cout << "First array after appending second array:" << std::endl; //массив после добавления второго массива(конкатенация)
    std::cout << first << std::endl;
 
     
     
     
//    Array<int> arr(10);
//    
//    
//    std::cout << arr;
//    
//    Array<int> b(10);
//    for (int i = 0; i < 10; i++)
//        b[i] = getRand();
//    
//    std::cout << b;
//    
//    arr.append(b);
//    
//    arr.remove(0);
//    std::cout << arr;
    
    return 0;
}
Программа работает в сложении массивов,изменение размера массива,изменение значения элемента,удаление и добавление элемента по индексу. В protected всего 3 коды(элементами массива,объем выделенной памяти,текущий размер массива), нужно убрать 1 лишний любой код либо переместить подальше, так чтобы в protected было 2 кода. Как это сделать, чтобы программа работала с 2 кодами?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2015, 16:45
Ответы с готовыми решениями:

Задан массив K(m) попарно различных целых чисел. Получить все перестановки целых чисел
Помогите пожалуйста с программой. Задан массив K(m) попарно различных целых чисел. Получить все...

Дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько раз оно входит в массив...
помогите!!!((( дан массив целых чисел,произвести для него следующие операции: для каждого из чисел...

Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел
Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел больших исходных...

Переделать массив целых чисел на массив вещественных чисел
помогите переделать этот код: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define RANGE 20 int...

6
Модератор
Эксперт С++
12117 / 9785 / 5913
Регистрация: 18.12.2011
Сообщений: 26,257
11.01.2015, 16:48 2
Сделать, чтобы всегда было totalSize равно currentSize
0
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 8
11.01.2015, 17:19  [ТС] 3
zss, объясните пожалуйста, где в коде нужно приравнять totalSize=currentSize. Пробовал приравнять, но программа работает не так.
0
Модератор
Эксперт С++
12117 / 9785 / 5913
Регистрация: 18.12.2011
Сообщений: 26,257
11.01.2015, 19:01 4
Везде замените totalSize на currentSize
0
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 8
11.01.2015, 20:10  [ТС] 5
zss, заменил, но программа не компилируется. Скажите пожалуйста где нужно исправить ошибки?
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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
#include <iostream>
#include <ctime>
#include <cstdlib>
 
template <typename ArrayType>
class Array {
public:
    Array(); // constructor by default
    Array(const int size); // constructor with parameter
    Array(const Array &); // copy constructor
    virtual ~Array(); // virtual destructor
     
    void insert(const int index, const ArrayType value); // insert element by index
    void append(const Array<ArrayType> &); // append other array
    void resize(const int size); // resize array
    void remove(const int index); // remove item by index
    void clear(); // clear array
    int getSize() const; // get current size of array
     
    ArrayType &operator[] (const int index); // get element by index for changing value
    const ArrayType &operator[] (const int index) const; // get readonly element by index
 
    const Array<ArrayType> &operator = (const Array<ArrayType> &); // set another array
     
protected:
    ArrayType *array; // array items
    int currentSize; // amount of allocated memory
    int currentSize; // current size of array
     
    void shiftLeft(int from, int to); // shifting left for delete operation
    void shiftRight(int from, int to); // shifting right for delete operation
};
 
template <typename ArrayType>
Array<ArrayType>::Array() {
    currentSize = 0;
    currentSize = 0;
}
 
template <typename ArrayType>
Array<ArrayType>::Array(const int size) {
    currentSize = 0;
    currentSize = 0;
 
    resize(size);
}
 
template <typename ArrayType>
Array<ArrayType>::Array(const Array &object) {
    currentSize = 0;
    currentSize = 0;
     
    *this = object;
}
 
template <typename ArrayType>
Array<ArrayType>::~Array() {
    if (currentSize) {
        free(array);
    }
}
 
template <typename ArrayType>
void Array<ArrayType>::append(const Array<ArrayType> &object) {
    int lastIndex = getSize();
    resize(lastIndex + object.getSize());
    for (int i = 0; i < object.getSize(); i++) {
        array[lastIndex] = object[i];
        lastIndex++;
    }
}
 
template <typename ArrayType>
void Array<ArrayType>::insert(const int index, const ArrayType value) {
    if (index < currentSize) {
        currentSize++;
        shiftRight(index, currentSize);
    } else {
        resize(index + 1);
    }
    array[index] = value;
}
 
template <typename ArrayType>
void Array<ArrayType>::resize(const int size) 
{
    if (size == currentSize)
        return;
     
    if (currentSize < size) 
    {
        if (currentSize == 0)
            array = (ArrayType *) calloc(size, sizeof(ArrayType));
        else
            array = (ArrayType *) realloc(array, size * sizeof(ArrayType));
         
        currentSize = size;
    }
    currentSize = size;
    currentSize = currentSize;
}
 
template <typename ArrayType>
void Array<ArrayType>::remove(const int index) {
    if (index >= 0 && index < currentSize) {
        shiftLeft(index, currentSize);
        currentSize--;
    }
}
 
template <typename ArrayType>
void Array<ArrayType>::clear() {
    for (int i = 0; i < currentSize; i++)
        array[i] = ArrayType();
}
 
 
template <typename ArrayType>
void Array<ArrayType>::shiftLeft(int from, int to) {
    for (int i = from; i < to; i++) {
        array[i] = array[i + 1];
    }
}
 
template <typename ArrayType>
void Array<ArrayType>::shiftRight(int from, int to) {
    for (int i = to; i >= from; i--) {
        array[i] = array[i - 1];
    }
}
 
template <typename ArrayType>
int Array<ArrayType>::getSize() const {
    return currentSize;
}
 
template <typename ArrayType>
ArrayType &Array<ArrayType>::operator[](const int index) {
    return array[index];
}
 
template <typename ArrayType>
const ArrayType &Array<ArrayType>::operator[](const int index) const {
    return array[index];
}
 
template <typename ArrayType>
const Array<ArrayType> &Array<ArrayType>::operator = (const Array<ArrayType> &object) {
    resize(object.getSize());
    for (int i = 0; i < currentSize; i++) {
        array[i] = object[i];
    }
    return *this;
}
 
template <typename ArrayType>
std::ostream &operator << (std::ostream &stream, const Array<ArrayType> &array) {
    for (int i = 0; i < array.getSize(); i++) {
        std::cout << array[i] << " ";
    }
    return stream;
}
 
        
 
 
int getRand() {
    return rand() % 30;
}
 
 
int main()
 
 {
    srand(time(0));
     
    Array<int> first;
    int size;
    std::cout << "Enter amount of elements for first array" << std::endl;
    std::cin >> size;
    first.resize(size);
    std::cout << "Enter " << size << " elements" << std::endl;
    for (int i = 0; i < size; i++) {
        std::cin >> first[i];
    }
     
    std::cout << "First array before deleting item:" << std::endl;
    std::cout << first << std::endl;
     
    int index, value;
    std::cout << "Enter index and value of item for inserting" << std::endl;
    std::cin >> index >> value;
    first.insert(index, value);
    std::cout << "First array after inserting item:" << std::endl;
    std::cout << first << std::endl;
 
     
    std::cout << "Enter index of item for deleting" << std::endl;
    std::cin >> index;
    first.remove(index);
    std::cout << "First array after deleting item:" << std::endl;
    std::cout << first << std::endl;
     
     
    Array<int> second;
    std::cout << "Enter amount of elements for second array" << std::endl;
    std::cin >> size;
    second.resize(size);
    std::cout << "Enter " << size << " elements" << std::endl;
    for (int i = 0; i < size; i++) {
        std::cin >> second[i];
    }
    std::cout << "Second array:" << std::endl;
    std::cout << second << std::endl;
     
     
    first.append(second);
    std::cout << "First array after appending second array:" << std::endl;
    std::cout << first << std::endl;
 
     
     
     
//    Array<int> arr(10);
//    
//    
//    std::cout << arr;
//    
//    Array<int> b(10);
//    for (int i = 0; i < 10; i++)
//        b[i] = getRand();
//    
//    std::cout << b;
//    
//    arr.append(b);
//    
//    arr.remove(0);
//    std::cout << arr;
 
    return 0;
}
0
Модератор
Эксперт С++
12117 / 9785 / 5913
Регистрация: 18.12.2011
Сообщений: 26,257
11.01.2015, 20:16 6
Строки 27,28:
Цитата Сообщение от mixa Посмотреть сообщение
int currentSize; // amount of allocated memory
int currentSize; // current size of array
Это кто за Вас исправлять будет?
1
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 8
11.01.2015, 20:38  [ТС] 7
zss,
C++
1
2
    ArrayType *array; 
    int currentSize;
Исправил, программа работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2015, 20:38
Помогаю со студенческими работами здесь

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
Сформировать одномерный массив целых чисел, используя датчик случайных чисел.Распечатать полученный...

Целую частьиз массива действительных чисел переписать в массив целых чисел
Использовать два одномерных массива - массив целых чисел и массив действительных чисел. Прочитать...

Дан двумерный массив целых чисел, найти количество чисел, кратных N
Дан двумерный массив целых чисел, найти количество чисел, кратных N. Как это можна записать в С++??...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
1)Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2)Распечатать...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru