Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
VladSharikov
22 / 22 / 7
Регистрация: 02.12.2010
Сообщений: 824
#1

Как инициализировать динамическую матрицу?

05.12.2011, 06:34. Просмотров 3811. Ответов 47
Метки нет (Все метки)

2 вопроса.
2 подвопроса =).

1) Как инициализировать динамическую матрицу?
Желательно через new и delete, но можно и другое.
2) Как передавать эту матрицу в функцию?
а) Прототип функции.
б) Как обращаться к матрице внутри функции?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2011, 06:34
Ответы с готовыми решениями:

Как объявить динамическую матрицу
Как объявить динамическую матрицу

Как добавить k столбцов в динамическую матрицу?
Программка работает некорректно, в чем ошибка? #pragma argsused #include...

Как инициализировать двумерную матрицу натуральными логарифмами?
Всем привет, столкнулся с небольшой проблемой, мне нужно инициализировать...

Как инициализировать матрицу уникальными случайными числами?
С одномерным всё понятно, но а как реализовать для двумерного? Добавлено...

Подскажите кто-нибудь, как записать квадратную динамическую матрицу в файл???
Подскажите кто-нибудь, как записать квадратную динамическую матрицу в файл???...

47
Nastya24
32 / 18 / 7
Регистрация: 30.09.2011
Сообщений: 59
05.12.2011, 08:35 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int**mas=new int *[f];
for( int i=0;i<f;i++)     
mas[i]=new int[f];
 
for( int i=0;i<f;i++)  
for( int j=0;j<f;j++) 
mas[i][j]=...            
 
for( int i=0;i<f;i++)
delete [] mas[i];    
delete [] mas;
 
void funk(int **&matr)
2
co6ak
Кошковед
515 / 503 / 63
Регистрация: 12.04.2010
Сообщений: 1,392
05.12.2011, 10:39 #3
C++
1
void funk(int **&matr)
не дохрена ли символов?
не надо амперсант. просто две звезды
0
Nastya24
32 / 18 / 7
Регистрация: 30.09.2011
Сообщений: 59
05.12.2011, 11:17 #4
Цитата Сообщение от co6ak Посмотреть сообщение
C++
1
void funk(int **&matr)
не дохрена ли символов?
не надо амперсант. просто две звезды
Без & значение matr в другую функцию передаваться не будет
0
co6ak
Кошковед
515 / 503 / 63
Регистрация: 12.04.2010
Сообщений: 1,392
05.12.2011, 11:22 #5
Цитата Сообщение от Nastya24 Посмотреть сообщение
Без & значение matr в другую функцию передаваться не будет
с какова это бодуна?
смотри вот сюда ))
и попробуй скомпилить. все замечательно работает
0
Nastya24
32 / 18 / 7
Регистрация: 30.09.2011
Сообщений: 59
05.12.2011, 11:23 #6
Цитата Сообщение от co6ak Посмотреть сообщение
с какова это бодуна?
смотри вот сюда ))
и попробуй скомпилить. все замечательно работает
Да ты крут ёпте)
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
05.12.2011, 12:46 #7
когда функция должна поменять значение в указателе, тогда нужна ссылка
когда нужно просто проинициализировать матрицу, достаточно указатель передать (и размерность обязательно)
0
VladSharikov
22 / 22 / 7
Регистрация: 02.12.2010
Сообщений: 824
06.12.2011, 02:53  [ТС] #8
Nastya24,

поподробнее можно?

C++
1
2
3
4
5
6
7
int**mas=new int *[f];
for( int i=0;i<f;i++)     
mas[i]=new int[f];
 
for( int i=0;i<f;i++)  
for( int j=0;j<f;j++) 
mas[i][j]=...
f размер? то есть кол-во строк*кол-во столбцов?

int**mas=new int *[f];
for( int i=0;i<f;i++)
mas[i]=new int[f];
иницилазируем матрицу, инициализируем f массивов(f строк), так?

for( int i=0;i<f;i++)
for( int j=0;j<f;j++)
mas[i][j]=...
собственно заполняем массив? так?

Добавлено через 5 минут
Как из программы обращаться к функции void funk(int **&matr) ?

C++
1
funk(mas)
?
0
Chelioss
181 / 181 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
06.12.2011, 02:58 #9
Цитата Сообщение от Nastya24 Посмотреть сообщение
mas[i][j]=...
Это не инициализация, а присваивание.
0
VladSharikov
22 / 22 / 7
Регистрация: 02.12.2010
Сообщений: 824
06.12.2011, 03:35  [ТС] #10
Цитата Сообщение от VladSharikov Посмотреть сообщение
mas[i][j]=...
собственно заполняем массив? так?
я знаю.
Цитата Сообщение от VladSharikov Посмотреть сообщение
int**mas=new int *[f];
for( int i=0;i<f;i++) * *
mas[i]=new int[f];
инициализация - это.
в любом случае, не придирайтесь к терминам.

есть что-то по моим вопросам?

Добавлено через 15 минут
Настя,

f в вашей программе, что это?

Добавлено через 6 минут
количество линий?
0
Bers
Заблокирован
06.12.2011, 03:50 #11
Цитата Сообщение от VladSharikov Посмотреть сообщение
f в вашей программе, что это?
количество элементов массива) каждый элемент - указатель на ещё один массив)
0
alkagolik
Заблокирован
06.12.2011, 03:52 #12
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 <stdio.h>
#include <stdlib.h>
 
void init (char *x, short n, short m)
{
    short i = 0, num = m * n;
    while( i < num)
    {
        x[ i ] = rand() % 2;
        ++i;
    }
}
 
int main( void )
{
    char n = 10, m = 10;
    char i = 0, j;
    char matr[ n ][ m ];
 
    init (&matr, n, m);
 
    for ( i ; i < n; ++i )
    {
        puts("");
        for ( j = 0; j < m; ++j)
            printf("%i ", matr[ i ][ j ]);
    }
 
    return 0;
}
0
Bers
Заблокирован
06.12.2011, 03:54 #13
alkagolik, в задании речь идет:


Цитата Сообщение от VladSharikov Посмотреть сообщение
1) Как инициализировать динамическую матрицу?
Желательно через new и delete, но можно и другое.
У вас:

Цитата Сообщение от alkagolik Посмотреть сообщение
char matr[ n ][ m ];
Стековый)

Итого: вы решили совсем другую задачу)
0
VladSharikov
22 / 22 / 7
Регистрация: 02.12.2010
Сообщений: 824
06.12.2011, 03:55  [ТС] #14
Может быть количество строк матрицы?

То есть мы делаем f массивов, размера f или как?
0
greeezz
274 / 167 / 21
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 03:56 #15
C++
1
2
3
int**mas=new int *[f];    //ТУТ КОЛИЧЕСТВО СТРОК
.....
mas[i]=new int[f]; // ТУТ КОЛИЧЕСТВО КОЛОНОК
0
Bers
Заблокирован
06.12.2011, 03:58 #16
вот здесь получается матрица f на f
C++
1
2
3
4
5
6
7
8
9
10
11
int**mas=new int *[f];
for( int i=0;i<f;i++) *mas[i]=new int[f];
 
for( int i=0;i<f;i++) *
    for( int j=0;j<f;j++) 
                      mas[i][j]=... * * * * * *
 
for( int i=0;i<f;i++)  delete [] mas[i]; * *
 
delete [] mas;
void funk(int **&matr)

Не по теме:

заколебали эти звездочки, я не буду их стирать

0
alkagolik
Заблокирован
06.12.2011, 04:01 #17
Цитата Сообщение от Bers Посмотреть сообщение
Итого: вы решили совсем другую задачу)
нет, это я всего лишь показал что инициализировать n - мерный массив можно так же как и одномерный, а по сабжу уже ответили. Сейчас напишу как на Си это делается. И к тому же (хоть я и придираюсь к терминам) инициализировать и выделять память это вроде разные вещи (это к ТС).
1
Bers
Заблокирован
06.12.2011, 04:13 #18
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от alkagolik Посмотреть сообщение
инициализировать и выделять память это вроде разные вещи
А в чем разница то?
0
greeezz
274 / 167 / 21
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 04:19 #19
Цитата Сообщение от Bers Посмотреть сообщение
А в чем разница то?
насколько я понимаю
int n; - тут компилятор знает только сколько памяти вам надо для вашей переменной.
n = 4; - тут вы инициализируете переменную, записвая значение в выделенную для нее память
0
Bers
Заблокирован
06.12.2011, 04:25 #20
Цитата Сообщение от greeezz Посмотреть сообщение
насколько я понимаю
int n; - тут компилятор знает только сколько памяти вам надо для вашей переменной.
n = 4; - тут вы инициализируете переменную, записвая значение в выделенную для нее память
Ну нееет.

C++
1
2
3
4
5
int n; //создадим переменную она уже проиницилизирована. 
         //Допустим, мусором.
 
n = 4;  //это уже присвоение. То есть, изменение состояния уже 
          //существующей переменной

другой пример:

C++
1
2
3
4
5
6
int n=0; //создадим переменную
            //она ещё при создании инициализируется нулём
 
n = 4;  //это уже присвоение. 
           //То есть, переменная содержала ноль, а теперь
          //будит содержать 4

Третий пример:
C++
1
2
3
4
5
Some myClass = 10; //инициализация. 
    //Запустится конструктор, принимающий аргумент int
 
myClass=20; //присвоение.
    // Запустится operator=, который принимает аргумент int
Добавлено через 1 минуту
greeezz, это разница между инициализацией и присвоением.

Но какая разница между инициализацией и выделением памяти - вот этого я.. не понимаю)
0
06.12.2011, 04:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2011, 04:25

Сделать динамическую матрицу
Имеется код для статической матрицы, как сделать её динамической? #include...

Добавление столбца в динамическую матрицу
Доброго времени суток. Возникла проблема с методом добавления столбца в...

Создать динамическую матрицу вещественных чисел
здрасти, помогите создать двумерный динамический массив вещест. чисел


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

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

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