Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
kryko
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 16
#1

Динамическая матрица. вставка столбца - C++

15.06.2012, 15:19. Просмотров 904. Ответов 13
Метки нет (Все метки)

не получается вставка. задание таково, что после столбцов, не содержащих отрицательные элементы нужно вставить 2 столбец. вылетаю на строке t[i][j]=stroka[i] с ошибкой Access violation writing location 0xcdcdcdcd.
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
void Vstavka_stolbca(int **&q,int *stroka,int n,int m,int Number)
{
    int i,j=0;
    int **t=new int *[n];
    for(i=0;i<m;i++) t[i]=new int [m];
 
    if (Number==0)
    {
    for(i=0;i<n;i++)
    {t[i][j]=stroka[i];}
    }
    else
    {
    for(j=0;j<Number;j++)
    {
        for(i=0;i<n;i++)
        {
            t[i][j]=q[i][j];
        } 
    }
    
    for(i=0;i<n;i++)
    {
        t[i][Number]=stroka[i];
    }
    j=Number+1;
    }
    for (j;j<m;j++)
    {
        for(i=0;i<n;i++)
        {
            t[i][j]=q[i][j-1];
        } 
    }
    for (i=0;i<n;i++)delete[]q[i];
    delete [] q;
    q=t;
}
 
int Zadanie22(int **&q,int n,int &m)
{
    int i,j,u=0;bool flag;
    int *stroka=new int[m];
    for (i=0;i<n;i++)
    {stroka[i]=q[i][2];}
    for(j=0;j<m ;j++)
    {
        flag=true;
        for(i=0;i<n  ;i++)
        {
        if(q[i][j]<0) 
        { flag=false; break;}
         
        }
        if (flag)
            {
                m++;
                Vstavka_stolbca(q,stroka,n,m,j);
                j++;u++;
            }
    }
    delete  [] stroka;
    return u;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2012, 15:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическая матрица. вставка столбца (C++):

Динамическая память.Матрица. После каждого столбца, все элементы которого положи-тельные, добавить новый столбец и заполнить его нулями
Напишите пожалуйста программу. Условие - в программе не должно быть никаких...

Динамическая матрица
Здравствуйте, помогите найти ошибку в динамической матрице: у меня почему-то...

Динамическая матрица
помогите написать 2 проги 1) 2) по критериям: 1)Динамические массивы...

Динамическая матрица
Добрый день, у меня такая проблема. Даны 3 матрицы 4х4, 5х5, 7х7. Надо написать...

Динамическая матрица С++
Напишите программу, которая принимает с клавиатуры число N и M, создает матрицу...

динамическая матрица
в общем, надо сделать матрицу доступа, её размер в исходном состоянии 1х1, и...

13
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
15.06.2012, 15:36 #2
11 строка. j здесь у вас ни в каком цикле нету, т.е., оно как было инициализировано в начале (стр. 4), так и есть нулевое. Если вам нулевое и нужно, то и поставьте там 0 -- не насилуйте человеческий мозг)
Но это все лирика. Ошибка у вас в цикле в 6-й строке. Там i<n, а не i<m
1
kryko
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 16
15.06.2012, 16:10  [ТС] #3
UFO94, спасибо!) только теперь если первый столбец у меня не содержит отрицательных элементов, то он вставляет перед ним какие-то страшные числа ( -33686019). а все остальное работает правильно.
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
15.06.2012, 16:16 #4
Попробуйте напечатать элементы массива stroka. Можно еще в основной программе. Они адекватные или тоже страшные числа?
0
kryko
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 16
15.06.2012, 16:19  [ТС] #5
адекватные, такие какие и должны быть
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
15.06.2012, 16:21 #6
Если первый столбец не собержит отрицательных элементов должна выполнятся ветка if(Number==0)?
0
kryko
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 16
15.06.2012, 16:22  [ТС] #7
UFO94, да
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
15.06.2012, 16:30 #8
Опять похожая ошибка. У тебя строка в функции Zadanie22 обьявлена как массив длины m, а цикл в Вставке идет до n.
И просто совет: у тебя вставляется столбец, который хранится в массиве строка. Так ты просто сам можешь запутаться. Переменные должны называтся соответственно своему назначению.
0
kryko
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 16
15.06.2012, 16:36  [ТС] #9
я все это исправила, но выдает результат так же.
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
15.06.2012, 16:46 #10
Тогда киньте весь код еще раз. Хочу окинуть взором я его.
0
kryko
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 16
15.06.2012, 16:48  [ТС] #11
если нужно, кину с main
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
void Vstavka_stolbca(int **&q,int *stroka,int n,int m,int Number)
{
    int i,j=0;
    int **t=new int *[n];
    for(i=0;i<n;i++) t[i]=new int [m];
 
    if (Number==0)
    {
    for(i=0;i<n;i++)
    {t[i][0]=stroka[i];}
    }
    else
    {
    for(j=0;j<Number;j++)
    {
        for(i=0;i<n;i++)
        {
            t[i][j]=q[i][j];
        } 
    }
 
    for(i=0;i<n;i++)
    {
        t[i][Number]=stroka[i];
    }
    j=Number+1;
    }
    for (j;j<m;j++)
    {
    for(i=0;i<n;i++)
    {
            t[i][j]=q[i][j-1];
        } 
    }
    for (i=0;i<n;i++)delete[]q[i];
    delete [] q;
    q=t;
}
 
int Zadanie22(int **&q,int n,int &m)
{
    void Vstavka_stolbca(int **&q,int *stroka,int n,int m,int Number);
    int i,j,u=0;bool flag;
    int *stroka=new int[n];
    for (i=0;i<n;i++)
    {stroka[i]=q[i][1];}
    cout<<endl;
    cout<<"Вставляемый столбец: ";
    for (i=0;i<n;i++)
    {
         cout<<stroka[i]<<"  ";
    } cout<<endl;
    for(j=0;j<m ;j++)
    {
        flag=true;
        for(i=0;i<n  ;i++)
        {
        if(q[i][j]<0) 
        { flag=false; break;}
         
        }
        if (flag)
            {
                m++;
                Vstavka_stolbca(q,stroka,n,m,j);
                j++;u++;
            }
    }
    delete  [] stroka;
    return u;
}
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
15.06.2012, 17:17 #12
Перед q не нужен значок амперсанда. Передавать ссылку по ссылке -- совершенно лишняя вещь.

Странно... Попробуйте сразу после 10-й строки напечатать stroka[i] и t[i][0]. Обе группы чисел -- адекватные и равные между собой?
0
kryko
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 16
15.06.2012, 17:32  [ТС] #13
равные..
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
15.06.2012, 19:32 #14
Стоп. Т.е., у нас добавленый столбец -- нормальный? Так а где у нас появляются эти ненормальные числа?
0
15.06.2012, 19:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2012, 19:32
Привет! Вот еще темы с решениями:

Задана матрица A(n,n). Первый элемент каждого четного столбца заменить суммой простых чисел этого столбца, пер
Надо решить такую задачу,помогите,а то не шарю що делать: Задана матрица...

Двумерная динамическая матрица
в общем помогите, надо написать двумерный массив(int) динамическим и пару...

Объясните динамическая матрица
Здравствуйте. Объясните пожалуйста вот эти строчки кода. int **matrix = new...

У меня динамическая матрица ?
#include &lt;iostream&gt; using namespace std; int main() { int n,i,j; ...


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

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

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