|
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 52
|
|
Создать массив с n-ым количеством измерений27.09.2016, 06:44. Показов 5069. Ответов 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 документа.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|