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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SAUtrade
13 / 13 / 1
Регистрация: 21.10.2012
Сообщений: 140
#1

Некорректная работа программы при добавлении столбца в двумерный массив - C++

23.10.2012, 15:29. Просмотров 402. Ответов 3
Метки нет (Все метки)

Проблемма в том что когда добавляю строку все прекрастно работает... А вот со столбцом -- работает но не корректно... Подскажите что не так... Программа должна добавить в любое место строку или столбец...

C++ (Qt)
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
#include <iostream> 
#include <time.h>
#include <stdlib.h>
 
using namespace std; 
 
void print(int **arr, int nrow, int ncol) 
{ 
    for(int i = 0; i < nrow; i++)
    {
        for(int j = 0; j < ncol; j++)
            cout << arr[i][j] << "\t";
        cout << endl;
    }
}
 
 
int main()
{   
    srand(unsigned (time(NULL)));
    int nrow, ncol, n1 = 0, n2 = 0, n3 = 0;
    int i, j;
    int position;
    bool flag = false;
        
    cout << "Enter amount row: ";
    cin >> nrow;
    cout << endl << "Enter amount column: ";
    cin >> ncol;
        
    // Объявляется переменная типа "указатель на указатель на int"
    // и выделяется память под массив указателей на строки массива
    int **arr = new int*[nrow]; 
    //Цикл выделяет память под каждую строку массива 
    for (i = 0; i < nrow; i++)
    //Каждому элементу массива указателей на строки присваевается адресс начала участка памяти
    arr[i] = new int [ncol];
 
    
 
    cout << "Fill in array: " << endl << "1. Random" << endl << "2. Manual" << endl << "Make your choice: ";
    cin >> n1;
 
        switch(n1)
            {
                case 1:
                    for(int i = 0; i < nrow; i++)
                        for(int j = 0; j < ncol; j++)
                            arr[i][j] = rand()%100;
                    cout << endl << "Generated array: " << endl;
                    print(arr, nrow, ncol);
                    break;
                
                case 2:
                    cout << endl << "Enter elements array: " ;
                        for(int i = 0; i < nrow; i++)
                            for(int j = 0; j < ncol; j++)
                                cin >> arr[i][j];
                    cout << "Your array: " << endl;
                    print(arr, nrow, ncol);
                    break;
                
                default :
                    cout << "Your choice is not correct" << endl;
                    break;
            }
 
 
        
        cout << "What is parametr add in array?" << endl << "1. Row" << endl << "2. Column" << endl <<  "Make your choice: ";
        cin >> n2;
 
        if (n2 == 1)
            {
                int **parr = new int*[nrow + 1];
                for (i = 0; i < nrow + 1; i++)
                parr[i] = new int [ncol];
 
                cout << "What is position choice for row" << " (max position = " << nrow + 1 <<"): ";
                cin >> position;
                --position;
 
                    for (i = 0; i < nrow + 1; i++)
                        {
                            for (j = 0; j < ncol; j++)
                                {
                                    if (position == i)
                                        {
                                            for(int k = 0; k < ncol; k++)
                                                {
                                                    parr[i][k] = rand()%50;
                                                }
                                            flag = true;
                                        }
                                    else 
                                        {
                                            parr[i][j] = flag? arr[i-1][j]:arr[i][j];
                                        }
                                }
                        }
                    
                //вывод на экран нового массива
                    for (i = 0; i < nrow + 1; i++)
                        {
                             for (j = 0; j < ncol; j++)
                                 {
                                    cout<<parr[i][j]<<"\t";
                                 }
                             cout<<"\n";
                        }
             }
 
                
// ГДЕТО В ЭТОМ БЛОКЕ МОЙ ГЛЮК....
        if (n2 == 2)
        {
            int **parr = new int*[nrow];
                for (i = 0; i < nrow; i++)
                parr[i] = new int [ncol + 1];
 
                cout << "What is position choice for column" << " (max position = " << ncol + 1 <<"): ";
                cin >> position;
                --position;
 
                    for (i = 0; i < nrow; i++)
                        {
                            for (j = 0; j < ncol + 1; j++)
                                {
                                    if (position == j)
                                        {
                                            for(int k = 0; k < nrow; k++)
                                                {
                                                    parr[k][j] = rand()%50;
                                                }
                                            flag = true;
                                        }
                            
                                    else 
                                        {
                                            parr[i][j] = flag? arr[i][j-1]:arr[i][j];
                                        }
                                }
                        }
                //вывод на экран нового массива
                        for (i = 0; i < nrow; i++)
                            {
                                for (j = 0; j < ncol + 1; j++)
                                    {
                                        cout<<parr[i][j]<<"\t";
                                    }
                                cout<<"\n";
                            }
                
                            delete[]parr;   
                    }
        
    delete[]arr;
}
ВОТ ЧТО ВЫХОДИТ
Некорректная работа программы при добавлении столбца в двумерный массив
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2012, 15:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некорректная работа программы при добавлении столбца в двумерный массив (C++):

Некорректная работа программы,при вводе отрицательного числа - C++
Здравствуйте.Есть некий // { int c; char array; printf( &quot;Vvod: &quot; ); scanf( &quot;%d&quot;, &amp;c ); printf(...

Некорректная работа программы - C++
Суть программы в том, что есть записанные в файле слова с ответами (разделены &quot;\t\t&quot;). Программа считывает поочереди строки, разделяет ее...

Некорректная работа программы - C++
Добрый день! Я попытался решить задачу № 5 &quot;Статистика&quot; с сайта acmp.ру. Текст задачи: Вася не любит английский язык, но каждый...

Некорректная работа программы - C++
Помогите, пожалуйста, понять почему не работает программа. Ввод предложения работает, однако после нажатия клавиши Enter инвертированный...

Некорректная работа программы с float данными - C++
Вот код примитивного калькулятора: #include &lt;iostream&gt; #include &lt;float.h&gt; #include &lt;conio.h&gt; using namespace std; ...

Двумерный массив. Сформировать одномерный массив, каждый элемент которого равен первому четному элементу соответствующего столбца - C++
Дан двумерный массив, целых чисел. Сформировать одномерный массив, каждый элемент которого равен первому четному элементу соответствующего...

3
Croessmah
Эксперт CЭксперт С++
13411 / 7562 / 855
Регистрация: 27.09.2012
Сообщений: 18,612
Записей в блоге: 3
Завершенные тесты: 1
23.10.2012, 16:31 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
                cout << "What is position choice for column" << " (max position = " << ncol + 1 <<"): ";
                cin >> position;
                --position;
                    for (i = 0; i < nrow; i++)
                        {
                                    flag=false;
                            for (j = 0; j < ncol + 1; j++)
                                {
                                    if (position == j && !flag)
                                        {
                                            parr[i][j] = rand()%50;
                                            flag = true;
                                        }
                            
                                    else 
                                        {
                                            parr[i][j] = flag? arr[i][j-1]:arr[i][j];
                                        }
                                }
                        }
1
nightelf18
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 19
23.10.2012, 16:35 #3
Строки 125 и 127 поменять местами))))
1
SAUtrade
13 / 13 / 1
Регистрация: 21.10.2012
Сообщений: 140
23.10.2012, 16:51  [ТС] #4
Огромное спс))) я пол дня сидел над этой ошибкой))

Добавлено через 12 минут
nightelf18, Просто поменять не достаточно - прога виснит ....
Croessmah, Особая благодарность....
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2012, 16:51
Привет! Вот еще темы с ответами:

Двумерный массив, сумма столбца - C++
В двумерном массиве хранится информация о количестве студентов в той или иной группе каждого курса института с первого по пятый (в первом...

Добавление столбца в двумерный массив - C++
Всем привет! Помогите пожалуйста, нужно добавить столбец после каждого четного столбца матрицы #include &quot;stdafx #include&lt;iostream&gt; ...

Двумерный массив, перемещение строки и столбца - C++
Привет. Создается массив и нужно поменять местами 1 строчку с 1 столбцом. Кто может подсказать как это сделать в этом коде, тут элементы...

Как сделать двумерный динамический массив на 4 столбца ? - C++
Что нужно изменить в этом коде чтобы у Mass1 стало 4 столбца? я побывал менять Mass2 = new int64_t; 2 на 4 но программа перестает работать ...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
23.10.2012, 16:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru