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

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

05.12.2011, 06:34. Показов 10390. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru