|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
|
Создать массив с n-ым количеством измерений27.09.2016, 06:44. Показов 5073. Ответов 54
Метки нет (Все метки)
Всем привет,
Задали мне в универе проект и я не могу никак с ним разобратся. Суть: задается в cin по шаблону (тип в скобках) имя массива (string) количество измерений dim (int) количество елементов в каждом измерении(лист intoв через комму) цифры которые нужно поместить в массив, через комму. Получается что-то такое А 2 2,3 1,2,3,4,5,6 - создает двухмерную матрицу 2 строки 3 столбца. B 3 3, 2, 3 ... - трехмерную матрицу 3 на 2 на 3. Если dim = 1 создается вектор, 0 - скаляр. Проблема заключается в том,что моя программа должна работать для любого номера измерений. Тоесть при dim =4 должна получатся 4х-мерная матрица, при 5 - 5-мерная и так далее. Я мог бы написать код для каждого случая отдельно если б я знал что максимум измерений будет 5,например. Но я не знаю,сколько их будет. Собственно мой вопрос: возможно ли написать код который создаст n-размерную матрицу, в зависимости от значение которое пользователь введет? Я чувствую,что есть какой-то способ это сделать.. Но не могу додуматся какой) Помогите пожалуйста.
0
|
|
| 27.09.2016, 06:44 | |
|
Ответы с готовыми решениями:
54
Создать массив с неизвестным количеством ячеек Как создать массив с неизвестным количеством элементов
|
|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
|
| 27.09.2016, 17:30 [ТС] | |
|
Ну я понимаю, но в мейне у вас 3 цикла для 3хмерного массива, и я не понимаю как их адаптировать к любому количеству изменений
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 27.09.2016, 17:33 | ||
|
Могу даже предположить, что понятие единственно правильного существует только в политике. И то только потому, что вся политика построена на лжи.
0
|
||
|
Helper C/C++
286 / 163 / 122
Регистрация: 22.09.2016
Сообщений: 518
|
||||||
| 27.09.2016, 17:35 | ||||||
|
На циклы внимания не обращать:
Это то же самое, что и m[3][1][7] = 999, если использовать возможности компилятора; Так понятно ??
0
|
||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
| 27.09.2016, 17:35 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
|
| 27.09.2016, 18:14 [ТС] | |
|
Хорошо, буду ждать
0
|
|
|
Helper C/C++
286 / 163 / 122
Регистрация: 22.09.2016
Сообщений: 518
|
||||||
| 27.09.2016, 18:29 | ||||||
|
Слегка упростил код. Вот что получилось:
0
|
||||||
|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
|
| 27.09.2016, 18:36 [ТС] | |
|
Сейчас еще более непонятно получилось.... А где dimensions теперь? И что n=0 в мейне делает?
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||||||
| 27.09.2016, 18:40 | |||||||
|
Кликните здесь для просмотра всего текста
Сейчас меня ждут другие великие дела. Буду рад услышать ваши замечания. Повторяю - проект не закончен.
0
|
|||||||
|
Helper C/C++
286 / 163 / 122
Регистрация: 22.09.2016
Сообщений: 518
|
|
| 27.09.2016, 18:43 | |
|
n - это переменная счетчик, каждое значение которой присваивается элементу многомерного массива. Напр.: nds[2,3,1] = n;
Далее, в данному примере, количество измерений dimensions не принципиально. Вы просто формируете строку std::string а не массив std::vector. В строку записываются данные в следующем формате: string s_args = "2,3,1" - это эквивалентно nds[2][3][1] = n трехмерного массива созданного на уровне компилятора. Добавлено через 1 минуту Байт, в данном случае Вы как и я допускаете принципиальную ошибка усложняя код. (см. мой пример выше).
0
|
|
|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
|
| 27.09.2016, 19:19 [ТС] | |
|
Спасибо за помощь. Приду домой - попробую оба варианта.
Байт, операции стандартные + - * / % а также max и min. Они будут сложнее?
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||
| 27.09.2016, 19:48 | |||
![]() Вообще все поэлементные операции так же просты, как и сложение.
0
|
|||
|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
||
| 28.09.2016, 04:30 [ТС] | ||
|
Байт, до меня, вроде бы, доходит. Но можете подробнее свой код описать? Например у меня есть массив значений для двухмерной матрицы размерами 2х3: 1,2,3,4,5,6. Если я использую create(2) с вашего кода, то создам двухмерный массив, но как мне потом эти значения перевести в него на правильные места? Меня еще очень запутывает то, какая переменная у вас за что отвечает. Если вы б могли уточнить - был бы оочень благодарен
0
|
||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
| 28.09.2016, 06:38 | ||||||
0
|
||||||
|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
||||||
| 28.09.2016, 07:56 [ТС] | ||||||
|
Mr.X Спасибо, попробую ваш код и отпишусь!
Байт можете еще рассказать как именно ваша функция setVal устанавливает значения в массиве? Например мне нужно создать 2хмерный 2х3 массив, и у меня есть 6 значений который должны в нем быть (1,2,3,4,5,6) - куда мои значения идут в вашей функции? И как мне потом получить индекс к каждому из элементов? Напоследок хотел бы показать код, который я написал для 3х измерений максимум
0
|
||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||||||||||||
| 28.09.2016, 10:40 | ||||||||||||
|
Добавлено через 5 минут Идея в том, чтобы "вытянуть" многомерный массив в одномерный. Собственно, так и поступает транслятор. Когда он видит mas[2][3] = { {1,2,3}, {4,5,6}} он его фактически заменяет на m[6] = { 1, 2, 3, 4, 5, 6 }; И вместо mas[i][j] берет m[3*i+j] Добавлено через 10 минут Кликните здесь для просмотра всего текста
Добавлено через 54 секунды Это для 5-мерного массива Добавлено через 15 минут А это для твоего примерчика 2 х 3
Не проверял. Возможны ошибки. Буду благодарен за их обнаружение (а еще больше - за исправление)
0
|
||||||||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
| 28.09.2016, 12:59 | ||||||
|
Реализовал функцию print:
0
|
||||||
|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
|
| 28.09.2016, 17:23 [ТС] | |
|
Mr.X а у Вас тоже для максимум 3 измерений? В мейне я вижу 3 цикла для 3хмерной структуры, 1 цикл для одномерной... Все как в моей.. или я что-то пропустил?
Добавлено через 11 минут Байт а ваша setVal назначает каждому элементу значение Val? Его можно переписать чтобы каждый элемент соответвующие значение получал? Как в моем 2х3 = [ [1,2,3] [4,5,6]]. И потом, если я хочу добавить каждый элемент, то я делаю Val[0][1] + Val[0][2] и тд.. но если у меня все в одном массиве, как в вашем примере, и мне нужно получить доступ к элементу val[0][2], как мне знать где он находится в одномерном массиве a[X]?
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 28.09.2016, 17:40 | ||
|
Печать матрицы производится функцией print, которую надо еще доработать чуть-чуть.
0
|
||
|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
|
| 28.09.2016, 17:44 [ТС] | |
|
Mr.X
А как можно получить доступ если я задам 4 измерений, например к элементу [0][2][2][1]?
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
| 28.09.2016, 17:53 | |
|
0
|
|
| 28.09.2016, 17:53 | |
|
Создать и заполнить одномерный массив случайным количеством случайных элементов Как правильно создать массив с заданным в ручную количеством элементов в массиве Необходимо создать двумерный массив с количеством строк равным количеству полученных узлов xml документа.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|