Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/28: Рейтинг темы: голосов - 28, средняя оценка - 4.68
Я не зарегистрирован

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

29.04.2008, 05:32. Показов 5808. Ответов 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 '{'

Так как? Заранее спасибо за ответ...
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.04.2008, 05:32
Ответы с готовыми решениями:

лаба по одномерным и многомерным массивам
Нужно сделать вот такую лабораторную, буду рад любой написанной функции, заранее спасибо. 1) N = 45 2) Функция для получения элементов...

Ошибка с присвоением значений к массивам
Значение функции дроби,не могу присвоить к массиву... не получается подсчет ..Помогите плиз..с этим кусочком.... Код: double...

Присвоение значений
Всем доброго времени суток, подскажите как присвоить переменной такое значение? 48847E5536130C10

13
Я не зарегистрирован
29.04.2008, 05:36
Задача решается способом:
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
29.04.2008, 14:19
Вы можете так сделать
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;
тоже вполне визуально
Я не зарегистрирован
29.04.2008, 14:33
Это значит, что просто перечислением значений ({1,2,3,4,5,…}) нельзя добиться поставленной цели?
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
30.04.2008, 19:05
А чем это не нравится?
Code
1
2
3
4
5
6
7
8
9
10
11
12
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},
}
};
0
Я не зарегистрирован
01.05.2008, 02:39
Somebody, тем, что это годится только для одного раза, при задании массива. Когда он задан, его элементам таким образом значения уже не присвоишь.
Я не зарегистрирован
04.05.2008, 17:58
Ну, умелые программисты, неужели не встречались ранее с такой простой задачей?
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
05.05.2008, 10:12
Цитата Сообщение от Я не зарегистрирован Посмотреть сообщение
Ну, умелые программисты, неужели не встречались ранее с такой простой задачей?
Думаю "умелые программисты" ни разу не встречались с таким извратом, как хранение информации об изображениях в трёхмерном массиве). Почему бы не создать, ну хотя бы, список структур, каждая из которых хранит информацию о конкретном изображении?
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
05.05.2008, 14:58
Цитата Сообщение от Я не зарегистрирован Посмотреть сообщение
Somebody, тем, что это годится только для одного раза, при задании массива. Когда он задан, его элементам таким образом значения уже не присвоишь.
Если надо весь массив забить не при создании, но заранее известными числами, то можно сделать константный массив, а потом просто скопировать его, куда надо будет.
0
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
05.05.2008, 19:35
Цитата Сообщение от Somebody Посмотреть сообщение
Если надо весь массив забить не при создании, но заранее известными числами, то можно сделать константный массив, а потом просто скопировать его, куда надо будет.
Можешь привести простейший пример ??
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
06.05.2008, 19:09
Code
1
2
3
4
5
6
7
8
#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));
}
0
Я не зарегистрирован
12.05.2008, 05:42
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?
Я не зарегистрирован
12.05.2008, 05:43
И, кстати, обязательно ли ссылаться на массивы? Почему бы просто не указать их имена:
Code
1
memcpy(N[0];ABC;sizeof(N));
Я не зарегистрирован
13.05.2008, 02:51
Следующий код работает правильно:
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; …).
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2008, 02:51
Помогаю со студенческими работами здесь

Присвоение значений
В течение работы программы в строковую переменную а1 случайным образом приходят имена переменных, объявленных в данной программе. Этим...

Присвоение значений всем элементам массива
Как присвоить значение всем элементам массива наиболее простым способом думал что double massiv={1}; присваивает...

Присвоение значений элементам вложенной структуры
Необходимо присвоить значение элементам массива структур struct message { unsigned char code; unsigned short length; struct body...

Присвоение значений элементам двумерного вектора
Недавно добрие люди помогли мне со следующим кодом 1 код vector&lt;vector&lt;char&gt;&gt; vv; // ... for (auto row_it = vv.begin() + х;...

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru