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

Динамический массив - C++

Восстановить пароль Регистрация
 
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
18.02.2012, 20:34     Динамический массив #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
30
#include <iostream.h>
 
void main()
{
 
    int i,j;
 
    cout<<"Enter size of array: ";
    cin>>i;
    
 
    int **pm = new int* [i]; 
           for (int f = 0; f < i; f++)
                 pm[f] = new int [i];
 
    pm=NULL;//Я ведь так обнуляю все элементы массива???
        
 
    pm  = {16, 78, 99, 26, -29,  19, -52,  65, -88,  51,
    -79, -22,  32, -25, -62, -69, -42, -59, -75,  89,
    -87,  95, -22,  85, -49, -75,  76,  73, -59, -52,
    30,  49, -28, -48,   0,  57,  46, -85,   0, -18,
    -97, -21, -95,  64,  22, -12,  69, -84, -11, -71,
    -25,  47,  72,  43,  15, -44,  44,  61,  54,  74,
    88, -61,   0, -64, -83,  97,   0,  90,  15,  28,
    -54,  19,  73,  35, -67, -87,  85, -99, -70,  10,
    98,  58, -10, -29,  95,  62,  77,  89,  36, -32,
    78,  60, -79, -18,  30, -13, -34, -92,  61, -38}; // так не хочет заполнять
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2012, 20:34     Динамический массив
Посмотрите здесь:

C++ статический массив ----> динамический массив
C++ Динамический массив
C++ Динамический массив
Динамический массив C++
C++ динамический массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 20:36     Динамический массив #2
Цитата Сообщение от qwe12355 Посмотреть сообщение
pm=NULL;//Я ведь так обнуляю все элементы массива???
Нет. Теперь указатель, который раньше указывал на первый элемент, указывает на NULL.
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
18.02.2012, 21:03  [ТС]     Динамический массив #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream.h>
 
void main()
{
 
    int i;
 
    cout<<"Enter size of array: ";
    cin>>i;
    
 
    int **pm = new int* [i]; // äâå ñòðîêè Гў Г¬Г*Г±Г±ГЁГўГҐ
    for (int f = 0; f < i; f++)
        pm[f] = new int [i];
 
    for(int z=0;z<i;z++)
        for(int j=0;j<i;j++)
        {
            pm[z][j]=0;
            cout<<pm[z][j];
        }
 
}
Вот так обнуляю массив но при запуске выдаёт ошибку.

Вопрос снят, это я дурак.

Как заполнить?

Добавлено через 14 минут
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
#include <iostream.h>
 
void main()
{
 
    int i;
 
    cout<<"Enter size of array: ";
    cin>>i;
    
 
    int **pm = new int* [i]; // äâå ñòðîêè Гў Г¬Г*Г±Г±ГЁГўГҐ
    for (int f = 0; f < i; f++)
        pm[f] = new int [i];
 
    for(int z=0;z<i;z++)
        for(int j=0;j<i;j++)
        {
            pm[z][j]=0;
        }
 
    int k=0,m[] = {16, 78, 99, 26, -29,  19, -52,  65, -88,  51,
    -79, -22,  32, -25, -62, -69, -42, -59, -75,  89,
    -87,  95, -22,  85, -49, -75,  76,  73, -59, -52,
    30,  49, -28, -48,   0,  57,  46, -85,   0, -18,
    -97, -21, -95,  64,  22, -12,  69, -84, -11, -71,
    -25,  47,  72,  43,  15, -44,  44,  61,  54,  74,
    88, -61,   0, -64, -83,  97,   0,  90,  15,  28,
    -54,  19,  73,  35, -67, -87,  85, -99, -70,  10,
    98,  58, -10, -29,  95,  62,  77,  89,  36, -32,
    78,  60, -79, -18,  30, -13, -34, -92,  61, -38};
 
    for(int z2=0;z2<i;z2++)
    {
        for(int j2=0;j2<i;j2++)
        {
            pm[z2][j2]=m[k];
            cout<<pm[z2][j2]<<" ";
            k++;
        }
        cout<<endl;
    }
}
Вот заполнил но как сделать чтобы лишние элементы были равны 0?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 21:05     Динамический массив #4
Цитата Сообщение от qwe12355 Посмотреть сообщение
Вот заполнил но как сделать чтобы лишние элементы были равны 0?
По идее они и будут равны нулю.

Что-то вы мудрено решаете, какое задание-то?
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
18.02.2012, 21:07  [ТС]     Динамический массив #5
нет не получиться. он как бы перебирает весь массив заполняя его и когда массив m заканчівается он продолжая заполнять берет от балды числа
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 21:11     Динамический массив #6
qwe12355, я не указал, что когда k выйдет за размер массива m, то будет либо сигфолт, либо рандомные чила. Я полагал, это подразумевается.
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
18.02.2012, 21:14  [ТС]     Динамический массив #7
Задание.

Выполните задание 2 лабораторной работы 1, но размерности двумерного массива спросите у пользователя, а память под двумерный массив захватите динамически. Причем размер двумерного массива может не совпадать с размером одномерного - продумайте поведение программы в этом случае (это не ошибка!).


вот предыдущее:

Двумерный массив 10 на 10. Вывести адреса всех элементов, лежащих на главной диагонали.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 21:23     Динамический массив #8
Цитата Сообщение от qwe12355 Посмотреть сообщение
но размерности двумерного массива спросите у пользователя, а память под двумерный массив захватите динамически. Причем размер двумерного массива может не совпадать с размером одномерного
Цитата Сообщение от qwe12355 Посмотреть сообщение
Двумерный массив 10 на 10. Вывести адреса всех элементов, лежащих на главной диагонали.
Нигде не увидел: о каком одномерном массиве идет речь?
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
18.02.2012, 21:23  [ТС]     Динамический массив #9
Хотелось бы лучше но вроде так работает.......
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
#include <iostream.h>
 
void main()
{
 
    int i;
 
    cout<<"Enter size of array: ";
    cin>>i;
    
 
    int **pm = new int* [i]; // äâå ñòðîêè Гў Г¬Г*Г±Г±ГЁГўГҐ
    for (int f = 0; f < i; f++)
        pm[f] = new int [i];
 
    for(int z=0;z<i;z++)
        for(int j=0;j<i;j++)
        {
            pm[z][j]=0;
        }
 
    int k=0,m[] = {16, 78, 99, 26, -29,  19, -52,  65, -88,  51,
    -79, -22,  32, -25, -62, -69, -42, -59, -75,  89,
    -87,  95, -22,  85, -49, -75,  76,  73, -59, -52,
    30,  49, -28, -48,   0,  57,  46, -85,   0, -18,
    -97, -21, -95,  64,  22, -12,  69, -84, -11, -71,
    -25,  47,  72,  43,  15, -44,  44,  61,  54,  74,
    88, -61,   0, -64, -83,  97,   0,  90,  15,  28,
    -54,  19,  73,  35, -67, -87,  85, -99, -70,  10,
    98,  58, -10, -29,  95,  62,  77,  89,  36, -32,
    78,  60, -79, -18,  30, -13, -34, -92,  61, -38};
 
    for(int z2=0;z2<i;z2++)
    {
        for(int j2=0;j2<i;j2++)
        {
            pm[z2][j2]=m[k];
            k++;
            if (k>99) break;
        }
        if (k>99) break;
    }
    
    for(int z3=0;z3<i;z3++)
    {
        for(int j3=0;j3<i;j3++)
        {
            cout<<pm[z3][j3]<<" ";
            
        }
        cout<<endl;
        
    }
 
 
    cout<<"Adresa: ";
 
    for(int z4=0;z4<i;z4++)
    {
    
        cout<<&pm[z4][z4]<<" ";
            
        cout<<endl;
        
    }
}
За неделю другую может как-нибудь улучшу. С другом посоветуюсь. break не хочется использовать

Массив в коде.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 21:33     Динамический массив #10
Попробуйте обнулять массив так
C++
1
pm[f] = new int [i] { };
Цитата Сообщение от qwe12355 Посмотреть сообщение
break не хочется использовать
Тогда в условии for отлавливайте.
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
18.02.2012, 21:36  [ТС]     Динамический массив #11
чет не могу придумать как это так организовать
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 21:43     Динамический массив #12
Вычисляйте размер через sizeof(arr) / sizeof(int), и проверяйте k.
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
18.02.2012, 22:15  [ТС]     Динамический массив #13
C++
1
2
3
4
5
6
    for(int i2=0;i2<(sizeof(m)/sizeof(int));i2++)
    {
        *(pm+i2)=&m[i2];
        cout<<**(pm+i2)<< " ";
        if (i2==i) cout<<endl;
    }
вот так хочу присваивать, но он выдаёт весь массив, и в конце программы ошибка вылетает

Добавлено через 2 минуты
но тут есть ошибка, я знаю, но не знаю где
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 22:19     Динамический массив #14
Цитата Сообщение от qwe12355 Посмотреть сообщение
*(pm+i2)=&m[i2];
Ошибка тут. Think more.

Добавлено через 1 минуту
Цитата Сообщение от qwe12355 Посмотреть сообщение
cout<<**(pm+i2)<< " ";
Ну и тут.
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
18.02.2012, 22:32  [ТС]     Динамический массив #15
если так, то только первая строка массива заполняется
C++
1
*pm=&m[0];
так выдаёт ошибку при вводе i
C++
1
2
3
4
5
6
for(int i2=0;i2<(sizeof(m)/sizeof(int));i2++)
    {
        **(pm+i2)=m[i2];
        cout<<**(pm+i2)<< " ";
        if (i2==i) cout<<endl;
    }
Добавлено через 8 минут
C++
1
cout<<**(pm+i2)<< " ";
а тут какая ошибка? это я для того чтобы просмотреть массив полученный написал
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 22:33     Динамический массив #16
**(pm + i2) может выйти за границы массива.
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
18.02.2012, 22:40  [ТС]     Динамический массив #17
и да, вылетая, окошко с ошибкой показывает на
C++
1
*(pm+i2)=&m[i2];
Добавлено через 1 минуту
разве?

Добавлено через 4 минуты
Цитата Сообщение от soon Посмотреть сообщение
**(pm + i2) может выйти за границы массива.
как она может выйти за границы массива
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 22:45     Динамический массив #18
Цитата Сообщение от qwe12355 Посмотреть сообщение
как она может выйти за границы массива
Легко и непринужденно. Когда i2 станет больше, чем количество столбцов, то возможен выход за пределы, поскольку после конца первой строки не всегда идет начало второй. Там может быть еще несколько ячеек, запись в которые невозможна.
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
19.02.2012, 13:15  [ТС]     Динамический массив #19
Цитата Сообщение от soon Посмотреть сообщение
Легко и непринужденно. Когда i2 станет больше, чем количество столбцов, то возможен выход за пределы, поскольку после конца первой строки не всегда идет начало второй. Там может быть еще несколько ячеек, запись в которые невозможна.
то есть мне нужно еще проверят i2 больше или равна k, и в зависимости от этого в цикле делать количество повторений?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 13:31     Динамический массив
Еще ссылки по теме:

Динамический массив C++
Динамический массив C++

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

Или воспользуйтесь поиском по форуму:
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.02.2012, 13:31     Динамический массив #20
qwe12355, можно завести 2 переменные, для столбца и строки. А для одномерного массива вычислять как i * cols + j, где i - позиция строки, j - столбца, cols - количество столбцов в двумерном массиве.
Yandex
Объявления
19.02.2012, 13:31     Динамический массив
Ответ Создать тему
Опции темы

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