Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/47: Рейтинг темы: голосов - 47, средняя оценка - 4.66
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824

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

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

Студворк — интернет-сервис помощи студентам
2 вопроса.
2 подвопроса =).

1) Как инициализировать динамическую матрицу?
Желательно через new и delete, но можно и другое.
2) Как передавать эту матрицу в функцию?
а) Прототип функции.
б) Как обращаться к матрице внутри функции?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2011, 06:34
Ответы с готовыми решениями:

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

Как добавить k столбцов в динамическую матрицу?
Программка работает некорректно, в чем ошибка? #pragma argsused #include <iostream.h> #include <conio.h> int i,j; ...

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

47
 Аватар для Nastya24
32 / 18 / 7
Регистрация: 30.09.2011
Сообщений: 59
05.12.2011, 08:35
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
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
05.12.2011, 10:39
C++
1
void funk(int **&matr)
не дохрена ли символов?
не надо амперсант. просто две звезды
0
 Аватар для Nastya24
32 / 18 / 7
Регистрация: 30.09.2011
Сообщений: 59
05.12.2011, 11:17
Цитата Сообщение от co6ak Посмотреть сообщение
C++
1
void funk(int **&matr)
не дохрена ли символов?
не надо амперсант. просто две звезды
Без & значение matr в другую функцию передаваться не будет
0
Кошковед
 Аватар для co6ak
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
05.12.2011, 11:22
Цитата Сообщение от Nastya24 Посмотреть сообщение
Без & значение matr в другую функцию передаваться не будет
с какова это бодуна?
смотри вот сюда ))
и попробуй скомпилить. все замечательно работает
0
 Аватар для Nastya24
32 / 18 / 7
Регистрация: 30.09.2011
Сообщений: 59
05.12.2011, 11:23
Цитата Сообщение от co6ak Посмотреть сообщение
с какова это бодуна?
смотри вот сюда ))
и попробуй скомпилить. все замечательно работает
Да ты крут ёпте)
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.12.2011, 12:46
когда функция должна поменять значение в указателе, тогда нужна ссылка
когда нужно просто проинициализировать матрицу, достаточно указатель передать (и размерность обязательно)
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
06.12.2011, 02:53  [ТС]
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
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
06.12.2011, 02:58
Цитата Сообщение от Nastya24 Посмотреть сообщение
mas[i][j]=...
Это не инициализация, а присваивание.
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
06.12.2011, 03:35  [ТС]
Цитата Сообщение от 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
Заблокирован
06.12.2011, 03:50
Цитата Сообщение от VladSharikov Посмотреть сообщение
f в вашей программе, что это?
количество элементов массива) каждый элемент - указатель на ещё один массив)
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
06.12.2011, 03:52
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
Заблокирован
06.12.2011, 03:54
alkagolik, в задании речь идет:


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

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

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

То есть мы делаем f массивов, размера f или как?
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 03:56
C++
1
2
3
int**mas=new int *[f];    //ТУТ КОЛИЧЕСТВО СТРОК
.....
mas[i]=new int[f]; // ТУТ КОЛИЧЕСТВО КОЛОНОК
0
Заблокирован
06.12.2011, 03:58
вот здесь получается матрица 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
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
06.12.2011, 04:01
Цитата Сообщение от Bers Посмотреть сообщение
Итого: вы решили совсем другую задачу)
нет, это я всего лишь показал что инициализировать n - мерный массив можно так же как и одномерный, а по сабжу уже ответили. Сейчас напишу как на Си это делается. И к тому же (хоть я и придираюсь к терминам) инициализировать и выделять память это вроде разные вещи (это к ТС).
1
Заблокирован
06.12.2011, 04:13
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от alkagolik Посмотреть сообщение
инициализировать и выделять память это вроде разные вещи
А в чем разница то?
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 04:19
Цитата Сообщение от Bers Посмотреть сообщение
А в чем разница то?
насколько я понимаю
int n; - тут компилятор знает только сколько памяти вам надо для вашей переменной.
n = 4; - тут вы инициализируете переменную, записвая значение в выделенную для нее память
0
Заблокирован
06.12.2011, 04:25
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2011, 04:25
Помогаю со студенческими работами здесь

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

Подскажите кто-нибудь, как записать квадратную динамическую матрицу в файл???
Подскажите кто-нибудь, как записать квадратную динамическую матрицу в файл??? Вот я её заполнил: #include&lt;iostream&gt; ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru