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

Массив произвольной размерности и работа с ним

20.03.2013, 11:05. Показов 5331. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Появилась интересная задача: создать функцию для создания массива, размерность которого укажут в ходе программы(то есть не a[n] и n укажут-а а[q1][q2][q3][q4]..., и q1,q2... укажут, как и количество этих q, уже в процессе выполнения программы) и поменять местами первый с последним, второй с предпоследним и так далее элементы. Вопрос в следующем: как, собственно, создать такой массив, как сделать необходимое (изначально неизвестное) количество вложенных циклов для затрагивания всех элементов массива? Если вариантов несколько-то лучше самый простой и быстродейственный

З.Ы. Для количества вложенных циков-на ум приходит эллипсис, хотя с ним и гемор. А вот идей по созданию массива полный 0.
З.З.Ы. Создать строку вместо массива не предлагать-индусский код не для меня.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.03.2013, 11:05
Ответы с готовыми решениями:

Работа с матрицами произвольной размерности. Создать функцию, которая для произвольной матрицы вычисляет
a)количество столбцов, содержащих данный элемент b) и еще что бы что нибудь считала, не важно но на подобие такого оба задания по типу...

Работа с матрицами произвольной размерности. Создать функцию, которая для произвольной матрицы вычисляет:
а) максимальную сумму по столбцам б) количество минимальных элементов массива Распишите подробно, хочу наконец разобраться. Заранее...

Работа с матрицами произвольной размерности. Создать функцию, которая для произвольной матрицы вычисляет
а) номер столбца, в котором расположен максимальный элемент б) сумму минимальных элементов в каждом столбце Спасибо.

35
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
20.03.2013, 11:09
Задача не интересная. Это даже не задача. Самое обычное выделение динамической памяти. new. Кол-во циклов у тебя уже известно, когда пользователь задаст размер массива.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.03.2013, 11:12
Создать одномерный массив, размерности N = q1*q2*...*qn. А для доступа по n-мерным координатам сделать обертку, принимающую Point<N>.
0
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 11:29  [ТС]
Vourhey, не смешно. Как выделять память через new я знаю, вопрос в том как создать массив произвольной РАЗМЕРНОСТИ а не РАЗМЕРА. То есть могут задать a[q1] а могут a[q1][q2][q3][q4][q5]...[q100500].
Tulosba, просил же не предлагать строку. Это не вариант.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.03.2013, 11:41
Цитата Сообщение от JollyRoger Посмотреть сообщение
просил же не предлагать строку
У Вас, видимо, какое-то странное понятие "строки".
0
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 11:46  [ТС]
Под строкой я имел в виду одномерный массив.
0
 Аватар для m1Rr0r
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
20.03.2013, 12:40
насколько я понимаю, произвольной размерности, нельзя создать
0
 Аватар для CollSpack
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 55
20.03.2013, 12:50
Вам лучше ознакомиться с STL - Vector.
И не придется создавать велосипед.
0
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 12:54  [ТС]
Да я знаком. Вектор отличается от динамического массива тем, что можно количество элементов менять после того, как он создан, и тем, что для обмена элементов можно менять ссылки на них. Это не устраняет ни одной из 2х моих задач(создание многомерного массива и операции над ним).
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
20.03.2013, 13:01
Кажется я понял, что нужно. По-моему тут рекурсия будет хорошим вариантом с точки зрения простоты реализации.
1
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 13:23  [ТС]
Функция-рекурсия и для создания массива(используя то что ссылка на w[0]=*w) и для операций с ним, которая вызывает себя в цикле, но каждый раз уменьшая размерность на 1, и начинающая реальные операции только когда доходит до размерности в 1, то есть до строки...
Непросто, но да ладно. Есть только одна загвоздка в таком случае: w[0][0][0]=***w. И сколько этих звёздочек будет в массиве, знать заранее нельзя(размерность же). Как в таком случае передать ссылку на массив какой-то функции(в моём случае, функции перестановки)?

CollSpack, я и не хочу создавать велосипед, поэтому и написал сюда
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
20.03.2013, 13:27
Цитата Сообщение от JollyRoger Посмотреть сообщение
Есть только одна загвоздка в таком случае: w[0][0][0]=***w. И сколько этих звёздочек будет в массиве, знать заранее нельзя. Как в таком случае передать ссылку на массив функции?
Ну можно передавать *ptr, по сути без разницы. Разница будет только на последнем этапе, когда нужно будет выделять память непосредственно под тип данных, но это тоже решаемо.
P.S. ты путаешь указатели и ссылки.
0
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 13:39  [ТС]
Да я их вообще не различаю(указатели и ссылки) :о Разве это не одно и то же?
всмысле *ptr? Я знаю только один метод правильно послать массив n-той размерности в функцию: послать указатель n-той степени(то есть (n)w, вместо (n)-нужное количество звёздочек)+размерность отдельно посылать. Есть альтернатива части с n-тым количеством звёздочек?
0
 Аватар для SummerRain
328 / 327 / 92
Регистрация: 16.12.2012
Сообщений: 544
20.03.2013, 13:51
Ссылка должна быть прикреплена к конкретному объекту, а указатель может быть сам по себе.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
20.03.2013, 13:52
Цитата Сообщение от JollyRoger Посмотреть сообщение
Разве это не одно и то же?
Нет, скажем так: ссылки - это удобные указатели (с некоторыми ограничениями)


Цитата Сообщение от JollyRoger Посмотреть сообщение
Я знаю только один метод правильно послать массив n-той размерности в функцию: послать указатель n-той степени(то есть (n)w, вместо (n)-нужное количество звёздочек)+размерность отдельно посылать. Есть альтернатива части с n-тым количеством звёздочек?
На самом деле пока память выделяется под указатели совсем не важно сколько звездочек. Т.е. в рекурсии в каждом вызове можно использовать указатель с 2 звездочками, этого будет достаточно.
Другое дело что потом работать с этим N-мерным массивом хз как, если только опять через рекурсию, и то там костыли городить придеться.
0
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 14:26  [ТС]
Окей-с, попробуем...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
**char arr_create(char* IdOfType, char **atop, int *dim_arr, int dim, int curr_dim=0){
//IdOfType-пока не нужен, для простоты будем создавать массив int'ов
//atop-ссылка большей на 1 размерности, чем наша. a[7] это atop от a[7][x];
//dim_arr-массив интов, содержит размерности массива
//dim-количество размерностей
//curr_dim-размерность в которой работаем, если не задано то 0
 int i;
 if(dim==curr_dim-1){   //то есть если это последняя размерность, ниже спускаться некуда. тут создаём строку int'ов.
  int **asdf=new int[dim_arr[curr_dim]];
  return asdf;
 }
 //else не пишу, return завершит выполнение функции если будет тот случай
 for(i=0;i<dim_arr[curr_dim];i++) arr_create(IdOfType, atop[i], dim_arr, dim, curr_dim+1);
}
Что-то вроде этого?) мне выдаёт ошибку "expected unqualified-id before 'char' " в первой строке функции. Вообще не совсем понял схему передачи ссылок с **...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
20.03.2013, 14:30
**char
что это?
0
20.03.2013, 14:40

Не по теме:

Цитата Сообщение от Vourhey Посмотреть сообщение
**char
что это?
Это значит: сначала надо освоить инструмент, а потом уже этим инструментом что-то делать.

0
2 / 2 / 1
Регистрация: 31.12.2012
Сообщений: 31
20.03.2013, 14:48  [ТС]
Это указатель на указатель на чар. Как я понял, Kastaneda имел в виду что у нас есть (n)w, где (n)-нужное количество звёздочек, и это указатель. Как *w его передать нельзя, но если сделать указатель на него-выйдет **r, и его уже можно передавать. Хотя я считаю, что если r-указатель на (n)w, то это будет (n+1)r, а не (2)r.
хз вообще
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
20.03.2013, 14:50
Цитата Сообщение от JollyRoger Посмотреть сообщение
Это указатель на указатель на чар.
Это не он.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2013, 14:50
Помогаю со студенческими работами здесь

работа с матрицами произвольной размерности
Помогите пожалуйста,с заданием. Заранее большое спасибо.

Работа с матрицами произвольной размерности
Создать функцию которая для произвольной матрицы вычисляет: А) номер столбца в котором расположен максимальный элемент Б) сумму...

Работа с матрицами произвольной размерности:
Работа с матрицами произвольной размерности: Создать функцию которая для произвольной матрицы:а) меняет местами максимальные элементы...

Дан двумерный массив произвольной размерности
Попросили сделать, не очень шарю в VBA. Прошу помочь. Дан двумерный массив произвольной размерности. Найти одномерный массив элементы...

Как в классе реализовать массив произвольной размерности?
Доброго времени суток. Написал класс, который создает одно-дву-трех мерные массивы с возможностью вызова элемента массива по индексу а...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru