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

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

08.05.2013, 14:51. Показов 557. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2013, 10:28
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru