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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.85
Я не зарегистрирован
Сообщений: n/a
#1

Присвоение значений многомерным массивам - C++

29.04.2008, 05:32. Просмотров 3202. Ответов 13
Метки нет (Все метки)

Одномерному массиву значения присваивать совсем просто:
C++
1
2
int A[5]={0,1,2,3,4};
A[0]=73;
Двумерному уже сложнее:
C++
1
2
3
4
5
6
int B[3][5]={
  {0,1,2,3,4},
  {5,6,7,8,9},
  {10,11,12,13,14}
};
b[0][0]=74;
А трехмерному совсем сложно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int B[2][3][5]={
  {
    {0,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},
  }
};
B[0][0][0]=75;
Теперь вопрос: как можно визуально удобным способом (св. выше) присвоить значения определенным элементам массива? Например массив, содержащий цвета рисунков 5x5 пикселей:
P[n][Y][X]; // n = номер рисунка, Y и X = координаты по осям y и x соответственно.

Если попытаться присвоить таким образом:
C++
1
2
3
4
5
6
7
8
9
int N[20][5][5];
 
P[1][5][5]={ // или P[1]={
  {255,255,255,255,255},
  {255,0,0,0,255},
  {255,0,0,0,255}, // черный квадрат :*)
  {255,0,0,0,255},
  {255,255,255,255,255},
};
то, естественно, ничего не получится:
parse error before '{'

Так как? Заранее спасибо за ответ...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2008, 05:32     Присвоение значений многомерным массивам
Посмотрите здесь:

C++ Присвоение значений всем элементам массива
По массивам... C++
По массивам.... C++
C++ Присвоение значений
Присвоение значений элементам вложенной структуры C++
Присвоение значений C++
C++ Задача по массивам
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Я не зарегистрирован
Сообщений: n/a
29.04.2008, 05:36     Присвоение значений многомерным массивам #2
Задача решается способом:
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
P[1][0][0]=255;
P[1][0][1]=255;
P[1][0][2]=255;
P[1][0][3]=255;
P[1][0][4]=255;
P[1][1][0]=255;
P[1][1][1]=0;
P[1][1][2]=0;
P[1][1][3]=0;
P[1][1][4]=255;
P[1][2][0]=255;
P[1][2][1]=0;
P[1][2][2]=0;
P[1][2][3]=0;
P[1][2][4]=255;
P[1][3][0]=255;
P[1][3][1]=0;
P[1][3][2]=0;
P[1][3][3]=0;
P[1][3][4]=255;
P[1][4][0]=255;
P[1][4][1]=255;
P[1][4][2]=255;
P[1][4][3]=255;
P[1][4][4]=255;
Но мне не хочется его применять.
ZwergZ
Сообщений: n/a
29.04.2008, 14:19     Присвоение значений многомерным массивам #3
Вы можете так сделать
C++
1
2
3
4
5
P[1][0][0]=255; P[1][0][1]=255; P[1][0][2]=255; P[1][0][3]=255; P[1][0][4]=255;
P[1][1][0]=255; P[1][1][1]=0; P[1][1][2]=0; P[1][1][3]=0; P[1][1][4]=255;
P[1][2][0]=255; P[1][2][1]=0; P[1][2][2]=0; P[1][2][3]=0; P[1][2][4]=255;
P[1][3][0]=255; P[1][3][1]=0; P[1][3][2]=0; P[1][3][3]=0; P[1][3][4]=255;
P[1][4][0]=255; P[1][4][1]=255; P[1][4][2]=255; P[1][4][3]=255; P[1][4][4]=255;
тоже вполне визуально
Я не зарегистрирован
Сообщений: n/a
29.04.2008, 14:33     Присвоение значений многомерным массивам #4
Это значит, что просто перечислением значений ({1,2,3,4,5,…}) нельзя добиться поставленной цели?
Somebody
2777 / 1591 / 142
Регистрация: 03.12.2007
Сообщений: 4,169
Завершенные тесты: 1
30.04.2008, 19:05     Присвоение значений многомерным массивам #5
А чем это не нравится?
Код
int B[2][3][5]={
{
{0,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},
}
};
Я не зарегистрирован
Сообщений: n/a
01.05.2008, 02:39     Присвоение значений многомерным массивам #6
Somebody, тем, что это годится только для одного раза, при задании массива. Когда он задан, его элементам таким образом значения уже не присвоишь.
Я не зарегистрирован
Сообщений: n/a
04.05.2008, 17:58     Присвоение значений многомерным массивам #7
Ну, умелые программисты, неужели не встречались ранее с такой простой задачей?
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
05.05.2008, 10:12     Присвоение значений многомерным массивам #8
Цитата Сообщение от Я не зарегистрирован Посмотреть сообщение
Ну, умелые программисты, неужели не встречались ранее с такой простой задачей?
Думаю "умелые программисты" ни разу не встречались с таким извратом, как хранение информации об изображениях в трёхмерном массиве). Почему бы не создать, ну хотя бы, список структур, каждая из которых хранит информацию о конкретном изображении?
Somebody
2777 / 1591 / 142
Регистрация: 03.12.2007
Сообщений: 4,169
Завершенные тесты: 1
05.05.2008, 14:58     Присвоение значений многомерным массивам #9
Цитата Сообщение от Я не зарегистрирован Посмотреть сообщение
Somebody, тем, что это годится только для одного раза, при задании массива. Когда он задан, его элементам таким образом значения уже не присвоишь.
Если надо весь массив забить не при создании, но заранее известными числами, то можно сделать константный массив, а потом просто скопировать его, куда надо будет.
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
05.05.2008, 19:35     Присвоение значений многомерным массивам #10
Цитата Сообщение от Somebody Посмотреть сообщение
Если надо весь массив забить не при создании, но заранее известными числами, то можно сделать константный массив, а потом просто скопировать его, куда надо будет.
Можешь привести простейший пример ??
Somebody
2777 / 1591 / 142
Регистрация: 03.12.2007
Сообщений: 4,169
Завершенные тесты: 1
06.05.2008, 19:09     Присвоение значений многомерным массивам #11
Код
#include <mem.h>
void main()
{
int a[5]={0,1,2,3,4};
//А теперь надо забить весь массив другими числами
int a1[5]={5,6,7,8,9};
memcpy(&a1,&a,sizeof(a1));
}
Я не зарегистрирован
Сообщений: n/a
12.05.2008, 05:42     Присвоение значений многомерным массивам #12
Somebody, спасибо.

Но если нужно в трехмерный массив с известным первым индексом забить значения двух других? То есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <mem.h>
void main()
{
int N[20][5][5];
int ABC[5][5] =
  {
    {255,255,255,255,255},
    {255,0,0,0,255},
    {255,0,0,0,255},
    {255,0,0,0,255},
    {255,255,255,255,255}
};
memcpy(&N[0];&ABC;sizeof(N));
Мой пример правилен? То есть, после этого N[0][1][1] == 255?
Я не зарегистрирован
Сообщений: n/a
12.05.2008, 05:43     Присвоение значений многомерным массивам #13
И, кстати, обязательно ли ссылаться на массивы? Почему бы просто не указать их имена:
Код
memcpy(N[0];ABC;sizeof(N));
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2008, 02:51     Присвоение значений многомерным массивам
Еще ссылки по теме:

C++ по массивам
лаба по одномерным и многомерным массивам C++
C++ Присвоение значений элементам двумерного динамического массива
Ошибка с присвоением значений к массивам C++
Enum перечисление переменных и присвоение им значений C++

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

Или воспользуйтесь поиском по форуму:
Я не зарегистрирован
Сообщений: n/a
13.05.2008, 02:51     Присвоение значений многомерным массивам #14
Следующий код работает правильно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <mem.h>
void main()
{
int N[20][5][5];
int ABC[5][5] =
  {
    {255,255,255,255,255},
    {255,0,0,0,255},
    {255,0,0,0,255},
    {255,0,0,0,255},
    {255,255,255,255,255}
};
memcpy(N[0],ABC,sizeof(ABC));
Вопрос в другом: если мне нужно будет создать 20 таких двумерных матриц для N, мне придется создавать каждый раз новую ABC (ABC1, ABC2, …), а потом записывать ее значения в память нужного индекса N, или есть более доступный способ добиться той же цели?

Потому что записать двумерную матрицу в массив, увы, можно только при его инициализации. Позже — только по одному значению для каждого индекса (ABC[1][1]=255; ABC[1][2]=255; …).
Yandex
Объявления
13.05.2008, 02:51     Присвоение значений многомерным массивам
Ответ Создать тему
Опции темы

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