Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 87
1

Ошибка в одноиерном динамическом массиве

08.05.2013, 14:51. Показов 549. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, программа не правильно выводит на экран обработанный массив. Пункт 1 выполняется, пункт 2 выполняется, пункт 3 выполняется, при повторном пукте 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
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
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
// Определение функции формирования одномерного динамического массива
int *form_arr (int m)
{
    int *arr; arr=new int[m]; cout << endl;
    return arr;
}
// Определение функции заполнения массива (псевдослучайными числами в диапазоне)
void init_arr (int *arr, int m)
{
    for (int i = 0; i < m; i++) {arr[i] = rand()%100; }
cout << endl;
}
// Функция создания 2 массива
int add_elem (int n,int m, int*arr,int k)
{
    // Создание временного массива для хранения новых елементов   
        int *Arr = new int[n];
        // Ввод значений новых елементов
        cout << "Элементы К:\n";
        
     for (int i = 0; i<n; i++)  
{
Arr[i]=rand()%100;
cout<< Arr[i] <<" ";}
     cout<<endl<<endl;
        // Создание нового массива, который будет 
 
        // содержать елементы начального массива и 
 
        // новые елементы массива новых елементов
 
        int* newArr = new int[m + n];
 
        // Для прохода по массиве новых елементов
 
        int count = 0;
 
 
 
        for(int i = 0; i < m + n; i++) {
 
                // Вставляем елементы старого массива в новый
 
                if(i < k) {
 
                        newArr[i] = arr[i];
 
                }
 
                // Вставляем новые елементы из массива новых елементов
 
                else if(i >= k && i < k + n) {
 
                        newArr[i] = Arr[count];
 
                        count++;
 
                }
 
                // Вставляем елементы старого массива в новый
 
                else {
 
                        newArr[i] = arr[i - count];
 
                }
                
        }
        
       return 0;
}
 
// Функция вывода массива на экран
void print_arr (int *Arr, int m)
{
    cout << "Массив имеет вид: " << endl << endl;
    for (int i=0; i<m; i++)
    {
        cout << Arr[i] << " ";
    }
        cout << endl << endl;
}
// Функция вывода массива на экран
int print_arr2 (int m, int n)
        {   int *newArr=NULL;
            newArr = new int[]; 
    for(int i =0 ; i < m + n; i++) {
             cout << "[" << i << "] -> " << newArr[i];
             cout << "\n";      
}
 cout << endl << endl;
 return 0;
}
 
// Функция удаления массива 
void del_arr (int *Arr,int *arr)
{
    delete[] arr;
    delete[] Arr;
}
// Определение функции main()
int main()
{
    setlocale (0,"");
    int m=0,n=0,k=0,x=0, action;
    int act_point=0;
    int *Arr=NULL;
    int *arr=NULL;
    int *newArr=NULL;
    do
    {
    cout << "1. Формирование массива." << endl;
    cout << "2. Печать массива." << endl;
    cout << "3. Добавление в массив." << endl;
    cout << "4. Выход." << endl;
    cout << "-------------------------------" << endl;
    cout << "Выбирите действие из меню: ";
    cin >> action;
        if ((action < 1) || (action > 4))
        {
            cout << endl << "Нет такого действия в меню!" << endl;
        }
    cout << endl;
    switch (action)
    {
    case 1: if (act_point == 0)
                {
                    cout << "Введите количество элементов массива: ";
                    cin >> m;
            arr = form_arr (m);
            init_arr (arr, m);          
            act_point =1;
            break;}
            else {
                cout << "Массив уже был создан!" << endl << endl; break;
            }
    case 2: if (act_point == 0)
                           {
                cout << "Ошибка! Нет массива! Пожалуйста, создайте его." << endl << endl;
                break;
            }
            if (act_point == 1)
            {
                print_arr (arr, m); break;
            }
            else
            {print_arr2 (m,n);
                break;
          } 
    case 3: if (act_point == 0)
            {
                cout << "Нет массива. Пожалуйста, создайте его!" << endl << endl; break;
            }
            if (act_point == 1)
            {
      cout << "Введите индекс с которого начинаеться вставка (от 1 до "<<m-1<<"): ";
    cin >> k; 
    while ((k>m-1))
    {
        cout << "Вы ввели не корректное число "<<k<<". \nВведите индекс с которого начинаеться вставка (от 1 до "<<m-1<<"): ";
        cin >> k;   
    }
    x=m+n;
    cout << endl;
    cout << "Введите кол-во елементов для добавления: ";
    cin >> n;
    cout << endl;
                int r = add_elem (n, m, arr, k);
                
                    if (r!=0) 
                    {   
                        cout << endl;  
                    }                
                act_point=2;
             
                break;
            }       
            if (act_point == 2)
         {
              cout << "Массив уже обработан!" << endl << endl; break;
          }
    case 4: if (act_point != 0)
                {
                   del_arr (Arr,arr);
                    cout << "Завершение работы... Память очищена!" << endl << endl;
                }
            else
                {
                    cout << "Завершение работы..." << endl << endl;
                }
    } 
    } 
    while (action != 4);
    system ("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2013, 14:51
Ответы с готовыми решениями:

Ошибка в динамическом массиве
Проблема при добавлении сотрудника. Первый сотрудник добавляется просто прекрасно, а вот при записи...

Ошибка присваивания в динамическом массиве структур
Доброго времени суток! Я новичок в программировании, прошу не пинать сильно :) Изучаю С++ по...

В динамическом массиве удалить N элементов, начиная с номера K (ошибка)
Помогите, как исправить ошибку? Нужно из массива arr , который перед этим формируется рандомно....

Функция для удаления элемента в двумерном динамическом массиве. В чем ошибка?
функция для удаления элемента в двум дин массиве (пока только часть в которой указывается какой...

6
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
08.05.2013, 15:31 2
Первое что бросилось в глаза
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   case 4: if (act_point != 0)
                {
                   del_arr (Arr,arr);
                    cout << "Завершение работы... Память очищена!" << endl << endl;
                }
            else
                {
                    cout << "Завершение работы..." << endl << endl;
                }
    } 
    } 
    while (action != 4);
    system ("pause");
    return 0;
}
отсутствие оператора
C++
1
break
и
C++
1
 case 4:
будет выполняться до оператора
C++
1
 ;
не проверял ,но возможно это и есть ошибка.
1
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 87
08.05.2013, 17:34  [ТС] 3
Не думаю что ошибка сдесь, потому что до шага 4 не доходит. А выводе массива newArr [m+n] очень малые и очень большие числа, которых не должно быть. Но всё равно спасибо за найденные ошибки.
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
08.05.2013, 19:28 4
Мне не понятно что может делать это
C++
1
2
3
4
5
6
7
 else if(i >= k && i < k + n) {
 
                        newArr[i] = Arr[count];
 
                        count++;
 
                }
count у вас =0 ну и дальше я не понял.

Добавлено через 38 минут
Что то вся конструкция не понятна
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
    // Создание временного массива для хранения новых елементов 
        int *Arr = new int[n];
        // Ввод значений новых елементов
        cout << "Элементы К:\n";
        
     for (int i = 0; i<n; i++)  
{
Arr[i]=rand()%100;
cout<< Arr[i] <<" ";}
     cout<<endl<<endl;
        // Создание нового массива, который будет 
 
        // содержать елементы начального массива и 
 
        // новые елементы массива новых елементов
 
        int* newArr = new int[m + n];
 
        // Для прохода по массиве новых елементов
 
        int count = 0;
 
 
 
        for(int i = 0; i < m + n; i++) {
 
                // Вставляем елементы старого массива в новый
 
                if(i < k) {
 
                       
 
                }
 
                // Вставляем новые елементы из массива новых елементов
 
                else if(i >= k && i < k + n) {
 
                        newArr[i] = Arr[count];
 
                        count++;
 
                }
 
                // Вставляем елементы старого массива в новый
 
                else {
 
                        newArr[i] = arr[i - count];
 
                }
                
        }
C++
1
newArr[i] = Arr[count];
будет равен
C++
1
Arr[i]=rand()%100;
получается что временный массив уже заполнен и
C++
1
 newArr[i] = arr[i];
не понятно что куда пойдет.Если вы хотите переписать одно в другое надо сделать что то типа
C++
1
2
3
new=A[];
                             A[]= a[];
                             a[]=new;
в этом случае содержимое A[]перепишется в a[]
1
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 87
08.05.2013, 19:50  [ТС] 5
Цитата Сообщение от Genn55 Посмотреть сообщение
Мне не понятно что может делать это
C++
1
2
3
4
5
6
7
 else if(i >= k && i < k + n) {
 
                        newArr[i] = Arr[count];
 
                        count++;
 
                }
count у вас =0 ну и дальше я не понял.

Добавлено через 38 минут
Что то вся конструкция не понятна
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
    // Создание временного массива для хранения новых елементов 
        int *Arr = new int[n];
        // Ввод значений новых елементов
        cout << "Элементы К:\n";
        
     for (int i = 0; i<n; i++)  
{
Arr[i]=rand()%100;
cout<< Arr[i] <<" ";}
     cout<<endl<<endl;
        // Создание нового массива, который будет 
 
        // содержать елементы начального массива и 
 
        // новые елементы массива новых елементов
 
        int* newArr = new int[m + n];
 
        // Для прохода по массиве новых елементов
 
        int count = 0;
 
 
 
        for(int i = 0; i < m + n; i++) {
 
                // Вставляем елементы старого массива в новый
 
                if(i < k) {
 
                       
 
                }
 
                // Вставляем новые елементы из массива новых елементов
 
                else if(i >= k && i < k + n) {
 
                        newArr[i] = Arr[count];
 
                        count++;
 
                }
 
                // Вставляем елементы старого массива в новый
 
                else {
 
                        newArr[i] = arr[i - count];
 
                }
                
        }
C++
1
newArr[i] = Arr[count];
будет равен
C++
1
Arr[i]=rand()%100;
получается что временный массив уже заполнен и
C++
1
 newArr[i] = arr[i];
не понятно что куда пойдет.Если вы хотите переписать одно в другое надо сделать что то типа
C++
1
2
3
new=A[];
                             A[]= a[];
                             a[]=new;
в этом случае содержимое A[]перепишется в a[]
Эту всю конструкцию использовал от готовой программы (рабочей),Попробую переделать по вашим данным. Спасибо
Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
 
 
int main(){
 
        setlocale(0, "Rus");
 
        // Ввод параметров начального массива
 
        int m;
 
        cout << "Введите размер массива: ";
 
        cin >> m;
int *arr; arr=new int[m]; cout << endl;
srand(time(0));
cout<<"Массив: "<<endl;
for (int i = 0; i < m; i++) {arr[i] = rand()%100; cout<< arr[i]  <<  " ";}
cout << endl;
 
        // Ввод кол-ва новых елементов
 
        int n;
 
        cout << "Введите кол-во елементов для добавления: ";
 
        cin >> n;
 
        // Ввод индекса с которого начинаеться вставка
 
        int k;
 
        cout << "Введите индекс с которого начинаеться вставка (от 0 до "<<m<<"): ";
 
        cin >> k;
                while (abs(k)>m)
    {
        cout<<"Введите индекс с которого начинаеться вставка (от 0 до "<<m<<"):  ";
        cin >> k;
        
    }
 
 
        // Создание временного массива для хранения новых елементов
 
        int* Arr = new int[n];
 
        // Ввод значений новых елементов
 
        cout << "Элементы К:\n";
        cout<<endl;
     for (int i = 0; i<n; i++)  
{
Arr[i]=rand()%100;
cout<< Arr[i] <<" ";}       
        
        
 
        // Создание нового массива, который будет 
 
        // содержать елементы начального массива и 
 
        // новые елементы массива новых елементов
 
        int* newArr = new int[m + n];
 
        // Для прохода по массиве новых елементов
 
        int count = 0;
 
 
 
        for(int i = 0; i < m + n; i++) {
 
                // Вставляем елементы старого массива в новый
 
                if(i < abs(k)) {
 
                        newArr[i] = arr[i];
 
                }
 
                // Вставляем новые елементы из массива новых елементов
 
                else if(i >= k && i < k + n) {
 
                        newArr[i] = Arr[count];
 
                        count++;
 
                }
 
                // Вставляем елементы старого массива в новый
 
                else {
 
                        newArr[i] = arr[i - count];
 
                }
 
        }
 
        // Удаляем начальный массив
 
        delete[] arr;
 
        // Удаляем временный массив новых елементов
 
        delete[]  Arr;
 
        // Выводим новый массив после вставки новых елементов в консоль
        cout<<endl;
        cout<<endl;
        cout << "Массив после добавления новых елементов: \n";
 
        for(int j = 0; j < m + n; j++) {
 
                cout << "[" << j << "] -> " << newArr[j];
 
                cout << "\n";       
 
}
system("pause");
}
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
08.05.2013, 20:33 6
С функциями не все понятно.У вас функция заполнения массива ничего не передает только лишь печатает. Функция Создание временного массива для хранения новых элементов должно передавать
C++
1
 int
,а стоит
C++
1
return 0;
и в этой же функции по моему нужно добавить
C++
1
2
3
4
5
6
7
8
// Удаляем начальный массив
 
        delete[] arr;
 
        // Удаляем временный массив новых елементов
 
        delete[]  Arr;
count = 0;
1
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 87
09.05.2013, 10:28  [ТС] 7
Кликните здесь для просмотра всего текста
Цитата Сообщение от Genn55 Посмотреть сообщение
С функциями не все понятно.У вас функция заполнения массива ничего не передает только лишь печатает. Функция Создание временного массива для хранения новых элементов должно передавать
C++
1
 int
,а стоит
C++
1
return 0;
и в этой же функции по моему нужно добавить
C++
1
2
3
4
5
6
7
8
// Удаляем начальный массив
 
        delete[] arr;
 
        // Удаляем временный массив новых елементов
 
        delete[]  Arr;
count = 0;

Нашёл ещё одну похожую программу, можно её переделать для моей?
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
//Функция добавления элементов в массив
int* addelements(int *mas_p,int sz,int nn,int kk)
{
    int s;
    //создание временного массива
    int* tmpm = crmassive(n+nn);
    //запись исходного массива во временный (чтобы не "сбить" указатель)
    for (int i=0;i<sz;i++)
    {
        tmpm[i]=mas_p[i];
    }
    //добавление элементов во временный массив
    for (s=sz+nn-1;s>kk;s--)
    {
        tmpm[s]=tmpm[s-nn];
    }
    for (s=kk;s<kk+nn;s++)
    {
        cout<<"Введите элемент №"<<s<<": ";
        cin>>tmpm[s];
    }
    modified=true;
    return tmpm;
}
0
09.05.2013, 10:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2013, 10:28
Помогаю со студенческими работами здесь

Ошибка в программе. Нужно добавить строку в динамическом массиве в указанную пользователем позицию
Вот то , что у меня есть. Выводит массив до pos и выкидывает. #include &lt;iostream&gt; #include...

Хочу чтобы в динамическом массиве вводились мои значения, вылазит ошибка об отправлении отчёта
Работаю на visual c++ 6.0 ,прогу мне нужно писать через source file. Суть такова: динамический...

Ошибка в динамическом массиве
Дан двумерный массив целых чисел, содержащий 6 x 6 элементов. Создать динамический массив из...

Ошибка при очистке памяти в динамическом массиве
вот имеется такой код. программа, которая вставляет массив в массив. всё работает правильно, но в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru