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

Вставить новый столбец в матрицу после столбца, в котором нет отрицательных - C++

Восстановить пароль Регистрация
 
July
0 / 0 / 0
Регистрация: 16.08.2014
Сообщений: 21
16.08.2014, 15:04     Вставить новый столбец в матрицу после столбца, в котором нет отрицательных #1
Вставить новый столбец после столбца, в котором нет ни одного отрицательного
элемента.
Вот, что сделала я. Но у меня программа не работает. как ее изменить?

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
#include <iostream>
#include<conio.h>
using namespace std;
int main()
{int n,m,l;
    cout<<"n="; cin>>n; cout<<"m="; cin>>m;
    int **a=new int*[n];
    for (int i=0; i<n;++i)
        a[i]=new int[m];
    for (int i=0;i<n;++i)
        for (int j=0;j<m;++j)
        {cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j];}
 
    for (int j=0;j<m;++j)
        {int i=0;
        while (a[i][j]>0) i++; 
        if (i==n-1) {l=i;
        for(int j=m;j>l;--j)
            for(int i=0;i<n;++i) a[i][j]=a[i][j-1];
            ++m;
            for(int i=0;i<n;++i)
        {cout<<"a["<<i<<"]["<<l<<"]="; cin>>a[i][l];}}
        else j++;}
    
    for (int i=0;i<n;++i,cout<<endl)
        for (int j=0;j<m;++j)
        cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<"\t";
        getch();
    return 0;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2014, 15:04     Вставить новый столбец в матрицу после столбца, в котором нет отрицательных
Посмотрите здесь:

C++ вставить в матрицу столбец
После последнего столбца, содержащего только отрицательные элементы, вставить столбец из нулей. C++
После столбца матрицы с номером K вставить столбец из единиц C++
После столбца матрицы с номером K вставить столбец из единиц C++
После каждого столбца, содержащего число а три раза вставить последний столбец C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aspirin
29 / 6 / 0
Регистрация: 05.10.2012
Сообщений: 117
16.08.2014, 15:58     Вставить новый столбец в матрицу после столбца, в котором нет отрицательных #2
Оформи код, как положено, его невозможно читать.
КОП
348 / 280 / 86
Регистрация: 15.08.2010
Сообщений: 755
16.08.2014, 16:10     Вставить новый столбец в матрицу после столбца, в котором нет отрицательных #3
Цитата Сообщение от July Посмотреть сообщение
while (a[i][j]>0) i++;
как говорится, бесконечность не предел? Где ограничение на счетчик.

Цитата Сообщение от Aspirin Посмотреть сообщение
Оформи код, как положено, его невозможно читать.
согласен на 100%, благо студия автоматом пробелы ставит и отступы, хоть что-то видно.
Дальше нереально разобрать. Напиши комменты к коду, опиши отдельно ожидаемый вывод, вот тогда уж поглядим
July
0 / 0 / 0
Регистрация: 16.08.2014
Сообщений: 21
16.08.2014, 16:58  [ТС]     Вставить новый столбец в матрицу после столбца, в котором нет отрицательных #4
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
#include <iostream>
#include<conio.h>
using namespace std;
int main()
{int n,m,l;
    cout<<"n="; cin>>n; cout<<"m="; cin>>m;
    //создаю массив
    int **a=new int*[n];
    for (int i=0; i<n;++i)
        a[i]=new int[m];
    for (int i=0;i<n;++i)
        for (int j=0;j<m;++j)
        {cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j];}
 
    for (int j=0;j<m;++j)
        {int i=0;
        while (a[i][j]>0 && i<n) i++; // пока эл-т положительный и пока не конец столбца
        if (i==n-1) {l=i;// если после завершения цикла i равно n
        for(int j=m;j>l;--j)//сдвигаю столбцы
            for(int i=0;i<n;++i) a[i][j]=a[i][j-1];
            ++m;
            for(int i=0;i<n;++i)// записываю эл-ты нового столбца
        {cout<<"a["<<i<<"]["<<l<<"]="; cin>>a[i][l];}}
        else j++;}//иначе перехожу на новый столбец
    //вывод изменненой матрицы
    for (int i=0;i<n;++i,cout<<endl)
        for (int j=0;j<m;++j)
        cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<"\t";
        getch();
    return 0;}

в цикле я добавила условие
КОП
348 / 280 / 86
Регистрация: 15.08.2010
Сообщений: 755
16.08.2014, 18:33     Вставить новый столбец в матрицу после столбца, в котором нет отрицательных #5
Цитата Сообщение от July Посмотреть сообщение
в цикле я добавила условие
а как же проверить новый код, т.к. этот измененный вариант выдает точно такую же ошибку? попробовать в дебаггере отследить значения переменных и места возникновения ошибок.

с оформлением прогресс, код выложила правильно, но все блоки надо выделять, т.к. иначе будет сплошной непонятный текст. для примера выложу середину этого кода со своими комментами.
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
for (int j = 0; j<m; ++j) 
    {  
        //все фигурные скобки в отдельной строке, сам блок имеет отступ
        int i = 0;
        while (a[i][j]>0 && i<n) i++; 
        //Пусть у нас массив 2х2, при i=0, 1 все ок. потом i=2
        //программа пытается получить значение a[i][j] для сравнения
        //а это уже выход за границы массива (i<n) она будет уже проверять ПОСЛЕ ошибки
        if (i == n - 1) 
        {
                        //а вот тут никаких новых столбцов не появляется*
            l = i;
 
            for (int j = m; j>l; --j)
            for (int i = 0; i<n; ++i) 
                a[i][j] = a[i][j - 1];
 
            ++m;
 
            for (int i = 0; i<n; ++i)
            {
                cout << "a[" << i << "][" << l << "]="; cin >> a[i][l];
            }
        }
        else j++; //а вот это уже изменение счетчика цикла for внутри него самого, это плохо
    }
*если нужно добавить столбец/строку, изменить размеры массива в общем, то нужно его переопределять. Т.е. создать новый, увеличенный массив, скопировать в него старый с учетом вставки новых элементов, удалить старый.
Yandex
Объявления
16.08.2014, 18:33     Вставить новый столбец в матрицу после столбца, в котором нет отрицательных
Ответ Создать тему
Опции темы

Текущее время: 20:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru